# Script de sauvegarde simple avec 'rsync'

**URL:** <https://www.debian-fr.org/t/script-de-sauvegarde-simple-avec-rsync/67939>\
**Category:** Trucs et Astuces\
**Created:** [Février 21, 2016, 10:12 UTC](https://www.debian-fr.org/t/script-de-sauvegarde-simple-avec-rsync/67939 "2016-02-21T22:12:52Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 10:12 UTC](https://www.debian-fr.org/t/script-de-sauvegarde-simple-avec-rsync/67939/1 "2016-02-21T22:12:52Z")

</div>

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](https://www.debian-fr.org/sauvegarde-rsync-que-mettre-dans-exclude-from-t54025.html) à ce sujet ). Là aussi, il vous faudra accommoder.  
Pour les variables des partitions cibles, j’emploie les `PARTLABEL`s, qui ont l’avantage d’être uniques et pérennes, mais vous pouvez les remplacer par les `LABEL`s, les `UUID`s ou les `PARTUUID`s, 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.

```nohighlight
#!/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 0

```

---

<div class="post-metadata">

**Author:** ![seb-ksl](https://www.debian-fr.org/user_avatar/www.debian-fr.org/seb-ksl/32/2946_2.png) [@seb-ksl](https://www.debian-fr.org/u/seb-ksl)\
**Post date:** [Février 21, 2016, 10:12 UTC](https://www.debian-fr.org/t/script-de-sauvegarde-simple-avec-rsync/67939/2 "2016-02-21T22:12:53Z")

</div>

Merci, ça sera utile 🙂

Je me permets une petite correction : pourquoi sortir sur un code `1` (ta dernière ligne), alors que visiblement tout s’est bien passé et que ça mériterait un code de retour `0` ?

Et si je comprends bien, tu `rsync` d’abord tout `/`(y compris `/home`) sur un disque puis une seconde fois uniquement `/home` sur un autre, c’est ça ?

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 10:12 UTC](https://www.debian-fr.org/t/script-de-sauvegarde-simple-avec-rsync/67939/3 "2016-02-21T22:12:53Z")

</div>

Pour le dernier `exit`, tu as raison, “`exit`” suffit, je pense.  
Non, la première passe de concerne que `/` en excluant `/home`  
Les deux sauvegardes sont sur des partitions différentes :

cibleR= Racine sauve = PARTLABEL=sauve2dDD  
cibleH = Home sauve = PARTLABEL=sauve-ricardo2dDD

EDIT :  
Ce qui te fait penser ça, c’est que tu ne connais pas le contenu du fichier “exclure”.  
le premier exclut `/home` (+ d’autres bricoles).

EDIT 2:  
Je le note dans mes explications :

`
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.`

EDIT 3 :  
Au sujet de “`exit`”, j’ai toujours des doutes.  
Je ne trouve pas de tuto assez clair pour connaitre la bonne valeur à placer.  
Je suis preneur d’explication, en FR, si possible.

---

<div class="post-metadata">

**Author:** ![seb-ksl](https://www.debian-fr.org/user_avatar/www.debian-fr.org/seb-ksl/32/2946_2.png) [@seb-ksl](https://www.debian-fr.org/u/seb-ksl)\
**Post date:** [Février 21, 2016, 10:12 UTC](https://www.debian-fr.org/t/script-de-sauvegarde-simple-avec-rsync/67939/4 "2016-02-21T22:12:55Z")

</div>

Typiquement le code de sortie 0 signale une fin de programme sans erreur à l’exécution. Les codes supérieurs à `0` traduisent une erreur, à la charge du développeur de documenter quel numéro correspond à quelle erreur.

Effectivement, pour les fichiers `exclude`, je n’avais pas vu que tu en utilisais deux différents, ceci explique cela.

Merci pour les précisions 🙂

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 10:12 UTC](https://www.debian-fr.org/t/script-de-sauvegarde-simple-avec-rsync/67939/5 "2016-02-21T22:12:55Z")

</div>

OK, mis ‘`exit 0`’ à la fin.  
Différence entre ‘`exit`’ seul et ‘`exit 0`’ ❓

---

<div class="post-metadata">

**Author:** ![seb-ksl](https://www.debian-fr.org/user_avatar/www.debian-fr.org/seb-ksl/32/2946_2.png) [@seb-ksl](https://www.debian-fr.org/u/seb-ksl)\
**Post date:** [Février 21, 2016, 10:13 UTC](https://www.debian-fr.org/t/script-de-sauvegarde-simple-avec-rsync/67939/6 "2016-02-21T22:13:01Z")

</div>

À confirmer par quelqu’un de moins nul en sh que moi (c’est pas compliqué), mais je suppose qu’un `exit` seul est considéré comme une fin d’exécution sans erreur, donc `0` (c’est ce que suggère le  
**`man exit`** en tout cas).

---

<div class="post-metadata">

**Author:** ![PengouinPdt](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pengouinpdt/32/3978_2.png) [@PengouinPdt](https://www.debian-fr.org/u/PengouinPdt)\
**Post date:** [Mars 16, 2016, 1:48 UTC](https://www.debian-fr.org/t/script-de-sauvegarde-simple-avec-rsync/67939/7 "2016-03-16T13:48:25Z")

</div>

En effet, c’est EXACTEMENT pareil …  
Cela part du principe que `0 == TRUE` 😉

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Mars 16, 2016, 2:21 UTC](https://www.debian-fr.org/t/script-de-sauvegarde-simple-avec-rsync/67939/8 "2016-03-16T14:21:07Z")

</div>

Merci de la confirmation.
