Il est parfois nécessaire de faire des sauvegardes de son poste de travail, ou bien de quelques dossiers. Je vous propose ici une solution pour sauvegarder votre répertoire personnel (ou tout autre répertoire), en utilisant la commande rsync.
Rappels sur les principes de sauvegardes
Afin de garantir une sécurité maximum, il est conseillé de ne pas garder les médias de sauvegarde au même endroit (et a priori pas dans la même machine) que les données à sauvegarder. Cet objectif peut facilement être atteint avec un disque dur externe par exemple. En effet, si votre machine subit un incident physique (incendie, court circuit, il serait dommage que les sauvegardes pâtissent elles aussi de cet incident)
De plus, il est préférable de faire des sauvegardes incrémentielles, ou bien dans des endroits différents. Imaginons que vous supprimiez un fichier qui ne vous semble pas important. Vous sauvegardez ensuite, en écrasant la sauvegarde précédente. A ce moment, vous n’avez plus aucun moyen de retrouver le fichier que vous avez supprimé.
Utilisation basique de rsync
Rsync est un outil de synchronisation des données, entre une source et une destination.
Voilà ce que l’on peut apprendre en faisant un man rsync
rsync options source destination
La source peut être un répertoire local, ou distant (en ssh, ou une machine sur laquelle tourne le démon rsync). Même chose pour la destination. On peut donc faire un rsync pour ‘pousser’ des données, ou aller en récupérer. Dans notre cas, nous allons travailler sur des répertoires locaux.
Les options sont nombreuses, et nous allons les détailler pas à pas.
Les options de rsync
Elles sont nombreuses, et nous n’allons en utiliser que certaines. Bien entendu, vous pouvez regarder le man pour avoir plus de détails ou découvrir d’autres options qui vous intéressent.
- -a : archive
- -v : verbose, permet de voir en détail ce que fait la commande
- -h : human readable : les tailles de fichiers transférés sont affichées de façon claire (en Ko, Mo, etc…)
- -z : compress : permet la compression des transferts. C’est totalement inutile quand on travaille en local uniquement, mais cela permet de compresser les données (et donc de réduire les volumes de transfert) quand on travaille en distant. Cela ne réduit que les volumes de transfert et pas du tout les volumes des données sauvegardées.
- –exclude : fichiers à ne pas transférer
Il existe d’autres options que nous verrons plus tard.
Première sauvegarde
Supposons que vous vouliez sauvegarder votre home (/home/stephane) dans un disque dur externe, monté sous /media/ddext, sane un répertoire sauvesteph, et que vous ne voulez pas sauvegarder les fichiers dont l’extension est *tmp
La première commande à lancer est
rsync -avhz –exclude=*tmp /home/stephane/ /media/ddext/sauvesteph
On peut mettre autant d’exclude que l’on veut. En général, on met –exclude=.gvfs* pour ne pas sauvegarder les dossiers distants que l’on a monté (en ftp ou sftp par exemple)
Cette commande va maintenant faire une copie simple des fichiers, de manière récursive, de /home/stephane vers /media/ddext/sauvesteph. Si vous modifiez un fichier de /home/stephane et que vous relancez la commande, rsync ne va transférer QUE le fichier qui a été modifié, ce qui occasionne un gain de temps non négligeable.
Sauvegardes suivantes
Nous allons maintenant analyser une autre option :
- –link-dest : fait une sauvegarde en se basant sur le répertoire en paramètre pour la comparaison.
Le link-dest est une option importante. Supposons que vous avez une sauvegarde existante dans /media/ddext/sauvesteph. Vous souhaitez faire une autre sauvegarde sans /media/ddext/sauve2.
rsync -avhz –delete –link-dest=/media/ddext/sauvesteph –exclude=.gvfs* –exclude=*tmp –exclude=*tmp /home/stephane/ /media/ddext/sauve2
Pour chaque fichier, il va comparer l’existant avec le backup dans sauvesteph. Si le fichier existe et qu’il n’a pas changé, au lieu de le copier dans sauve2, il va créer un nouveau hard link. Le fichier va se trouver à la fois dans sauvesteph et dans sauve2, même s’il n’est présent qu’une fois sur le disque. Ainsi, le répertoire sauve2 contient tous les fichiers nécessaires, mais il ne prend réellement que la place du différentiel depuis sauvesteph. Vous pouvez le constater en lançant la commande :
du -sh /media/ddext/*
Vous verrez que les répertoires n’ont pas du tout la même taille.
Pour finir
Voici un petit script qui permet de sauvegarder dans des répertoires qui ont la date du jour. A vous de changer la source et la destination en fonction de ce que vous souhaitez (il sauvegarde le /home/stephane dans /media/ddext/backup_datejour, et il faut avoir une première sauvegarde dans /media/ddext/backup.initial
#!/bin/sh
datejour=`date '+%y%m%d'`
/usr/bin/rsync -avhz \
--exclude=.gvfs* \
--exclude=*tmp \
--link-dest=/media/ddext/backup.inital \
/home/stephane/ \
/media/ddext/backup_${datejour}
A présent, plus aucune excuse pour ne pas faire de sauvegardes régulières 🙂