Souvent je me suis demandé comment mettre en place de manière automatique un script permettant de sauvegarder des dossiers locaux sur un partage de fichiers samba, depuis linux ou Mac OSX. La réponse n’est pas très compliquée.La solution à mettre en place se compose de deux étapes et donc deux scripts. Le premier doit s’assurer que le partage samba est toujours bien monté sur la machine exécutant la sauvegarde (ici un mac sous Snow Leopard). Pour se faire, nous allons exécuter via cron le script suivant tous les jours à 11h59 (p.ex.) :
#!/bin/sh # Put Samba Host IP as Host host="10.0.1.103" # Desktop Path with trailing slash desktop="/Volumes/" # Share Username username="myUser" # Share Password password="myPassword" # Share 1 Name shr1="sharedFolderName" # Ping the host to see if it exists outp=`ping -c 1 $host | grep "0.0% packet loss"` # Based on ping create folders and mount # or don't mount and delete folders if they exist if [ "$outp" = "1 packets transmitted, 1 packets received, 0.0% packet loss" ]; then echo "Found $host, mounting file systems..." # Share 1 dir1=${desktop}${shr1} if [ ! -d "$dir1" ]; then # Can't Find Directory So Create It echo "Creating Mount Point: $dir1"; mkdir "$dir1" else echo "Found Mount Point: $dir1" fi if [ -d "$dir1" ]; then echo "Mounting..." mount_smbfs //"$username":"$password"@"$host"/"$shr1" "$desktop""$shr1" fi fi
Ensuite, il nous faut exécuter le script de sauvegarde à 12h (p.ex.). Voici son contenu :
#!/bin/sh FOLDER=encore; LOCAL_TARGET=/Volumes/sharedFolderName; # Rotating backups: # step 1: delete the oldest backup, if it exists # rm options are (r)ecursive and (f)orce if [ -d $LOCAL_TARGET/$FOLDER.5 ] ; then rm -rf $LOCAL_TARGET/$FOLDER.5 ; fi; # step 2: shift (rename) the middle backup(s) back by one, if they exist if [ -d $LOCAL_TARGET/$FOLDER.4 ] ; then mv $LOCAL_TARGET/$FOLDER.2 $LOCAL_TARGET/$FOLDER.5 ; fi; # step 2: shift (rename) the middle backup(s) back by one, if they exist if [ -d $LOCAL_TARGET/$FOLDER.3 ] ; then mv $LOCAL_TARGET/$FOLDER.2 $LOCAL_TARGET/$FOLDER.4 ; fi; # step 2: shift (rename) the middle backup(s) back by one, if they exist if [ -d $LOCAL_TARGET/$FOLDER.2 ] ; then mv $LOCAL_TARGET/$FOLDER.2 $LOCAL_TARGET/$FOLDER.3 ; fi; if [ -d $LOCAL_TARGET/$FOLDER.1 ] ; then mv $LOCAL_TARGET/$FOLDER.1 $LOCAL_TARGET/$FOLDER.2 ; fi; # step 3: make a hard-link-only copy of the latest backup, if it exists # cpio options are single (p)ass, create dir and (l)ink files if [ -d $LOCAL_TARGET/$FOLDER.0 ] ; then cp -adl $LOCAL_TARGET/$FOLDER.0 $LOCAL_TARGET/$FOLDER.1 fi; # step 4: create backup by updating previous # rsync options are (a)rchive and (delete) extra rsync -arvz --delete-after --ignore-errors ~/Desktop/toSave1 ~/Desktop/toSave2 $LOCAL_TARGET/$FOLDER.0/; # step 5: update backup.0 to reflect the backup date and time touch $LOCAL_TARGET/$FOLDER.0 ;
Dans cet exemple, on sauvegarde ~/Desktop/toSave1 ~/Desktop/toSave2 (il est possible d’en mettre autant que souhaité) et on conserve les sauvegardes des 5 derniers jours (au plus ou moins en modifiant le premier script)
Laisser un commentaire