Sauvegardes avec Rsync

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

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 🙂

Laisser un commentaire