rdiff-backup : Solution de sauvegarde incrémentielle

Faire des sauvegardes différentielles journalières de son /home et supprimer les sauvegardes vieilles d'une semaine par exemple. Ceci est réalisé via le logiciel rdiff-backup. J'explique également comment tout automatiser.

Rdiff-backup peut être utilisé sur Linux, MacOsX et Windows, ce qui vous permet d'installer ce logiciel sur n'importe quel ordinateur, et sauvegarder ces ordinateurs sur votre serveur via SSH. Téléchargement pour un "non ubuntu".

Faire la sauvegarde

Voici la commande qui permet de faire une sauvegarde :

rdiff-backup --exclude /home/mon_login/.aMule /home/mon_login /repertoire_de_sauvegarde

Ici on sauvegarde tout le /home/mon_login sauf le repertoire /home/mon_login/.aMule dans le dossier de destination /repertoire_de_sauvegarde.

Si /repertoire_de_sauvegarde n'est pas vide, un message nous indique qu'il faut utiliser l'option ​--force et dans ce cas, son contenu est supprimé. Donc attention, dans ce cas, à sauvegarder le contenu de /repertoire_de_sauvegarde au préalable.

Exemples

Sauvegarder uniquement les répertoires /usr/local et /var :

rdiff-backup --include /usr/local --include /var --exclude '**' / /backup

Idem, mais la liste des répertoires à sauver dans un fichier nommé include-list.txt qui contient :

/var
/usr/bin/gzip

La commande sera alors :

rdiff-backup --include-globbing-filelist include-list.txt --exclude '**' / /backup

Pour plus d'infos, voir ici

Supprimer des sauvegardes

Pour supprimer les différences accumulées au fur et à mesure que l'on a ajouté des sauvegardes :

rdiff-backup --remove-older-than 1W --force /repertoire_de_sauvegarde

Ici on enlève toutes les modifications enregistrées vieilles de plus d'une semaine. On peut mettre D(ay),W(eek), M(onth) et Y(ear).

S'il il y a plusieurs sauvegardes à supprimer, la commande échoue. C'est pourquoi il faut rajouter le paramètre ​--force pour ne pas prendre cette erreur en compte et que rdiff-backup effectue bien ce qu'on lui demande.

Tester un backup

Pour vérifier que nos sauvegardes fonctionnent bien, on peut restaurer une sauvegarde :

rdiff-backup -r now /repertoire_de_sauvegarde /repertoire_de_restauration

L'option -r now permet de remettre la version de la sauvegarde la plus récente. On peut remonter dans les sauvegardes, par exemple remettre le repertoire d'il y a 3 jours avec l'option -r 3D.

Rdiff-backup fait une replication parfaite des fichiers dans leur dernière version. Ainsi pour restaurer des données, il suffit de faire cp -a /backupDir /restoredDir

Voir la liste des sauvegardes

Liste simple :

 rdiff-backup -l /repertoire_de_sauvegarde

Liste en tableau avec la taille de chaque incrément :

 rdiff-backup --list-increment-size /repertoire_de_sauvegarde

Voir les statistiques des sauvegardes

 rdiff-backup-statistics /repertoire_de_sauvegarde

Sauvegarder sur une machine distante, via SSH

Remplacer

/repertoire_de_sauvegarde

par

<utilisateur>@<adresse_ip_de_la_machine_distante>::<repertoire_de_sauvegarde_sur_la_machine_distante>

Plus d'infos sur SSH ici

Voici la partie vraiment intéressante : comment faire pour que nos commandes précédentes se lancent de façon automatique, de façon à ce que l'on ait pas à les faire manuellement chaque jour ?

Journaliser les tâches

Tout d'abord quelques mots sur les logiciels de journalisation de tâches. Actuellement on dispose de trois outils sous Linux pour cela :

  • at qui permet de définir des tâches à réaliser à un instant précis et si la machine est éteinte à ce moment là, la tâche sera réalisée au prochain démarrage. Utilisable par tout le monde.
  • cron peut définir des tâches périodiques mais c'est un daemon donc si la machine est éteinte, la commande ne se lancera pas du tout. Utilisable par tout le monde.
  • anacron lance des tâches de facon périodique et si l'ordinateur n'était pas allumé au moment voulu, la tâche s'exécutera au prochain démarrage. Utilisable uniquement par root.

Dans notre cas, nous allons utiliser cron, cron utilise la crontab qui permet d'indiquer les tâches que l'on veut réaliser et à quelle fréquence.

Pour éditer la crontab, il suffit de faire :

crontab -e

Pour journaliser notre tâche, on indique à cron d'exécuter le script ~/sauve_mon_dossier.sh chaque jour à 20h00.

On met donc la ligne suivante dans notre crontab :

00    20    *    *     *    ~/sauve_mon_dossier.sh

Celle-ci signifie tous les jours à 20h00 lance le script /root/sauve_mon_dossier.sh . Ce sont bien les minutes d'abord et les heures ensuite, il n'y a pas d'erreur. Pour plus d'informations sur le formalisme du crontab, je vous invite à consulter cette page.

Le script

Ensuite, il reste à faire le script pour lancer les sauvegardes. On édite donc le fichier ~/sauv_mon_dossier.sh avec son éditeur favori et on y insère les lignes suivantes :

#!/bin/sh
nice -n 19 rdiff-backup --exclude /home/login/.aMule /home/login /mnt/save && nice -n 19 rdiff-backup --remove-older-than 1W --force /mnt/save

Le nice -n 19 signifie que lorsqu'on lance les commandes, elles s'exécutent avec la priorité la plus petite par rapport aux autres processus, ceci afin d'éviter que l'ordinateur ne se mette à ramer tous les jours à 20h00.

On sauvegarde le script et on n'oublie pas de mettre les droits d'exécution sur le fichier :

chmod +x ~/sauv_mon_dossier.sh

Voilà c'est fini ! On peut simplement vérifier que le script fonctionne bien en le lançant :

~/sauve_mon_dossier.sh

Normalement rdiff-backup se lance, fait sa sauvegarde et vous informe ensuite qu'il a ou non supprimé les sauvegardes plus vieilles d'une semaine.

* Pour éviter des problèmes de droit sur les fichiers, je vous conseille de faire ceci avant de lancer la sauvegarde :

sudo chown -R votre_nom.users $HOME/* && chmod u+r -R $HOME/*

* Dans le cas d'une utilisation simultanée de "max-file-size" et "exclude" il faut mettre "exclude" en premier sinon il sera ignoré. Par exemple :

rdiff-backup /home --max-file-size 1000 --exclude /home/me repertoire_de_sauvegarde

ne prendra pas en compte "–exclude /home/me". Par contre :

rdiff-backup /home --exclude /home/me --max-file-size 1000 repertoire_de_sauvegarde

sauvegardera tous les fichiers de /home de moins de 1 Ko sauf ceux présents dans /home/me. Plus d'explications ici

* Pour afficher les listes des sauvegardes :

rdiff-backup -l repertoire_de_sauvegarde

* Naviguer dans les snapshots : rdiff-backup-fs en montant les snapshots dans un dossier Pour avoir un dossier par snapshot dans le point de montage :

rdiff-backup-fs  mnt_path  backup_path
  • rdiff-backup.txt
  • Dernière modification: Le 11/03/2023, 20:07
  • par L'Africain