Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Script de sauvegarde avec rsync

74 réponses
Avatar
sebastienmarty
Bonjour tous,

Je souhaiterais que ma sauvegarde se déroule comme suit:

1 - Montage du volume de backup externe
2 - Sauvegarde
3 - Démontage du volume de backup externe

Je pensais pouvoir le faire avec Carbon Copy Cloner, en lui indiquant un
"preflight script", mais il se trouve qu'il vérifie /avant/ si le volume
de destination est disponible. Donc ça ne marche pas.

Du coup je m'oriente vers la ligne de commande, et à force de chercher
un peu partout, j'ai pondu un script de ce genre :

disktool -l | egrep -i "Mountpoint = '', fsType = 'hfs', volName =
'.*BACKUP" | cut -d\' -f2 | xargs -n1 disktool -m
sleep 10
sudo rsync -xrlptgoEv --progress --delete / /Volumes/BACKUP
disktool -l | egrep -i "Mountpoint = '/Volumes/.*BACKUP" | cut -d\' -f2
| xargs -n1 disktool -p


Mes questions:
a/ est-ce qu'on peut faire mieux ou plus simple (les lignes disktool
notamment restent assez absconces pour moi) ?
b/ est-ce qu'il est possible de faire en sorte que rsync ne nécessite
pas sudo, afin de rendre tout ça complètement automatique et transparent
?
c/ quelle est ensuite la meilleure méthode, sous Mac OS X 10.5, pour
programmer le lancement à intervalle régulier ? Cron ?

Merci pour vos lumières !
--
[SbM]
<http://sebastienmarty.free.fr> - <http://tradintosh.free.fr>
<http://sbm.ordinotheque.free.fr> - <http://palmiciel.free.fr>
"If the French were really intelligent, they'd speak English" (W. Sheed)

10 réponses

1 2 3 4 5
Avatar
Patrick Stadelmann
In article <1iyc2i2.107uj10h2rf9cN%,
(Pierre-Olivier TAUBATY) wrote:

par contre, il faudrait un truc qui test que le disque est bien branché,
avant de poursuivre (si le disque est pas branché il monte pas donc
pouvoir interrompre le script dans ce cas là).

J'aimerais déployer chez lui, lors de mon prochain séjour chez lui un
tel système non basé sur Time Machine, de manière à ce qu'en cas de
problème, il puisse rebooter illico sur la sauvegarde...



Time Machine fait cela, et il ne s'exécute que si le disque est branché
(avec même un rappel après 1 ou 2 semaines sans sauvegardes). Par
contre, on ne peut pas rebooter directement sur la sauvegarde, il faut
booter sur le DVD et restaurer la sauvegarde sur un autre volume.

Patrick
--
Patrick Stadelmann
Avatar
Eric Levenez
Le 17/04/09 20:07, dans
, « Patrick
Stadelmann » a écrit :

Par
contre, on ne peut pas rebooter directement sur la sauvegarde, il faut
booter sur le DVD et restaurer la sauvegarde sur un autre volume.



Si on a copié le DVD sur le disque Time Machine par l'utilitaire disque, on
peut booter sur ce disque et choisir la sauvegarde voulue sans utiliser le
DVD à ce moment.

--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.
Avatar
Patrick Stadelmann
In article <C60E940A.E60A6%,
Eric Levenez wrote:

Le 17/04/09 20:07, dans
, « Patrick
Stadelmann » a écrit :

> Par
> contre, on ne peut pas rebooter directement sur la sauvegarde, il faut
> booter sur le DVD et restaurer la sauvegarde sur un autre volume.

Si on a copié le DVD sur le disque Time Machine par l'utilitaire disque, on
peut booter sur ce disque et choisir la sauvegarde voulue sans utiliser le
DVD à ce moment.



Oui, mais il faudra quand même faire la restauration. Si c'est 500 Go de
données, il va falloir un moment, alors qu'avec un clone, en quelques
minutes on est à nouveau opérationnel.

Patrick
--
Patrick Stadelmann
Avatar
sebastienmarty
Eric Levenez wrote:

Le 17/04/09 20:00, dans <1iyc27v.1vfu75bztvyttN%,
« SbM » a écrit :

> Ah mais voilà exactement ce que je cherche ! Mais je tape cette ligne où
> ? Dans mon script ?

man sudoers
man visudo



Ça m'a l'air touffu, mais au moins j'ai enfin la piste que je cherchais.
Je vais lire ça à tête reposée. Merci ;)

Reste l'autre question: est-ce que j'utilise cron pour programmer
l'exécution à intervalle régulier, ou autre chose de plus "moderne" ?

--
[SbM]
<http://sebastienmarty.free.fr> - <http://tradintosh.free.fr>
<http://sbm.ordinotheque.free.fr> - <http://palmiciel.free.fr>
"If the French were really intelligent, they'd speak English" (W. Sheed)
Avatar
OdarR
On 17 avr, 11:19, (SbM) wrote:
disktool -l | egrep -i "Mountpoint = '', fsType = 'hfs', volName =
'.*BACKUP" | cut -d' -f2 | xargs -n1 disktool -m
sleep 10
sudo rsync -xrlptgoEv --progress --delete / /Volumes/BACKUP
disktool -l | egrep -i "Mountpoint = '/Volumes/.*BACKUP" | cut -d' -f2
| xargs -n1 disktool -p

Mes questions:
a/ est-ce qu'on peut faire mieux ou plus simple (les lignes disktool
notamment restent assez absconces pour moi) ?



un peu plus clair, et un peu plus complet, oui.

b/ est-ce qu'il est possible de faire en sorte que rsync ne nécessite
pas sudo, afin de rendre tout ça complètement automatique et transpar ent
?



il me semble que oui. rsync n'est pas réservé à root
je l'utilise déjà dans des scripts sans sudo.

c/ quelle est ensuite la meilleure méthode, sous Mac OS X 10.5, pour
programmer le lancement à intervalle régulier ? Cron ?



meilleure: launchd, mais il impose beaucoup de texte dans un xml pour
des choses simples. Alors quand on connait déjà cron...pour un petit
test pourquoi pas.
par défaut, nous avons donc aussi crontab, qui semble encore être
supporté dans le Leopard actuel (10.5.6).

J'ai essayé de comprendre tes 2 lignes avec disktool. Apple recommande
plutot diskutil.
Je ne trouve pas cut très intuitif...je preferre 'awk', qui découpe
les colonnes de données facilement. J'imagine que tu comprends l'usage
du pipe '|' ...(?)

Celà pourrait être pour le mount:

diskutil list | grep BACKUP | awk '{print $6}' | xargs -n1 diskutil
mount

essaie donc juste cette ligne...histoire de confirmer que la 6e
colonne est aussi chez toi bien le nom du disque que tu cherches.

et ceci pour le démontage :
diskutil list | grep BACKUP | awk '{print $6}' | xargs -n1 diskutil
unmount

entre les deux, tu peux laisser la commande rsync. (pourquoi sudo ? un
utilisateur peut utiliser rsync sjnm)

Maintenant, en considérant les cas où le disque n'est pas connecté, j e
me suis dit qu'un petit script serait mieux. Et comme je connais plus
très bien le korn shell script, ça pourrait être ceci en Python (p.ex .
nommé monbackup.sh):

#! /usr/bin/env
python
from subprocess import *
import time

cmd="diskutil list | grep BACKUP | awk '{print $6}'"
disque=Popen(cmd,stdout=PIPE,shell=True).communicate()[0]

if disque != None and len(disque)>0:
Popen("diskutil mount " + disque,shell=True)
time.sleep(5)
Popen("say 'mounted'", shell=True) #a commenter apres essais

#detail rsync ci-
dessous
cmd="rsync blabla..."
Popen(cmd, shell=True)

Popen("diskutil unmount " + disque, shell=True)
Popen("say 'unmounted'", shell=True) #a commenter apres essai
else:
Popen("say 'disk not present'", shell=True)
pass


=> on stocke ce script dans un fichier exécutable (unix) terminé
en .sh pour la clarté, et il suffit de programmer cron, comme ceci:
crontab -e
(là, on tombe sur vi, désolé :)

j'y ai recopié ceci:
SHELL=/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin

#min hour mday month wday command
30 * * * * /Users/OdarR/Documents/monbackup.sh


Tu sauves ('esc' puis ":x" enter), et tu devrais avoir toutes les
heure 30 la procédure qui s'enclenche.

au moins ça marche et c'est du fait maison :-)

Olivier
Avatar
OdarR
On 17 avr, 11:19, (SbM) wrote:
c/ quelle est ensuite la meilleure méthode, sous Mac OS X 10.5, pour
programmer le lancement à intervalle régulier ? Cron ?



cron n'est pas encore mort, on le prouve là-dedans:
http://manuals.info.apple.com/en_US/Command_Line_Admin_v10.5.pdf

ayé.
Olivier
Avatar
sebastienmarty
OdarR wrote:

On 17 avr, 11:19, (SbM) wrote:
> disktool -l | egrep -i "Mountpoint = '', fsType = 'hfs', volName > > '.*BACKUP" | cut -d' -f2 | xargs -n1 disktool -m
> sleep 10
> sudo rsync -xrlptgoEv --progress --delete / /Volumes/BACKUP
> disktool -l | egrep -i "Mountpoint = '/Volumes/.*BACKUP" | cut -d' -f2
> | xargs -n1 disktool -p
>
> Mes questions:
> a/ est-ce qu'on peut faire mieux ou plus simple (les lignes disktool
> notamment restent assez absconces pour moi) ?

un peu plus clair, et un peu plus complet, oui.

> b/ est-ce qu'il est possible de faire en sorte que rsync ne nécessite
> pas sudo, afin de rendre tout ça complètement automatique et transparent
> ?

il me semble que oui. rsync n'est pas réservé à root
je l'utilise déjà dans des scripts sans sudo.



Et ce serait capable par exemple de cloner intégralement mon disque
système, même si je le lance sans sudo ? Dans ce cas je me torture les
méninges pour rien ;)

J'ai essayé de comprendre tes 2 lignes avec disktool. Apple recommande
plutot diskutil.



Oui, je les avais trouvées sur le net, j'ai essayé de remplacer par
disktool mais ça ne marchait pas.

Je ne trouve pas cut très intuitif...je preferre 'awk', qui découpe
les colonnes de données facilement. J'imagine que tu comprends l'usage
du pipe '|' ...(?)



Oui, oui.

Celà pourrait être pour le mount:

diskutil list | grep BACKUP | awk '{print $6}' | xargs -n1 diskutil
mount



Je me le traduit : on demande à diskutil d'afficher la liste des disques
et partitions, on récupère la ligne correspondant à la partition
"BACKUP", on extrait la 6e colonne (qui contient le nom sous forme
/dev/diskXsY), et on la passe comme argument à "diskutil mount".

essaie donc juste cette ligne...histoire de confirmer que la 6e
colonne est aussi chez toi bien le nom du disque que tu cherches.



Chez moi c'est la 7e, mais ça fonctionne parfaitement, merci!

et ceci pour le démontage :
diskutil list | grep BACKUP | awk '{print $6}' | xargs -n1 diskutil
unmount



Ça marche aussi (en choisissant la 7e colonne au lieu de la 6e), sauf
qu'il faut mettre "eject" au lieu de "unmount" pour que le disque
s'arrête de tourner.

entre les deux, tu peux laisser la commande rsync. (pourquoi sudo ? un
utilisateur peut utiliser rsync sjnm)



Cf. question au-dessus : si rsync peut sauvegarder l'intégralité de mon
disque système (le cloner) alors que je suis simple utilisateur, tant
mieux.

Maintenant, en considérant les cas où le disque n'est pas connecté, je
me suis dit qu'un petit script serait mieux. Et comme je connais plus
très bien le korn shell script, ça pourrait être ceci en Python (p.ex.
nommé monbackup.sh):



Wow. Je connais encore moins le python que le bash, mais si ça
fonctionne, après tout ;)

Merci pour ta réponse, en tout cas.

--
[SbM]
<http://sebastienmarty.free.fr> - <http://tradintosh.free.fr>
<http://sbm.ordinotheque.free.fr> - <http://palmiciel.free.fr>
"If the French were really intelligent, they'd speak English" (W. Sheed)
Avatar
laurent.pertois
SbM wrote:

a/ est-ce qu'on peut faire mieux ou plus simple (les lignes disktool
notamment restent assez absconces pour moi) ?



Déjà, voici ce que dit le man de disktool :

This command is deprecated and exists only for backwards compatibility.
Do not use disktool, use diskutil instead.

Et ça ne date pas d'hier, au moins du 10.4, donc il vaut mieux passer à
diskutil.

b/ est-ce qu'il est possible de faire en sorte que rsync ne nécessite
pas sudo, afin de rendre tout ça complètement automatique et transparent
?



D'autres ont répondu...

c/ quelle est ensuite la meilleure méthode, sous Mac OS X 10.5, pour
programmer le lancement à intervalle régulier ? Cron ?



launchd et lingon pour programmer le tout. De plus, dans ton script
launchd tu vas pouvoir préciser quel utilisateur va exécuter le script
ce qui règle le problème b. De plus, on doit pouvoir lancer un script
lors du montage d'un disque, de mémoire c'est ce que fait CCC.

--
Politically Correct Unix - UTILITIES
The "touch" command has been removed from the standard distribution due
to its inappropriate use by high-level managers.
Avatar
sebastienmarty
Laurent Pertois wrote:

SbM wrote:

> a/ est-ce qu'on peut faire mieux ou plus simple (les lignes disktool
> notamment restent assez absconces pour moi) ?

Déjà, voici ce que dit le man de disktool :

This command is deprecated and exists only for backwards compatibility.
Do not use disktool, use diskutil instead.

Et ça ne date pas d'hier, au moins du 10.4, donc il vaut mieux passer à
diskutil.



C'est ce que j'avais lu en effet, mais je n'arrivais pas à faire la même
chose avec diskutil. Grâce à Olivier c'est bon, et je viens de pondre
une traduction de son bout de script en bash, comme suit:

----------------------------------------------
#!/bin/sh

BUvolname=BU_Mini_HD

BUdev=$(diskutil list | grep $BUvolname | awk '{print $6}')
diskutil mount $BUdev
MountPoint=$(diskutil info $BUdev | grep 'Mount Point:' | awk '{print
$3}')

if [ "$MountPoint" = "" ]
then
echo "Volume cible absent, annulation de la sauvegarde..."
exit 1
else
echo "Volume cible OK, lancement de la sauvegarde..."
fi

###PARTIE SAUVEGARDE RSYNC###

diskutil eject $BUdev
-----------------------------------------------

Ça a l'air de fonctionner, me reste plus qu'à intégrer la commande rsync
avec la bonne syntaxe, ou (cf. plus bas dans ta réponse) à régler CCC
pour qu'il se déclenche au montage de la partoche.

A noter que mon problème de colonne (7 au lieu de 6) venait du fait que
ma partoche contenait au départ un espace.

> b/ est-ce qu'il est possible de faire en sorte que rsync ne nécessite
> pas sudo, afin de rendre tout ça complètement automatique et transparent
> ?

D'autres ont répondu...



Tu fais référence au fait de lancer rsync sans sudo, ou de passer outre
le mot de passe avec sudoers/visudo ?

> c/ quelle est ensuite la meilleure méthode, sous Mac OS X 10.5, pour
> programmer le lancement à intervalle régulier ? Cron ?

launchd et lingon pour programmer le tout. De plus, dans ton script
launchd tu vas pouvoir préciser quel utilisateur va exécuter le script
ce qui règle le problème b.



Impec. Je regarderai lingon dès demain, là j'ai eu ma dose de bash pour
aujourd'hui ;)

De plus, on doit pouvoir lancer un script
lors du montage d'un disque, de mémoire c'est ce que fait CCC.



Damned mais tu as raison... Sauf qu'il doit falloir démonter la partoche
à la main ensuite, j'imagine.

Merci beaucoup à tous pour votre aide, en tout cas : j'avance bien, et
j'apprends en même temps, c'est génial ;)

--
[SbM]
<http://sebastienmarty.free.fr> - <http://tradintosh.free.fr>
<http://sbm.ordinotheque.free.fr> - <http://palmiciel.free.fr>
"If the French were really intelligent, they'd speak English" (W. Sheed)
Avatar
laurent.pertois
OdarR wrote:

On 17 avr, 11:19, (SbM) wrote:
> c/ quelle est ensuite la meilleure méthode, sous Mac OS X 10.5, pour
> programmer le lancement à intervalle régulier ? Cron ?

cron n'est pas encore mort, on le prouve là-dedans:
http://manuals.info.apple.com/en_US/Command_Line_Admin_v10.5.pdf



Cron est dorénavant lancé par launchd qui a des capacités de
programmation d'exécution alors autant passer par ce dernier, la preuve
les scripts periodic sont lancés ainsi.

--
Politically Correct Unix - UTILITIES
The "touch" command has been removed from the standard distribution due
to its inappropriate use by high-level managers.
1 2 3 4 5