Rdiff-backup
De wikiGite
Linux
Installation
Sur Debian 5 --> v1.2.5 (la différence de version mineure (.5 pour .8) ne provoque qu'un avertissement)
apt-get install rdiff-backup
Si on veut une version plus récente, il faut compiler :
apt-get install librsync-dev python-dev wget http://savannah.nongnu.org/download/rdiff-backup/rdiff-backup-1.2.8.tar.gz tar -xvzf rdiff-backup-1.2.8.tar.gz cd rdiff-backup-1.2.8 python setup.py install
Sur CentOS, si ça n'a pas déjà été fait (pour munin par exemple), installation repos RPMForge (-> Dépôts complémentaires).
Puis
yum --enablerepo=rpmforge install rdiff-backup
Echanger les clés DSA entre les serveurs
Afin que la connexion de Rdiff-backup via SSH ne demande pas de mot de passe, la clé ~/.ssh/id_dsa.pub de l'utilisateur qui se connecte à partir du "client" rdiff-backup doit être copiée "en une seule ligne" dans ~/.ssh/authorized_keys de l'utilisateur cible sur le serveur à sauvegarder. (se reporter à une procédure d'échange de clés pour SSH)
Test d'accès à un serveur
rdiff-backup --test-server root@192.168.1.21::/home
Sauvegardes
à partir d'un backup existant (cp ou rsync) : le répertoire destination existe mais n'est pas au format rdiff (manque les infos rdiff-data), il faut le forcer la première fois :
rdiff-backup --force -v5 root@192.168.1.2::/etc /backup/etc > rdiff_server1.log 2>&1
Ensuite on peut enlever le "--force".
Nettoyage
des incréments supérieurs à une fenêtre de rétention :
rdiff-backup -v5 --remove-older-than 4W /backup
Le "4W" signifie "4 weeks", soit 4 semaines à conserver. On peut donner un nombre de jours ("D") ou d'heures ("H"). Tous les incréments supérieurs à ce délai seront supprimés.
Informations sur les sauvegardes
Liste des incréments :
Sur le serveur de sauvegarde :
rdiff-backup -l /home/backup/server1/home/
A partir du serveur sauvegardé (remote-schema n'est utile que si le port ssh n'est pas standard) :
rdiff-backup -l --remote-schema='ssh -p 225 -C %s rdiff-backup --server' root@192.168.1.250::/home/backup
On peut lister aussi les tailles des différents incréments
rdiff-backup --list-increment-sizes /home/backup/server1/home/
Restore - Exemples
NOTE : le restore NE FONCTIONNE PAS SUR LES LIENS. Il faut indiquer le "vrai" répertoire ou fichier physique à restorer.
NOTE 2 : VERIFIER LES DROITS DES REPERTOIRES APRES UNE RESTAURATION, ils peuvent avoir changé.
# fichier /etc/hosts d'il y a 1 heure (--force si le fichier existe et qu'il faut l'écraser) rdiff-backup -v5 -r "1h" --force ./etc/hosts root@192.168.1.2::/etc/hosts
NOTE : le nom du fichier doit être indiqué à la source COMME A LA DESTINATION, sinon rdiff remonte TOUT LE REPERTOIRE !
# répertoire /etc d'il y a 3 jours rdiff-backup -v5 -r "3D" --force ./etc root@192.168.1.2::/etc
NOTE : le "-r" est obligatoire, on peut mettre "-r now", ou mieux: " -r "1B" " pour remonter la dernière sauvegarde. D'autres solutions sont "1D" (comme pour le backup) pour remonter la veille, ou 5m3s, ou 2010-12-21.
NOTE 2 : pour remonter un répertoire complet, il faut l'indiquer la source comme à la destination SANS "/" APRES (voir ci-dessus l'exemple /etc)
Exemple plus complet :
# rdiff-backup -l /mnt/backup/server1 Found 5 increments: increments.2013-04-12T01:28:44+02:00.dir Fri Apr 12 01:28:44 2013 increments.2013-04-13T01:29:00+02:00.dir Sat Apr 13 01:29:00 2013 increments.2013-04-15T01:27:16+02:00.dir Mon Apr 15 01:27:16 2013 increments.2013-04-16T01:29:06+02:00.dir Tue Apr 16 01:29:06 2013 increments.2013-04-17T01:31:23+02:00.dir Wed Apr 17 01:31:23 2013 Current mirror: Thu Apr 18 01:29:44 2013
# rdiff-backup -v5 -r "2013-04-12" --force /mnt/backup/server1/home/web root@server1.localdomain::/home/web
NOTE : partages CIFS/SMBFS
Documentation rdiff-backup :
rdiff-backup fails to run, printing an exception about "assert not upper_a.lstat()" failing. This can be resolved by unmounting the share, running the following command as root: $ echo 0 > /proc/fs/cifs/LookupCacheEnabled and then remounting the CIFS share.
Penser à ajouter cette ligne à /etc/rc.local pour qu'elle soit exécutée au démarrage du serveur.
De plus, si Windows est la destination des backups (par un montage samba sur une machine linux par exemple), il faut penser que le système cible ne connait pas les ACL unix (droits sur les fichiers, propriétaires, etc...). Il faut donc dire à rdiff-backup de ne pas essayer de faire des "chmod" et "chown". Windows ne sait pas non plus interpréter les liens, qu'ils soient hards ou symboliques.
Lancer rdiff-backup avec les options suivantes (en plus d'éventuelles autres options qui semblent utiles):
--no-hard-links --exclude-symbolic-links --no-acls --no-eas
Dans le fichier de configuration du script rdbackup ci-dessous, le paramètre RDIFF_OPTS serait donc:
RDIFF_OPTS="-v5 --force --create-full-path --exclude-fifos --exclude-sockets --no-hard-links --exclude-symbolic-links --no-acls --no-eas"
DEPANNAGE
Si après un problème de sauvegarde (disque plein, coupure de session ssh, etc...), les backups suivants se terminent en erreur (erreurs checksum ou autres), il faut supprimer le répertoire rdiff-backup-data et relancer un backup avec --force pour repartir à zéro (on perd l'historique des incréments !).
Rdiff-backup-web
Installer rdiff-backup-web sur un serveur apache/php/mysql ayant accès aux répertoires de backup.
apt-get install apache2 php5 php-mysql mysql-server cd /var/www wget http://sourceforge.net/projects/rdiffbackupweb/files/rdiffbackupweb/0.09/rdiff-backup-web.0.09.tar.gz tar -xvzf rdiff-backup-web.0.09.tar.gz
Déclarer un virtualhost Apache avec comme DocumentRoot le répertoire rdiff-backup-web ainsi créé.
Créer une base mysql (par convention nommée "rdiff"). Créer un utilisateur rdiff ayant tous les droits sur cette base.
mysql -p mysql> create database rdiff; mysql> grant all privileges on rdiff.* to rdiff identified by 'mot_de_passe'; mysql> exit
Charger la base
mysql -p rdiff < /var/www/rdiff-backup-web/rdiff.sql
Configurer cette base et l'utilisateur dans /var/www/rdiff-backup-web/config.php, ainsi que l'arborescence de la destination des backups.
Se connecter à l'interface dans un navigateur, connexion avec "admin"/"admin" par défaut. Supprimer l'utilisateur "test" inutil et changer tout de suite le mot de passe admin.
rdiffweb
rdiffWeb est une interface web avec un backend en python pour naviguer et restaurer les backups fait avec rdiff-backup.
http://www.rdiffweb.org/wiki/index.php?title=Installation
http://open.nshare.de/wiki/setup/rdiffweb-behind-apache-reverse-proxy
Installation sur Centos 6
Ajouter le dépôt rpmforge
Installer les dépendances:
yum install sqlite-devel yum install --enablerepo=rpmforge python-cherrypy
- Installer le rpm source :
wget http://www.rdiffweb.org/releases/rdiffWeb-0.6.3-1.src.rpm yum install rpmdevtools yum-utils rpmbuild --rebuild rdiffWeb-0.6.3-1.src.rpm yum install /root/rpmbuild/RPMS/noarch/rdiffWeb-0.6.3-1.noarch.rpm
lancer cette commande permet de configurer rdiff-web :
rdiff-web-config
Éditer le fichier de configuration :
vim /etc/rdiffweb/rdw.conf
Ajouter ceci
ServerName=localhost ServerPort=8080 ServerHost=0.0.0.0
Mettre 0.0.0.0 permet d’accéder à l'interface web depuis un autre ordinateur sur le port 8080. Le port peut également être modifié. ATTENTION : La configuration automatique de rdw.conf met 'ServerName'. Il faut le remplacer par 'ServerHost'.
Problème de lancement de rdiffweb :
cherrypy.engine.on_stop_engine_list.append(lambda: killEvent.set()) AttributeError: 'Bus' object has no attribute 'on_stop_engine_list'
Il faut lancer rdiff-web avec l'option -d : rdiffweb -d .
L'option "-d" peut aussi manquer dans le script de démarrage. Éditer /etc/init.d/rdiff-web et modifier la ligne :
/usr/bin/rdiff-web --pid-file="$PIDFILE" \
par
/usr/bin/rdiff-web -d --pid-file="$PIDFILE" \
Installation sur Debian
exécuter le script se trouvant sur le dépôt git :
https://indefero.systea.fr/p/rdiffweb/source/file/master/rdiffweb-install-debian.sh
Le script original se trouve sur http://www.timedicer.co.uk/programs/help/rdiffweb-install.sh.php . le script précédant est allégé par rapport à celui-ci.
Script bash
script rdbackup.sh
Un dépot git contenant les sources est disponible ici : https://indefero.systea.fr/p/rdbackup/source/tree/master/
Pour récupérer directement la derniere version disponible avec wget :
wget --content-disposition --no-check-certificate https://indefero.systea.fr/p/rdbackup/source/download/master/
Windows
Installation
Télécharger :
- Rdiff (rdiff-backup-1.2.8-win32.zip)
http://www.nongnu.org/rdiff-backup/
- putty, plink et puttygen
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
- Blat (blat262.full.sip)
http://sourceforge.net/projects/blat/files/
Préparation de la connexion SSH
Note : on considère ici que la sauvegarde est lancée d'un poste Windows vers un serveur linux
Lancer puttygen. Sélectionner "SSH-2 DSA" en bas, cliquer sur "Generate" et bouger la souris dans l'espace blanc au milieu de la fenêtre.
Copier la clé DSA qui s'affiche en haut de la fenêtre (sans oublier aucun caractère !), la passer telle, en une seule ligne, quelle vers le serveur linux (via un fichier par scp/ftp, ou mail, ou copier/coller dans une console putty) dans le fichier ~/.ssh/authorized_keys du serveur.
Sauvegarder les clés dans le répertoire Documents and Setting (Win XP/2003) ou Users (Win 7/2008) de l'utilisateur qui lancera rdiff-backup.
- Clé publique :
en cliquant sur "save public key" nommer le fichier privatekey.pub
- Clé privée :
en cliquant sur "save private key" nommer le fichier privatekey.ppk
Tests de connexion
Tester la connexion avec plink (ce qui permet d'enregistrer localement la clé du serveur à la première connexion) :
c:\backup\plink.exe -i C:\Users\<utilisateur windows>\privatekey.ppk utilisateur_cible@server.systea.net
la connexion doit se faire sans demande de mot de passe.
Tester rdiff-backup :
c:\backup\rdiff-backup -v5 --test-server --remote-schema "c:\backup\plink.exe -P 22 -i C:\Users\<utilisateur windows>\privatekey.ppk %s rdiff-backup --server" utilisateur_cible@server.systea.net::/tmp
Test de Blat
Tester un envoi (le nom de fichier qui constituera le corps du mail est obligatoire, sinon blat reste "en attente" et ne rend jamais la main).
blat c:\backup\fichier.txt -to destinataire@server.systea.net -server smtp.orange.fr -f expediteur@serveur.com -s "SUJET DU MAIL"
Script de sauvegarde
NOTE : le "%s" doit être transformé en "%%s" pour être reconnu par l'interpréteur DOS.
rem @echo off set ERROR=0 set MAILOPTS=-server smtp.orange.fr -f expediteur@serveur.com copy c:\backup\backup.log c:\backup\backup.log.0 c:\backup\rdiff-backup\rdiff-backup.exe -v5 --remote-schema "c:\backup\plink -P 22 -i c:\Users\<Utilisateur Windows>\privatekey.ppk %%s rdiff-backup --server" "c:/partage/" USER@SERVER.systea.net::/home/backup/partage > c:\backup\backup.log 2>&1 IF NOT "%ERRORLEVEL%"=="0" ( set ERROR=1) REM le LOG n'est pas relaché tout de suite, on doit simuler une pause de 5 secondes... ping -n 5 127.0.0.1 c:\backup\rdiff-backup\rdiff-backup.exe -v5 --remote-schema "c:\backup\plink -P 22 -i c:\Users\<Utilisateur Windows>\privatekey.ppk %%s rdiff-backup --server" --remove-older-than 4W USER@SERVER.systea.net::/home/backup/partage >> c:\backup\backup.log 2>&1 IF NOT "%ERRORLEVEL%"=="0" ( set ERROR=1) ping -n 5 127.0.0.1 IF "%ERROR%"=="0" ( c:\backup\blat\full\blat c:\backup\backup.log -to destinataire@systea.net %MAILOPTS% -s "Sauvegarde terminee" > c:\backup\blat.log 2>&1 ) IF NOT "%ERROR%"=="0" ( c:\backup\blat\full\blat c:\backup\backup.log -to destinataire@systea.net %MAILOPTS% -s "Probleme sauvegarde" > c:\backup\blat.log 2>&1 )