Sauvegardes avec RDiff Backup

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
rdiff-backup
rdiff-backup-statistics

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 :

[...]
Fatal Error: Truncated header string (problem probably originated remotely)
Couldn't start up the remote connection by executing
[...]

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
Found 5 increments:
increments.2013-05-10T16:00:00+02:00.dir Fri May 10 16:00:00 2013
increments.2013-05-10T17:00:00+02:00.dir Fri May 10 17:00:00 2013
increments.2013-05-10T18:00:00+02:00.dir Fri May 10 18:00:00 2013
increments.2013-05-10T19:00:00+02:00.dir Fri May 10 19:00:00 2013
increments.2013-05-10T20:00:00+02:00.dir Fri May 10 20:00:00 2013
Current mirror: Fri May 10 20:00:00 2013

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
-r 6s # Restituera les fichiers datant de 6 secondes
-r 6m # Restituera les fichiers datant de 6 minutes
-r 6h # Restituera les fichiers datant de 6 heures
-r 6D # Restituera les fichiers datant de 6 jours
-r 6W # Restituera les fichiers datant de 6 semaines
-r 6M # Restituera les fichiers datant de 6 mois
-r 6Y # Restituera les fichiers datant de 6 ans

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
rdiff-backup /home/client01 [email protected]::/SAVE

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
rdiff-backup /home/client01 [email protected]::/SAVE.`date +'%Y.%m.%d_%H:%M:%S'`

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

#------------------------------------------------------#
# Backup du /home #
#------------------------------------------------------#
30 12 * * * scripts/GeneralHome.sh

#------------------------------------------------------#
# Backup des logs #
#------------------------------------------------------#
40 12 * * * script/GeneralLog.sh

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)
%V # le numéro de la semaine ISO, avec le lundi comme premier jour de la semaine (01..53)
%W # le numéro de la semaine, avec le lundi 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
rdiff-backup /home/client01 [email protected]::/SAVE.`date +'%Y'/Semaine.'%V'`

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.

Documentation

http://rdiff-backup.nongnu.org

> Partager <