Rdiff-backup permet de sauvegarder un répertoire vers un autre répertoire local ou distant. L’idée générale est de combiner les caractéristiques d’un miroir et d’une sauvegarde incrémentielle.
Il conserve les anciennes versions des fichiers, cela permet de :
- restaurer un fichier tel qu’il était à une date antérieure
- récupérer les fichiers effacés
Il permet de faire un backup :
- vers/depuis un répertoire local
- vers/depuis un serveur ssh distant
- vers des systèmes de fichiers qui ne supportent pas la gestion des droits Unix/Linux
Il n’enregistre/transmet que les parties modifiées des fichiers et il est possible de filtrer les fichiers à sauvegarder.
Rdiff-backup préserve également les sous-répertoires, les liens, permissions, uid/gid du propriétaire, les heures de modification, les attributs étendus, les ACL, …
Installation de Rdiff-backup
L’installation doit se faire sur les deux machines, il en est de même pour ssh
si ce n’est pas déjà le cas.
# apt-get install rdiff-backup |
Normalement Rdif-backup est installé dans /usr/bin
# ls usr/bin/ | grep rdiff-backup |
Effectuer un backup sur la même machine
Copie du répertoire /home/Bender
vers le dossier /root/SAVE01
# rdiff-backup /home/Bender /root/SAVE01 |
Copie avec exclusion du répertoire /home/Bender/www
# rdiff-backup --exclude /home/Bender/www /home/Bender /root/SAVE01 |
Un répertoire /SAVE01/rdiff-backup-data
va automatiquement se créer et contiendra les différences avec les anciennes versions des fichiers.
Effectuer un backup sur une machine distante
Rdiff-backup communique en SSH. Il faudra qu’il soit également installé sur la machine distante au risque d’avoir cette erreur :
[...] |
Il faut également s’assurer qu’Iptables (ou votre firewall) ne bloque pas l’accès sortant vers le port SSH de la machine distante, surtout si les ports choisis sur les 2 machines sont différents
Commande pour un backup distant
Nous allons créer un backup du répertoire /root/listes
du serveur vers une autre machine distante. Le répertoire cible est remplacé par user@ipDistante::répertoireCibleDistant
:
# rdiff-backup /root/listes/ [email protected]::/home/alinux/SAVE_liste |
Si le port n’est pas celui habituellement utilisée par ssh il faudra le préciser :
# rdiff-backup /root/listes/ '-p2222 [email protected]::/home/alinux/SAVE_liste' |
Cette commande peut aussi être utilisée pour transférer rapidement des dossiers d’une machine à une autre:
# rdiff-backup /home/alinuxMaison/RecherchePerso/ '-p2222 [email protected]::/home/alinuxTravail/projet' |
Erreur de clés
Voir http://n0tes.fr/2018/03/03/ssh-sans-mot-de-passe/
Lister les backups disponibles
L’option -l
permet le listing
# rdiff-backup -l /SAVE01 |
Mode verbeux
# rdiff-backup -v /SAVE01 |
L’option -v
suivit d’une valeur : -v5, -v9 ajoute des informations
Restauration des backups
Il existe plusieurs options pour restaurer : En fonction d’une date précise ou d’un backup précis.
Dans tout les cas il faudra utiliser l’option -r
(restore).
-r 6B # Restituera les fichiers datant de 6 backups en arrière |
Le manuel donne encore plus de possibilité au niveau de la précision des dates.
Restauration sur la même machine de dossier
Il semble qu’il ne faille pas mettre de / à la fin du chemin à restituer.
# rdiff-backup -r 1B --force SAVE01/Janvier2012 /home/_Restore/ |
L’option --force
est utile pour la création du répertoire cible lorsque celui-ci existe déjà.
Restauration sur une machine distante de dossier
La commande est la même mis sauf qu’il faut préciser l’adresse du serveur et l’utilisateur
# rdiff-backup -r 1B --force SAVE01/Janvier2012 '-p4242 [email protected]::/home/_Restore/Janvier2012' |
Ainsi qu’un port si celui-ci est différent de 22
Restauration sur la machine locale en allant chercher dans le serveur de backup
On reste sur le serveur et on va aller chercher les backups sur la machine prévue à cet effet.
# rdiff-backup -r 1B --force '[email protected]::/home/aline/SAVES.2018/ROOT.08/scripts' _Restaure/' |
Ainsi qu’un port si celui-ci est différent de 22
Restauration sur une machine distante de fichier
La commande est la même sauf qu’il faut préciser l’adresse du serveur et l’utilisateur
# rdiff-backup -r 1B --force SAVE01/Janvier2012/fichier.txt '-p4242 [email protected]::/home/_fichier.txt' |
Ainsi qu’un port si celui-ci est différent de 22
Type de sauvegarde
Il en existe de 3 types ; la sauvegarde complète, incrémentale et différentielle
- Complète : Sauvegarde la totalité des fichiers et dossier ciblés
- Incrémentale : Copie tous les éléments modifiés depuis la sauvegarde précédente
- Différentielle : Copie tous les éléments modifiés depuis la sauvegarde complète
Automatisation
Mise en place d’un script
On se situe sur le serveur et celui-ci va envoyer ses fichiers à sauvegarder vers une machine distante. On va crée un script ‘General.sh’ qui sera appelé et lancé (donc exécutable) par cron
. Ce script contiendra la commande rdiff-backup
#!/bin/bash |
Pour dater les backups on peut utiliser les variables de la commande date
, par exemple :
# date +'%Y.%m.%d_%H:%M:%S' |
Ce qui nous donnera :
#!/bin/bash |
Par exemple date +’%Y.%m.%d_%H:%M:%S
renvoie 2013.05.10_22:41:45
Contenu de la crontab
Pour changer l’éditeur par défaut de cron il faut modifier la variable #EDITOR
:
# export EDITOR=vim |
Ainsi la crontab s’ouvrira avec Vi :
# crontab -e |
# m h dom mon dow command |
Ici le premier script se lancera tout les jours * * * à 12h30 et le second à 12h40.
L’option -l
permettra de juste voir le contenu de la crontab
Script pour backups complets 1 fois/semaine et des incrémentiels tout les jours
Le script précédent utilisait la commande date
pour créer un dossier comportant les sauvegardes. Puisque ces dossiers changent de nom tout les jours, toutes les sauvegardes journalières sont complètes – et à la fin de l’année le disque est saturé.
Pour régler se problème très facilement il suffit d’utiliser une des variables de la commande date qui permet de récupérer le numéro de la semaine de l’année. Au choix on peut utiliser %V
, %U
ou %W
, l’aide de date
nous indique les différences :
U # le numéro de la semaine de l'année, avec le dimanche comme premier jour de la semaine (00..53) |
Ici on prendra %V
# date '+%V' |
Ainsi à chaque nouvelle semaine sera fait une sauvegarde complète (puisqu’il y a création du nouveau dossier) et les 6 autres jours une sauvegarde incrémentielle (puisque le dossier cible est le même). La sauvegarde incrémentielle sera “visible” (avec la commande ls pour voir les modifications ou la commande rdiff-backup -l
pour lister les backups) uniquement si il y a eu des modifications depuis la dernière sauvegarde complète ou incrémentale.
Le script contiendra :
#!/bin/bash |
Note : Il faut que le dossier de SAVE*/
soit déjà présent, vous pouvez faire :
mkdir SAVES.`date +'%Y'` |
La cible sera par exemple SAVE.2013/Semaine.18
et durant les 6 jours suivant des incrémentales seront sauvegardées dans ce dossier. La semaine suivante (à partir du Lundi donc) un nouveau dossier sera crée SAVE.2013/Semaine.19
avec une sauvegarde complète puis les incrémentielles les autres jours et ainsi de suite.