Sauvegarde avec Rdiff-backup

Rdiff-backup est un outil servant à sauvegarder vos fichiers. Il peut utiliser une variété de ports *nix.

Lancez systématiquement ces commandes en mode administrateur (root) depuis un terminal, à moins d'être invité à faire autrement.

Caractéristiques de rdiff:

Ce dont vous aurez besoin

Rdiff-backup garde une copie intégrale et non-compressée des fichiers que vous lui demandez de sauvegarder, ainsi que crée un historique incrémental. Aussi aurez-vous besoin pour votre sauvegarde d'un espace disque substantiellement plus volumineux que celui qu'occupent vos fichiers originaux. Si vous sauvegardez 100 Go, vous pourrez avoir besoin d'un espace de 120 Go (sur un disque dur différent, de préférence !)

Comment configurer rdiff

Imaginons que votre PC se présente comme suit :

Première chose à faire, installer rdiff-backup :

# apt-get install rdiff-backup

Ici, même si vous pouvez sauvegarder n'importe quel répertoire, nous décrivons la sauvegarde de l'intégralité de partitions. Nous voulons sauvegarder sda1 et sda5 (et pas sda6), et donc nous créons des répertoires pour stocher leurs données :

# mkdir -p /media/sdb1/rdiff-backups/192.168.0.1/root
# mkdir -p /media/sdb1/rdiff-backups/192.168.0.1/sda5

Votre adresse IP distinctive est utile, car si cet ordinateur doit servir à sauvegarder le contenu d'un autre, procédure décrite plus loin, elle vous sera indispensable.

Procéder à la sauvegarde

rdiff-backup utilise la syntaxe rdiff-backup répertoire-source répertoire-cible.

Avec rdiff utilisez toujours des identités de répertoires et jamais celles de fichiers.

Pour sauvegarder sda5, entrez :

# rdiff-backup /media/sda5 /media/sdb1/rdiff-backups/192.168.0.1/sda5

Et pour sauvegarder votre partition racine sda1, entrez :

# rdiff-backup --exclude '/tmp/*' --exclude '/proc/*' --exclude '/sys/*' \
> --exclude '/media/*/*' / /media/sdb1/rdiff-backups/192.168.0.1/root

Tout signalement de type "AF_UNIX path too long" peut être négligé. Le processus peut être lent si c'est la première fois que la partition est sauvegardée, et qu'il faut pour le faire en copier l'intégralité du contenu (et pas seulement les différences). Notez que nous n'avons aucune utilité à sauvegarder /tmp, /proc ou /sys puisque ceux-ci ne contiennent aucune donnée réelle ; de la même manière que nous ne voulons pas sauvegarder les partitions montées, puisque si nous le faisions nous demanderions la sauvegarde de sdb5, ce qui nous entrainerait dans un cycle infini ! La procédure pour sauvegarder nos partitions montées consistera bien sûr à le faire pour chacune séparément.

La raison d'être de l'instruction 'proc/*' et non de '/proc' tout court est de permettre une copie du seul répertoire sans procéder à celle de son contenu. La syntaxe utilisée est la même, et pour les mêmes raisons, pour /tmp, /sys et les points de montage.

De cette manière si vous détruisez votre partition racine et demandez ensuite sa restauration intégrale, les répertoires correspndant à /tmp, /proc, /sys et ceux ou seront montés les systèmes de fichiers de vos partitions seront re-créés. Si /tmp n'existe pas au lancement du serveur X, celui-ci peut s'en plaindre. Consultez la page man pour plus d'information sur --include et --exclude.

Restaurer des répertoires depuis une sauvegarde

Rdiff-backup utilise la syntaxe :

rdiff-backup -r <depuis-moment> <répertoire-source> <répertoire-cible>

Donc par exemple si, par erreur, vous auriez malencontreusement effacé le répertoire /media/sda5/photos, vous pourriez le restaurer en entrant :

# rdiff-backup -r now /media/sdb1/rdiff-backups/192.168.0.1/sda5/photos\
> /media/sda5/photos

L'option "-r now" commande un restauration à partir de la sauvegarde la plus récente. Si vous avez tout sauvegardé à intervales réguliers (avec cron, par exemple) et n'aviez pas réalisé avant plusieurs jours que le répertoire de photos ait été effacé, vous devriez restaurer à partir d'un état datant de quelques jours (et pas avec "now", qui considèrerait le répertoire /photos soit inexistant). Ceci peut aussi être utile à rétablir l'état antérieur de tout type de donnée.

Pour restaurer par exemple depuis un état datant de trois jours, utilisez la syntaxe "-r 3D"...mais comme les pages man l'expliquent :

"3D" se réfère à l'instant situé à 72 heures avant la commande, et si aucune sauvegarde n'existe correspondant à ce délai, rdiff-backup restaure l'état de la sauvegarde y étant immédiatement antérieure. Dans notre cas, si "3D" est utilisé, et que des sauvegardes disponibles n'existent que datant de 2 ou 4 jours, le répertoire sera restauré comme il se trouvait il y a quatre jours (vous devez avoir cela à l'esprit avant de procéder à vos restaurations).

La commande qui suit va vous permettre de visualiser la liste datée des dernière sauvegardes pour sda5:

# rdiff-backup -l /media/sdb1/rdiff-backups/192.168.0.1/sda5
Restaurer les partitions

Vous pouvez restaurer des partitions entières (montages) puisque après tout, les points de montage ne sont que des répertoires.

ATTENTION ! Ne tentez jamais la restauration d'une partition racine en cours d'utilisation ! Par cette commande vous effaceriez tous les fichiers de toutes vos partitions, y compris celles contenant les sauvegardes sur un disque séparé !! rdiff-backup exécute scrupuleusement ce que vous lui demandez...si la sauvegarde d'une partition racine a des points de montages vides, afin de restaurer la partition en l'état, il efface tout ce qui peut exister sur ces points de montage, pour faire correspondre la cible à la sauvegarde.

Pour restaurer sda5 depuis sa dernière sauvegarde, on entrera simplement :

# rdiff-backup -r now /media/sdb1/rdiff-backups/192.168.0.1/sda5 /media/sda5

Pour restaurer une partition racine

Restaurer une partition racine appelle à beaucoup de précautions et de circonspection !

Tout d'abord, ne tentez pas l'opération si cette partition est montée, comme le rappelle l'avertissement plus haut.

Il est vraiment utile de pouvoir y procéder, d'autant plus que la procédure ne prendra pas longtemps. Mais assurez-vous d'avoir bien lu les informations fournies dans ce manuel avant de la tenter.

Une manière d'y procéder consiste à démarrer sur un autre système Linux, installé sur une autre partition, si vous en disposez sur votre ordinateur. Dans ce cas, vous pourrez réinstaller la partition en question facilement, puisqu'elle sera pas votre partition racine en cours d'utilisation. Après la restauration vous pourrez à nouveau démarrer à partir de la partition restaurée, qui se présentera exactement telle qu'elle était au moment de sa sauvegarde. C'est à l'évidence, la plus simple des méthodes.

Une autre méthode passe par le démarrage à partir du Live-CD de aptosid, en opérant la restauration depuis celui-ci. Normalement rdiff-backup est intégré au Live-CD mais le cas où celui dont vous disposeriez n'inclurait pas rdiff, entrez dans grub au démarrage du cd , l'option "unionfs" qui vous permettra d'installer des applications avec le live-cd. Le démarrage Live effectué entrez ces commandes :

$ sudo su
# wget -O /etc/apt/sources.list http://aptosid.com/files/misc/sources.list
# apt-get update
# apt-get install rdiff-backup
Procédure de restauration
# mount /dev/sda1 /media/sda1
# mount /dev/sdb1 /media/sdb1
# rdiff-backup -r now /media/sdb1/rdiff-backups/192.168.0.1/root /media/sda1

Si vous utilisez un autre live-cd que aptosid qui embarquerait Klik, vous pouvez installer rdiff-backup avec klic puis lancer :

$ sudo ~/.zAppRun ~/Desktop/rdiff-backup_0.13.4-5.cmg rdiff-backup \
> -r now /media/sdb1/rdiff-backups/192.168.0.1/root /media/sda1

Il est fortement recommandé à toute personne entendant procéder à des sauvegardes de sa partition racine (dans l'intention de pouvoir la restaurer en cas de besoin), de tester le processus de restauration. Il n'existe rien de pire qu'imaginer que tout ira bien pour s'apercevoir d'une anomalie au moment critique.

Lorsque le disque dur est changé ou reformaté, revoir les UUIDs, (ou les Labels), dans le /boot/grub/menu.lst (grub-legacy) or files in /etc/grub.d (grub2) et le /etc/fstab, et modifier. Une façon aisée de modifier les fichiers menu.lst et fstab en cas de besoin, en tant que root:

blkid
Sauvegarder des PC distants

Vous pouvez sauvegarder d'autres PC dans un ordinateur local, du moment où vous pouvez vous y connecter en utilsant ssh (et si bien entendu votre espace disque est suffisant). Le serveur ssh (sshd) doit se trouver actif sur la machine distante. La machine n'a pas besoin d'appartenir à votre réseau local mais peut être située à n'importe quel endroit dans le monde.

Admettons que cet ordinateur distant comporte :

  1. Un disque dur de 100 gigas (sda) en service, avec pour partitions complémentaires montées :
  2. sda1 utilisée comme racine
  3. sda5 utilisée pour le stockage de données qu'ici nous n'avons pas l'intention de sauvegarder
  4. et sda6 pour le swap.
  5. Une adresse IP 192.168.0.2

Deux disques de 100 Gigas ne sauraient normalement être sauvegardés sur un disque de 200 Gigas en utilisant rdiff-backup (sinon il n'y aurait aucun espace pour les fichiers d'incrément) mais étant donné que vous ne sauvegardez pas la partition sda5 de l'ordinateur distant (les partitions peuvent même ne pas être saturées - mais ne vous y fiez pas !) alors vous pouvez estimer disposer de suffisamment d'espace. Mais souvenez-vous que rdiff-backup crée de plus en plus de fichiers d'incrément à mesure qu'il procède à des sauvegardes successives, et qui conduisent ces dernières à occuper de plus en plus d'espace disque.
Vous pouvez demander à rdiff-backup de ne garder en mémoire qu'un maximum d'un mois de sauvegardes, comme nous l'expliquerons plus loin, et ceci prendra évidemment moins d'espace que la mémorisation des sauvegardes de toute une année.

La première chose à faire sera d'installer rdiff-backup sur l'ordinateur distant. Tout ordinateur à exploiter avec rdiff-backup doit disposer de cet outil installé.

Pour sauvegarder le PC distant dans le PC local, lancez dans le PC local (IP 192.168.0.1 dans notre exemple) - en notant l'utilisation en double-colonne :;

# mkdir /media/sdb1/rdiff-backups/192.168.0.2/root
# rdiff-backup --exclude '/tmp/*' --exclude '/proc/*' --exclude '/sys/*' --exclude '/media/*/*' 192.168.0.2::/ /media/sdb1/rdiff-backups/192.168.0.2/root
Pour restaurer les données de l'ordinateur distant

La commande de restauration peut être lancée aussi bien depuis l'ordinateur local que depuis l'ordinateur distant.

Pour restaurer un répertoire /usr/local/games sur ordinateur distant, en lançant la commande depuis cet ordinateur:

# rdiff-backup -r now 192.168.0.1::/media/sdb1/rdiff-backups/192.168.0.1/root/usr/local/games\
> /usr/local/games

Pour restaurer un répertoire /usr/local/games sur un ordinateur distant, en lançant la commande depuis l'ordinateur local:

# rdiff-backup -r now /media/sdb1/rdiff-backups/192.168.0.1/root/usr/local/games\
> 192.168.0.2::/usr/local/games

Utilisez les mêmes syntaxes en restaurant votre partition racine depuis un live-cd (lorsque l'ordinateur distant a été démarré à partir du CD - cf les instructions plus haut).

Automatisation des sauvegardes

Si vous sauvegardez d'autres pc sur votre pc local, la première chose à faire est d'y autoriser les connexions ssh sans mot-de-passe avec utilisation de clés ssh. Note: nous parlons ici de connexion distantes 'password-less' en tant tant qu'administrateur (root). Celles-ci peuvent être paramétrées afin de n'être utilisables que pour exécuter les commandes de rdiff-backup, mais ce sujet outrepasse celui qui nous occupe dans ce chapitre. Reportez-vous à Configuration de SSH. Nous admettrons ici utiliser la méthode la plus simple et sûre pour obtenir des connexions sans mot-de-passe.

Depuis le pc local, faites ce qui suit :

# [ -f /root/.ssh/id_rsa ] || ssh-keygen -t rsa -f /root/.ssh/id_rsa

et appuyez deux fois sur la touche "Entrée" pour les mots-passe-nuls. Et ensuite :

# cat /root/.ssh/id_rsa.pub | ssh 192.168.0.2 'mkdir -p /root/.ssh;\
> cat - >>/root/.ssh/authorized_keys2'

Vous serez invité à entrer votre mot-de-passe d'administrateur (root)

Dès ce moment vous pourrez vous connecter en ssh au pc distant sans devoir entrer votre mot-de-passe, et l'utilisation de rdiff-backup pourra s'automatiser.

L'étape suivante consiste à créer un script bash qui contienne toutes vos commandes à rdiff-backup. Notre script bash peut ressembler à ceci :

#!/bin/bash
RDIFF=/usr/bin/rdiff-backup
echo
echo "=======Backing up 192.168.0.1 root======="
${RDIFF} --ssh-no-compression --exclude '/tmp/*' --exclude '/proc/*'\
 --exclude '/sys/*' --exclude '/media/*/*'\
 / /media/sdb1/rdiff-backups/192.168.0.1/root
echo "(purge des increments de plus de 1 mois)"
${RDIFF} --remove-older-than 1M\
 --force /media/sdb1/rdiff-backups/192.168.0.1/root
echo
echo "=======Backing up 192.168.0.1 mount sda5======="
${RDIFF} --ssh-no-compression --exclude /media/sda5/myjunk /media/sda5\
 /media/sdb1/rdiff-backups/192.168.0.1/sda5
echo "(purge des increments de plus de 1 mois)"
${RDIFF} --remove-older-than 1M\
 --force /media/sdb1/rdiff-backups/192.168.0.1/sda5
echo
echo "=======Backing up 192.168.0.2 root======="
${RDIFF} --ssh-no-compression --exclude '/tmp/*' --exclude '/proc/*'\
 --exclude '/sys/*' --exclude '/media/*/*' --exclude '/mnt/*/*'\
 192.168.0.2::/ /media/sdb1/rdiff-backups/192.168.0.2/root
echo "(et purge des increments de plus de 1 mois)"
${RDIFF} --remove-older-than 1M\
 --force /media/sdb1/rdiff-backups/192.168.0.2/root

Vous pouvez nommer ce script "mes-backups-rdiff.bash" et le disposer dans le répertoire /usr/local/bin de votre ordinateur local (serveur de backups), et le convertir en exécutable. Lancez-le pour vous assurer qu'il fonctionne.

Pour finir vous pouvez par exemple demander à cron de le lancer tous les soirs à 20h. La ligne suivante dans le crontab de root fera l'affaire, en appelant :

# crontab -e
et insérez la ligne suivante
0 20 * * * /usr/local/bin/mes-backups-rdiff.bash
Contenu révisé le 22/09/2010