follow me !

Documentations - Système / Réseau

Sauvegarder à l'aide de rsync

1. Présentation

Rsync est un outil en ligne de commande habituellement utilisé pour la synchronisation entre deux systèmes mais il peut également devenir une solution de sauvegarde intéressante. Cet outil est relativement simple à utiliser pour toute personne désirant faire des sauvegardes de son système.

Cet article explique comment utiliser rsync pour sauvegarder votre système sur un disque dur interne ou externe ou meme sur DVD. Ces supports sont devenus relativement abordables et peuvent être une bonne alternative.


2. Préparation

Avant toute chose, nous devons réfléchir sur ce qu'on veut sauvegarder. Cela nous permettra de savoir exactement ce que l'on veut faire avant de se lancer en oubliant la moitité des choses.


2.1. Que doit-on sauvegarder ?

Veut-on faire des sauvegardes completes ou partielles du système ? La sauvegarde complète du système fait une copie de tout ce qu'il y a sur le système sur un deuxième disque ou sur une bande. Cette solution permet une restauration rapide du système dans l'état qu'il avait lorsque la sauvegarde a été faite. En contrepartie, ces sauvegardes completes de système nécessitent beaucoup de temps, requiert beaucoup d'espace disque et ne sont pas souvent nécessaire.

Les sauvegardes partielles sont beaucoup plus rapide et n'ont pas besoin du même espace disque car vous ne sauvegardez que les répertoires et fichiers qui vous intéressent. Par exemple, une sauvegarde du répertoire /home contenant uniquement que les fichiers personnels des utilisateurs ou /etc/, qui contient les fichiers de configuration des divers logiciels installés sur la machine, serait une bonne chose car en cas de réinstallation du système la restauration serait relativement rapide.


2.2. Quels sont les supports sur lesquels on devrait sauvegarder ?

Dans le cadre de cet article, les sauvegardes sont faites sur les disques durs locaux mais on pourrait aussi bien les faire sur des disques séparés permettant en cas de crash d'intervertir les disques. Les sauvegardes peuvent également être faites, dans le cas de sauvegarde partielle, sur des DVD réinscriptibles. Ce support s'étant démocratisé ces derniers temps, un jeu de quelques DVD-RW vous permettra de faire des backups relativement souvent et pour pas trop cher.


2.3. Quand doit-on sauvegarder ?

Tout le temps !!! Qui n'a jamais perdu de données suite à un disque qui rendait l'âme ? N'avez-vous jamais détesté quelqu'un car il venait de vous renverser un soda sur votre dernier laptop et vous veniez de voir vos fichiers anéantis à jamais ?

Plus sérieusement, des sauvegardes hebdomadaires ou mieux quotidiennes sont un bon choix pour tout utilisateur d'ordinateurs. Sur votre système GNU/Linux à l'aide de cron et de scripts shell, vous pourrez automatiser et organiser vos sauvegardes.


3. Installation

Avant tout, il faut s'assurer que rsync est installé sur votre système en entrant rsync --version. Si vous voyez rsync version x.x.x alors c'est bon. Si vous voyez "command not found" ou un message similaire, il faudra l'installer.

Utilisons apt pour installer notre logiciel, les utilisateurs d'autres distributions Linux peuvent avoir recours à urpmi & co :

# apt-get install rsync
Nous voila avec un rsync tout beau tout neuf :)


4. Utilisation

Une utilisation simple de rsync est : rsync -a répertoire_source/ répertoire_destination/. Cette commande copie le répertoire répertoire_source vers le répertoire répertoire_destination. Rsync utilise un algorithme qui vérifie les différences entre les fichiers source et destination. Rsync procède à des sauvegardes incrémentales car il ne copie que les fichiers qui ont été modifiés nous fournissant ainsi un moyen rapide de mettre à jour nos sauvegardes.


4.1. Copies conformes à l'aide de l'option --delete

Lors de vos sauvegardes, l'option --delete permet la suppression de tout fichier présent dans le répertoire de destination qui n'est pas présent dans le répertoire source. Ceci assure qu'une copie conforme du répertoire a été faite. Rsync préserve les fichiers dans trouvés dans le répertoire de destination et non ceux dans le répertoire source, offrant ainsi la possibilité d'avoir plusieurs répertoires sources pour un seul répertoire de destination.


4.2. Intéret de plusieurs sauvegardes

Il est intéressant de disposer de plusieurs sauvegardes par semaine et ainsi pouvoir revenir sur une version bien précise d'un jour de la semaine. Vous pouvez par exemple utiliser la plus vieille sauvegarde avec celle d'aujourd'hui et faire la mise a jour avec rsync. Voici un exemple d'une rotation de sauvegardes sur 5 jours :

# se déplacer dans le répertoire des sauvegardes
cd backup_dir/

# renommer la plus vielle sauvegarde avec un nom temporaire
mv day5 oldest

# on incremente les sauvegardes et on renomme la plus ancienne 
# avec celle d'aujourd'hui
mv day4 day5
mv day3 day4
mv yesterday day3
mv today yesterday
mv oldest today

# mise a jour de la sauvegarde d'aujourd'hui
cp -al yesterday/. today
rsync -a --delete source/ today/


4.3. Votre première sauvegarde

Une chose qu'il faut s'assurer avant de lancer votre sauvegarde est que le média, quel qu'il soit (DVD-RW, bandes, disque usb ou firewire externe, disque dur interne, etc ...), recevant la sauvegarde dispose de suffisamment de place. Pour savoir la taille d'un répertoire il suffit d'utiliser la commande suivante du -sh votre_répertoire/.

Nous allons créer un petit script qui va nous permettre de faire notre sauvegarde. Veuillez à l'aide de votre éditeur favori, créer un script backup.sh. La variable $SOURCES va contenir la liste des répertoires que vous voulez sauvegarder.

#!/bin/sh
# backup.sh -- Sauvegarde à l'aide de rsync

# Répertoires à sauvegarder séparés avec un espace et sans slash de fin !
SOURCES="/home/pierre /home/natacha /var/mail"

# Répertoire de destination. C'est l'endroit où votre sauvegarde sera placé.
DESTINATION="/mnt/usb-hd/backup/"

# La variable EXCLUDE_FILE indique à rsync un fichier contenant 
# ce qui ne doit PAS être sauvegardé. 
# Laissez la variable vide si vous désirez sauvegarder le répertoire 
# complet de vos $SOURCES
# Si vous faites une sauvegarde complète de votre système, votre 
# variable $SOURCES 
# devrait être positionnée à "/" et vous devriez utiliser la variable EXCLUDE_FILE 
# Le fichier doit contenir les répertoires et fichiers que vous ne voulez pas 
# sauvegarder.
# Un exemple de la variable EXCLUDE_FILE serait :
# /proc/
# /tmp/
# /mnt/
# *.avi
# Veillez bien à indiquer un répertoire ou fichier par ligne.

EXCLUDE_FILE="/chemin/vers/fichier/exclude_file.txt"

# Commentez la ligne suivante pour désactiver le mode "verbeux"
VERBOSE="-v"
###########################

if [ -f $EXCLUDE_FILE ]; then
EXCLUDE="--exclude-from=$EXCLUDE_FILE"
fi

for source in $SOURCES; do
if [ ! -d $DESTINATION/$source ]; then
mkdir -p $DESTINATION$source
fi
rsync $VERBOSE $EXCLUDE -a --delete $source/ $DESTINATION/$source/
done

Modifier la variable $DESTINATION en fonction de l'endroit où vous voulez stocker votre sauvegarde. Sauvegardez votre fichier puis changez les permissions afin de le rendre exécutable à l'aide de la commande chmod +x backup.sh.

Vous êtes enfin prêt pour faire votre première sauvegarde. Lancez la commande ./backup.sh pour démarrer le processus de sauvegarde. La première fois le script mettra un certain temps à se terminer car rsync doit faire une copie de tous les fichiers ce qui ne sera pas le cas par la suite car il ne procedera à la copie que lorsqu'un changement a été remarqué. Si vous remarquez quelque chose de bizarre, pressez les touches Ctrl+c pour arrêter la commande. Une fois l'exécution du script terminé, vous devriez avoir une réplique exacte de votre répertoire SOURCES dans DESTINATION.


4.4. Automatisation de la procédure

Admettons que le script backup.sh se soit terminé convenablement et que vous ayez une copie exacte de vos fichiers dans le répertoire $DESTINATION, il est maintenant nécessaire d'automatiser tout cela. Pour cela nous allons utiliser l'ordonnanceur par défaut sous GNU/Linux à savoir le démon cron. Celui-ci utilise crontab pour planifier les tâches à exécuter. Pour utiliser le script pour des sauvegardes systèmes il faudra utiliser le compte root pour cela en passant root soit par la commande su soit en se connectant directement en root. Sinon un utilisateur normal, ainsi que root d'ailleurs, pourra planifier ses tâches à l'aide de la commande crontab -e.

Admettons que vous vouliez laner votre sauvegarde à une heure précise il faudrait procéder de la sorte :

# crontab -e 

Ensuite en suivant la syntaxe de crontab à savoir :

[minute] [heure] [jour] [mois] [jour de la semaine] [commande]
Il suffirait d'ajouter la ligne :
30 5 * * 1-5 /chemin/vers/backup.sh
ce qui exécutera le script tous les matins à 5h30 du lundi au vendredi. Une fois la ligne ajoutée, sauvez et quittez.

Il serait tout à fait envisageable de graver le tout sur un DVD réinscriptible une fois la sauvegarde terminée. Il serait bien d'avoir un jeu de dix DVD, ainsi on peut sauvegarder du lundi au vendredi nos fichiers en ayant une sauvegarde de la semaine dernière. Nous allons voir ce qu'il faudrait ajouter pour faire cela.


5. Gravez votre sauvegarde

L'avantage de graver notre sauvegarde en plus de celle sur le disque est qu'en cas de crash de celui-ci, nous aurons une copie de nos fichiers sur DVD. Il est clair que vu la taille actuelle des DVD, vous ne pourrez pas sauvegarder tout votre système sur DVD mais cela reste néanmoins intéressant pour vos sauvegardes de fichiers personnels ainsi que par exemple votre répertoire /etc/ contenant tous les fichiers de configurations de vos programmes.

Nous partirons sur l'exemple précédent qui sauvegardait nos fichiers du lundi au vendredi à 5h30 du matin. La chose à faire est d'ajouter la ligne suivante à la fin de notre script de sauvegarde :

# Gravure de notre sauvegarde en indiquant la date du backup
growisofs -Z /dev/dvd -R -J -V "Backup-$(date +%D)" $DESTINATION
Maintenant, il nous suffira de mettre un dvd réinscriptible dans le graveur le soir et d'attendre le lendemain matin pour l'avoir sur une belle galette :-) On pourrait également faire des filtres pour s'assurer que le DVD introduit n'est pas celui de la veille ou des choses comme cela. A vous d'être imaginatif concernant les améliorations que vous pourrez apporter à ce petit script.

rsync exclude

Salut,
J'ai aimé ton site, beaucoup d'information très utile.

Ce script est très utile et facile d'utilisation.

Et autre chose, le moyen d'exclure des répertoires.
Dans le script:
EXCLUDE="--exclude-from=$EXCLUDE_FILE"
Avec ce code je pouvais pas exclure les répertoires,

Après une recherche de man, j'ai trouvé en supprimant "-from", cela fonctionnait:
EXCLUDE="--exclude=$EXCLUDE_FILE"
Utile pour les répertoires comme, proc mnt media etc..

Bonne continuation

re

Ah je comprend mieux maintenant, les dossiers a exclure devait être dans le dossier exclude_file:
EXCLUDE_FILE="/chemin/vers/fichier/exclude_file.txt"

Moi qui utilisait directement du genre: EXCLUDE_FILE="/proc"

:D