Script de sauvegarde simple avec 'rsync'

Partagez ici vos Trucs et vos Astuces.
Répondre
Avatar du membre
filoha
Membre
Membre
Messages : 148
Enregistré le : 04 avr. 2016, 14:48
Localisation : Moitié Sud Métropole
Contact :
Status : Hors ligne

24 avr. 2016, 16:49

Ce tuto a été écrit par Ricardo et il est publié ici avec son autorisation.
====================================================================
Ricardo écrit :
Il y a environ 4 ans, j'avais fait un script de sauvegarde complet mais un peu rebutant à cause du nombre de variables. On le trouve encore dans T&A et dans le wiki.
Aujourd'hui, j'ai refait quelque chose de plus simple, toujours avec "rsync", qui ne nécessite que peu de personnalisation : les trois variables du haut et les lignes de commande 'rsync'
Pour ces dernières, je pars de mon exemple où j'utilise une partition pour tout le système sauf la "/home" et une autre partition pour la "/home". C'est à adapter à votre situation.
Les lignes de commande 'rsync' tiennent compte de fichiers "exclure" où sont énumérés les fichiers à exclure de la sauvegarde (voir le fil de Josephtux à ce sujet ). Là aussi, il vous faudra accommoder.
Pour les variables des partitions cibles, j'emploie les PARTLABELs, qui ont l'avantage d'être uniques et pérennes, mais vous pouvez les remplacer par les LABELs, les UUIDs ou les PARTUUIDs, ou même par les classique /dev/sdXY. Dans ce dernier cas, prenez bien garde à ce que vous faites.

Voici donc le code à coller dans un fichier que vous rendrez exécutable, comme pour tout script, et que vous placerez selon votre habitude. La mienne, c'est /usr/local/bin.

Si besoin explications supplémentaires, n'hésitez pas.

Code : Tout sélectionner

#!/bin/bash
### BEGIN INIT INFO
#  Nom du script : sauve
#  Auteur : Ricardo
#  Date de création : mai 2015 --- amélioré en 01/2016 = utilisation des PARTLABELs
#  Utilité : sauvegarde de ordibureau sur 2sDD
### END INIT INFO

 PtMontage='/mnt'
 cibleR='/dev/disk/by-partlabel/sauve2dDD'
 cibleH='/dev/disk/by-partlabel/sauve-ricardo2dDD'
 
 if [ ! -e $cibleR ]		# teste l'absence de la partition cible
    	then
        	echo "$cibleR est introuvable"
        	exit 1		# on sort
    	else 			# si la partition est trouvée
    		sudo mount -t ext4 $cibleR $PtMontage	# on monte la partition cible sur le point de montage
		if (("$?" > 0))				# si retour commande précédente = faux
			then
				echo "erreur de montage"
				exit 1			# on sort
			else				# si retour = 0 (bon), on exécute :
				sudo rsync -av --del --exclude-from=/root/exclure / $PtMontage
		fi
 fi

echo
printf '\E[30;45m'" sauve / terminé " ; tput sgr0
echo
echo
 sleep 2
 sudo umount $PtMontage
echo "Point de montage libéré"
 sleep 2
echo
echo "On passe à /home/ricardo"
 sleep 2
echo
 
 if [ ! -e $cibleH ]            # teste l'absence de la partition cible
        then
                echo "$cibleH est introuvable"
                exit 1          # on sort
        else                    # si la partition est trouvée
                sudo mount -t ext4 $cibleH $PtMontage   # on monte la partition cible sur le point de montage
                if (("$?" > 0))                         # si retour commande précédente = faux
                        then
                                echo "erreur de montage"
                                exit 1                  # on sort
                        else				# # si retour = 0 (bon), on éxécute :
				sudo rsync -av --del --exclude-from=/home/ricardo/exclure /home/ricardo/ $PtMontage
                fi
 fi
 sudo umount $PtMontage
echo
 printf '\E[30;45m'" sauvegarde complète et démontage effectué " ; tput sgr0
echo
 sleep 2
echo
 exit 
L'oubli est chose facile, mais la mémoire reste.
Avatar du membre
PengouinPdt
Contributeur
Contributeur
Messages : 1341
Enregistré le : 23 avr. 2016, 23:37
Localisation : 47/FR
Diaspora* : https://framasphere.org/u/hucste
Contact :
Status : Hors ligne

24 avr. 2016, 17:58

Ce n'est pas ce que j'appelle simple :p

Du simple, c'est :

Code : Tout sélectionner

dir_dest=""
dir_src=""
RSYNC_OPTIONS="-av --delete --delete-during --delete-excluded --ignore-errors --force --progress --stats"
rsync ${RSYNC_OPTIONS} --rsync-path="nice 19 ionice -c 3 -p $$" "${dir_src}" "${dir_dest}"
Bien vu l'usage des 'by-partlabel' ... malheureusement sous $Buntu, ce n'est pas le cas ... il y a bien les 'by-label' ... mais cela ne permet pas de pointer directement dessus. Bref, ce n'est pas grave !

Dès que je peux, je publie un de mes scripts :p
PengouinPdt { le seul, le vrai } ~ " Libre as a Pengouin "
- DIY - Debian Sid | Devuan Ceres
----
Ne réponds pas aux PM d'assistance
Répondre