Rdiff-backup : Différence entre versions
De wikiGite
(→Restore par "-r") |
|||
(198 révisions intermédiaires par 4 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
− | == | + | = Linux = |
− | + | == Installation == | |
− | |||
Sur '''Debian 5''' --> v1.2.5 (la différence de version mineure (.5 pour .8) ne provoque qu'un avertissement) | 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 | apt-get install rdiff-backup | ||
Si on veut une version plus récente, il faut compiler : | Si on veut une version plus récente, il faut compiler : | ||
apt-get install librsync-dev python-dev | apt-get install librsync-dev python-dev | ||
− | wget http://savannah.nongnu.org/download/rdiff-backup/rdiff-backup-1.2.8.tar.gz | + | wget <nowiki>http://savannah.nongnu.org/download/rdiff-backup/rdiff-backup-1.2.8.tar.gz</nowiki> |
tar -xvzf rdiff-backup-1.2.8.tar.gz | tar -xvzf rdiff-backup-1.2.8.tar.gz | ||
cd rdiff-backup-1.2.8 | cd rdiff-backup-1.2.8 | ||
python setup.py install | python setup.py install | ||
− | Sur '''CentOS''', installation repos RPMForge ( | + | Sur '''CentOS''', si ça n'a pas déjà été fait (pour munin par exemple), installation repos RPMForge (-> [[Dépôts complémentaires]]). |
− | |||
− | |||
− | |||
− | |||
Puis | Puis | ||
− | |||
− | |||
yum --enablerepo=rpmforge install rdiff-backup | yum --enablerepo=rpmforge install rdiff-backup | ||
------------------ | ------------------ | ||
− | Test d'accès à un serveur | + | |
+ | == 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 | 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 | rdiff-backup --force -v5 root@192.168.1.2::/etc /backup/etc > rdiff_server1.log 2>&1 | ||
Ensuite on peut enlever le "--force". | Ensuite on peut enlever le "--force". | ||
+ | |||
+ | Eventuellement, si on veut sauvegarder plusieurs répertoires de la même machine, on sauvegarde avec des inclusions : | ||
+ | rdiff-backup --force -v5 --include /etc --include /home --exclude "**" root@192.168.1.2::/ /backup/ > rdiff_server1.log 2>&1 | ||
+ | On aura alors à l'arrivée /backup/etc et /backup/home, et un seul répertoire de metadonnées rdiff-backup-datas pour les 2. Le --exclude "**" est là pour éviter que rdiff n'essaie de sauvegarder toute l'arborescence (le "/" qu'on lui donne après les ::) et ne s'occupe que des "--include". | ||
+ | |||
------------------ | ------------------ | ||
− | Nettoyage | + | |
+ | == Nettoyage == | ||
+ | des incréments supérieurs à une fenêtre de rétention : | ||
rdiff-backup -v5 --remove-older-than 4W /backup | 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. | 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 :<br/> | Liste des incréments :<br/> | ||
Sur le serveur de sauvegarde : | Sur le serveur de sauvegarde : | ||
− | rdiff-backup | + | 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) : | 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 | 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 | + | |
− | # /etc/hosts d'il y a 1 heure (--force si le fichier existe et qu'il faut l'écraser) | + | == Restore - Exemples == |
+ | '''<span style="color:red">NOTE</span> :''' le restore '''NE FONCTIONNE PAS SUR LES LIENS'''. Il faut indiquer le "vrai" répertoire ou fichier physique à restorer. | ||
+ | |||
+ | '''<span style="color:red">NOTE 2</span> :''' VERIFIER LES '''DROITS DES REPERTOIRES''' APRES UNE RESTAURATION, ils peuvent avoir changé. | ||
+ | |||
+ | === Restore par fichier diff === | ||
+ | [EDIT 03/2019] Autre façon de restaurer, plus simple si on rencontre des problèmes de caractères spéciaux dans les noms qui empêchent la restauration par "-r" | ||
+ | Repérer le fichier différentiel du fichier à restaurer pour la date voulue. Ex : | ||
+ | ls /repertoire_de_backup/rdiff-backup-data/increments/chemin_complet/fichier.tld.'''2019-03-22'''T02\:55\:35+01\:00'''.diff.gz''' | ||
+ | Restaurer simplement par (exemple vers /tmp local) : | ||
+ | rdiff-backup /repertoire_de_backup/rdiff-backup-data/increments/chemin_complet/fichier.tld.'''2019-03-22'''T02\:55\:35+01\:00'''.diff.gz''' /tmp/fichier.tld | ||
+ | === Restore par "-r" === | ||
+ | # fichier /etc/hosts d'il y a 1 heure (--force si le fichier ou répertoire existe et qu'il faut l'écraser) | ||
rdiff-backup -v5 -r "1h" --force ./etc/hosts root@192.168.1.2::/etc/hosts | 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 (/etc dans l'exemple) ! | ||
+ | # répertoire /etc d'il y a 3 jours | ||
+ | rdiff-backup -v5 -r "3D" --force ./etc root@192.168.1.2::/etc | ||
+ | <span style="color: red;">'''NOTE :''' pour remonter un répertoire complet, il faut l'indiquer la source comme à la destination '''SANS "/" APRES''', sinon il restaure les fichiers dans le répertoire supérieur sans recréer ou écraser le répertoire (/etc dans l'exemple)</span> | ||
− | # / | + | '''NOTE :''' le "-r" signifie "restore at", 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. <br/> |
− | rdiff-backup -v5 -r " | + | |
+ | Exemple plus complet : | ||
+ | # rdiff-backup -l /mnt/backup/server1 | ||
+ | Found 5 increments: | ||
+ | increments.'''2013-04-12'''T01: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" | ||
+ | |||
+ | == '''<span style="color:red">DEPANNAGE</span>''' == | ||
+ | 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 <br/> | ||
+ | http://open.nshare.de/wiki/setup/rdiffweb-behind-apache-reverse-proxy | ||
+ | --> | ||
+ | == Installation sur Centos == | ||
+ | Nouvelle version 0.7 http://www.patrikdufresne.com/en/rdiffweb/ | ||
+ | |||
+ | === Installer Python 2.7 si nécessaire === | ||
+ | Sur CentOS (6 ou 7), on a que Python 2.6.6. On installe la 7 en alternative. | ||
+ | yum --enablerepo=epel install wget gcc zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libffi-devel libxslt libxslt-devel libxml2 libxml2-devel openldap-devel libjpeg-turbo-devel openjpeg-devel libtiff-devel git libpng libXext libz.so.1 xorg-x11-fonts-Type1 curl cabextract | ||
+ | wget http://python.org/ftp/python/2.7.8/Python-2.7.8.tgz | ||
+ | tar -xzf Python-2.7.8.tgz | ||
+ | cd Python-2.7.8 | ||
+ | ./configure --prefix=/usr/local --enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib" | ||
+ | make | ||
+ | make altinstall | ||
+ | '''ATTENTION AU "ALTINSTALL" !''' | ||
+ | |||
+ | Le temps de l'installation, on passe sur python 2.7 | ||
+ | alias python=python2.7 | ||
+ | python -V | ||
+ | wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py -O - | /usr/local/bin/python2.7 | ||
+ | pip install babel | ||
+ | |||
+ | === Installation de rdiffweb === | ||
+ | wget --no-check-certificate -O rdiffweb.tar.gz https://github.com/ikus060/rdiffweb/archive/master.tar.gz | ||
+ | tar zxf rdiffweb.tar.gz | ||
+ | cd rdiffweb-master/ | ||
+ | python setup.py build | ||
+ | python setup.py install | ||
+ | On peut revenir à python 2.6 sur la machine pour éviter les problèmes | ||
+ | unalias python | ||
− | - | + | Le script d'init n'est pas adapté à CentOS. Le remplacer par celui-ci, repris de la v0.6: |
− | + | #!/bin/sh | |
− | #!/bin/ | + | # rdiffWeb, A web interface to rdiff-backup repositories |
− | # | + | # Copyright (C) 2012 rdiffWeb contributors |
− | # | ||
− | |||
− | |||
# | # | ||
− | # | + | # This program is free software: you can redistribute it and/or modify |
− | # | + | # it under the terms of the GNU General Public License as published by |
− | # | + | # the Free Software Foundation, either version 3 of the License, or |
+ | # (at your option) any later version. | ||
# | # | ||
− | + | # This program is distributed in the hope that it will be useful, | |
− | + | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
− | + | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
− | + | # GNU General Public License for more details. | |
− | + | # | |
− | + | # You should have received a copy of the GNU General Public License | |
− | + | # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
− | + | ||
− | + | # Basic support for the Linux Standard Base Specification 3.1.0 | |
− | + | ### BEGIN INIT INFO | |
− | + | # Provides: rdiff_web | |
− | + | # Required-Start: $network $local_fs | |
− | + | # Required-Stop: $network | |
+ | # Default-Start: 2 3 5 | ||
+ | # Default-Stop: 0 6 | ||
+ | # Description: Manages the rdiffWeb daemon | ||
+ | ### END INIT INFO | ||
+ | |||
+ | DAEMON=/usr/local/bin/rdiffweb | ||
+ | PIDFILE="/var/run/rdiffweb" | ||
+ | LOGFILE="/var/log/rdiffweb.log" | ||
+ | |||
+ | SUCCESS_MSG="^[[71G done" | ||
+ | ERROR_MSG="^[[71Gfailed" | ||
+ | |||
+ | if [ -f /etc/init.d/functions ]; then | ||
+ | . /etc/init.d/functions | ||
+ | fi | ||
− | if [ | + | # This script won't be able to run without root privileges. |
− | + | if [ `id -u` -ne 0 ]; then | |
− | echo | + | echo "Error: this script must be run as root." |
exit 1 | exit 1 | ||
fi | fi | ||
− | + | # See how we were called. | |
− | + | case "$1" in | |
− | + | start) | |
− | + | if [ ! -f /etc/rdiffweb/rdw.conf ]; then | |
− | + | echo -n "rdiffWeb is not configured! Please run 'rdiff-web-config'." | |
− | + | echo $ERROR_MSG | |
+ | exit 1 | ||
+ | fi | ||
+ | echo -n "Starting rdiffWeb..." | ||
+ | $DAEMON --pid-file="$PIDFILE" \ | ||
+ | --log-file="$LOGFILE" \ | ||
+ | --background > /dev/null 2>&1 | ||
+ | echo $SUCCESS_MSG | ||
+ | exit 0 | ||
+ | ;; | ||
− | + | stop) | |
− | + | if [ -e "$PIDFILE" ]; then | |
− | + | echo -n "Stopping rdiffWeb..." | |
− | + | kill `cat "$PIDFILE" 2>/dev/null` > /dev/null 2>&1 | |
− | + | rm $PIDFILE > /dev/null 2>&1 | |
− | + | echo $SUCCESS_MSG | |
− | + | exit 0 | |
− | + | else | |
− | + | echo -n "rdiffWeb is not running" | |
− | + | echo $ERROR_MSG | |
− | + | exit 1 | |
− | + | fi | |
− | + | ;; | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | fi | ||
− | if [ | + | status) |
− | + | echo -n "rdiffWeb " | |
− | + | if [ -e "$PIDFILE" ]; then | |
− | + | echo "is running." | |
− | + | exit 0 | |
− | + | else | |
− | + | echo "is not running." | |
− | + | exit 1 | |
− | |||
− | |||
− | |||
fi | fi | ||
− | + | ;; | |
− | + | ||
− | echo | + | restart) |
− | + | "$0" stop && "$0" start | |
− | + | ;; | |
− | + | ||
− | + | *) | |
− | + | echo "Usage: `basename "$0"` {start|stop|status|restart}" | |
− | + | exit 1 | |
− | + | esac | |
− | + | ||
− | + | exit 0 | |
− | + | ||
− | + | Il ne reste plus qu'à : | |
− | + | service rdiffweb start | |
− | + | ||
− | + | <!-- Pour archive: ancienne version avant reprise par http://www.patrikdufresne.com | |
− | + | Ajouter le dépôt rpmforge | |
− | + | ||
− | + | Installer les dépendances: | |
− | + | yum install sqlite-devel | |
− | + | yum install --enablerepo=rpmforge python-cherrypy | |
− | + | ||
− | + | * Installer le rpm : | |
− | + | yum install http://www.rdiffweb.org/releases/rdiffWeb-0.6.3-1.noarch.rpm | |
− | + | wget http://www.rdiffweb.org/releases/rdiffWeb-0.6.3-1.noarch.rpm | |
− | + | rpm --nodeps -ivh rdiffWeb-0.6.3-1.noarch.rpm | |
− | + | * 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 CentOS 7 == | ||
+ | |||
+ | Installer le dépôt | ||
+ | rpm -Uvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm | ||
+ | |||
+ | Installer yum-utils et désactiver le dépôt par défaut | ||
+ | yum install yum-utils | ||
+ | yum-config-manager --disable epel | ||
+ | |||
+ | Installer les paquets avec l'option --enablerepo=epel | ||
+ | yum --enablerepo=epel -y install rdiff-backup --> | ||
+ | |||
+ | == 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 = | ||
+ | Ici, on sauvegarde un serveur (ou poste) Windows à partir d'un serveur linux qui lance rdiff-backup. A adapter si on veut le contraire. | ||
+ | == Cygwin == | ||
+ | On installe d'abord Cygwin sur Windows (la version .exe de rdiff semble plutôt bugguée), dans lequel on installera un serveur OpenSSH et rdiff-backup. | ||
+ | |||
+ | Naviguer sur http://www.cygwin.com/ pour charger le setup*.exe correspondant à la version de Windows. | ||
+ | |||
+ | Lancer le setup, et pendant l'installation ajouter les paquets : | ||
+ | Devel/ | ||
+ | autoconf | ||
+ | automake | ||
+ | binutils | ||
+ | gcc-g++ | ||
+ | make | ||
+ | patchutils | ||
+ | Interpreters/ | ||
+ | python | ||
+ | Net/ | ||
+ | openssh | ||
+ | Web/ | ||
+ | wget | ||
+ | Lancer une console cygwin | ||
+ | |||
+ | == Librsync dans Cygwin == | ||
+ | Dans la console, installer librsync | ||
+ | wget http://sourceforge.net/projects/librsync/files/latest/download?source=files -O librsync-0.9.7.tar.gz | ||
+ | tar xzf librsync-0.9.7.tar.gz | ||
+ | cd librsync-0.9.7 | ||
+ | ./configure --prefix=/usr --bindir=/bin --libdir=/lib | ||
+ | En cas de message "unable to guess system type", repérer la version d'automake et récupérer un config.guess à jour : | ||
+ | automake --version | ||
+ | .... 1.14.1 .... | ||
+ | cp /usr/share/automake-1.14/config.guess . | ||
+ | relancer ./configure. Puis : | ||
+ | make all | ||
+ | make install | ||
+ | cd .. | ||
+ | == Rdiff-backup dans Cygwin == | ||
+ | Télécharger le source et installer rdiff-backup | ||
+ | wget http://savannah.nongnu.org/download/rdiff-backup/rdiff-backup-1.2.8.tar.gz | ||
+ | tar -xzf rdiff-backup-1.2.8.tar.gz | ||
+ | cd rdiff-backup-1.2.8 | ||
+ | python setup.py install | ||
+ | |||
+ | == Configurer openSSH == | ||
+ | ssh-host-config | ||
+ | Répondre "yes" à tout jusqu'à "value of CYGWIN for the daemon" auquel on répond "ntsec", puis "no" pour garder le nom de compte service par défaut, et "yes" pour le créer, tout le reste est par défaut. | ||
+ | |||
+ | Démarrer le service CYGWIN sshd, par la MMC ou par : | ||
+ | "net start sshd" | ||
+ | Créer un répertoire ".ssh". Sur le serveur linux de sauvegarde, générer si nécessaire les clé SSH, et copier la clé public dans ".ssh/authorized_keys" dans la console Cygwin. | ||
+ | |||
+ | Ouvrir l'accès au port 22 (SSH), sur les firewalls, routeurs, box, etc... entre le Windows et internet, et dans le firewall Windows lui-même. A partir du serveur linux, tester une connexion ssh vers le Windows, qui ne doit pas demander de mot de passe. | ||
+ | |||
+ | == Exemple de backup, à partir du serveur linux, qui lit les données distante du poste Windows == | ||
+ | rdiff-backup -v5 --force --create-full-path --print-statistics --no-hard-links --include "/cygdrive/c/Données utilisateurs" --include "/cygdrive/d/Logiciels" --include "/cygdrive/d/Work" --exclude /cygdrive/** --remote-schema "ssh -p 22 %s rdiff-backup --server" Administrateur@serveurWindows.no-ip.org::/cygdrive/ /backup/serveurWindows | ||
+ | On aura à l'arrivée /backup/serveurWindows/c/Données utilisateurs, /backup/serveurWindows/d/Logiciels et/backup/serveurWindows/d/Work. | ||
+ | |||
+ | L'exclusion "/cygdrive/**" a la même fonction que "**" entre serveurs linux. | ||
+ | |||
+ | <!-- Pour archive : installation à partir de l'EXE | ||
+ | == 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 == | ||
+ | '''<span style="color:red">NOTE</span> : 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 ) | ||
+ | --> |
Version actuelle datée du 10 avril 2019 à 15:08
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".
Eventuellement, si on veut sauvegarder plusieurs répertoires de la même machine, on sauvegarde avec des inclusions :
rdiff-backup --force -v5 --include /etc --include /home --exclude "**" root@192.168.1.2::/ /backup/ > rdiff_server1.log 2>&1
On aura alors à l'arrivée /backup/etc et /backup/home, et un seul répertoire de metadonnées rdiff-backup-datas pour les 2. Le --exclude "**" est là pour éviter que rdiff n'essaie de sauvegarder toute l'arborescence (le "/" qu'on lui donne après les ::) et ne s'occupe que des "--include".
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é.
Restore par fichier diff
[EDIT 03/2019] Autre façon de restaurer, plus simple si on rencontre des problèmes de caractères spéciaux dans les noms qui empêchent la restauration par "-r" Repérer le fichier différentiel du fichier à restaurer pour la date voulue. Ex :
ls /repertoire_de_backup/rdiff-backup-data/increments/chemin_complet/fichier.tld.2019-03-22T02\:55\:35+01\:00.diff.gz
Restaurer simplement par (exemple vers /tmp local) :
rdiff-backup /repertoire_de_backup/rdiff-backup-data/increments/chemin_complet/fichier.tld.2019-03-22T02\:55\:35+01\:00.diff.gz /tmp/fichier.tld
Restore par "-r"
# fichier /etc/hosts d'il y a 1 heure (--force si le fichier ou répertoire 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 (/etc dans l'exemple) !
# répertoire /etc d'il y a 3 jours rdiff-backup -v5 -r "3D" --force ./etc root@192.168.1.2::/etc
NOTE : pour remonter un répertoire complet, il faut l'indiquer la source comme à la destination SANS "/" APRES, sinon il restaure les fichiers dans le répertoire supérieur sans recréer ou écraser le répertoire (/etc dans l'exemple)
NOTE : le "-r" signifie "restore at", 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.
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.
Installation sur Centos
Nouvelle version 0.7 http://www.patrikdufresne.com/en/rdiffweb/
Installer Python 2.7 si nécessaire
Sur CentOS (6 ou 7), on a que Python 2.6.6. On installe la 7 en alternative.
yum --enablerepo=epel install wget gcc zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libffi-devel libxslt libxslt-devel libxml2 libxml2-devel openldap-devel libjpeg-turbo-devel openjpeg-devel libtiff-devel git libpng libXext libz.so.1 xorg-x11-fonts-Type1 curl cabextract wget http://python.org/ftp/python/2.7.8/Python-2.7.8.tgz tar -xzf Python-2.7.8.tgz cd Python-2.7.8 ./configure --prefix=/usr/local --enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib" make make altinstall
ATTENTION AU "ALTINSTALL" !
Le temps de l'installation, on passe sur python 2.7
alias python=python2.7 python -V wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py -O - | /usr/local/bin/python2.7 pip install babel
Installation de rdiffweb
wget --no-check-certificate -O rdiffweb.tar.gz https://github.com/ikus060/rdiffweb/archive/master.tar.gz tar zxf rdiffweb.tar.gz cd rdiffweb-master/ python setup.py build python setup.py install
On peut revenir à python 2.6 sur la machine pour éviter les problèmes
unalias python
Le script d'init n'est pas adapté à CentOS. Le remplacer par celui-ci, repris de la v0.6:
#!/bin/sh # rdiffWeb, A web interface to rdiff-backup repositories # Copyright (C) 2012 rdiffWeb contributors # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # Basic support for the Linux Standard Base Specification 3.1.0 ### BEGIN INIT INFO # Provides: rdiff_web # Required-Start: $network $local_fs # Required-Stop: $network # Default-Start: 2 3 5 # Default-Stop: 0 6 # Description: Manages the rdiffWeb daemon ### END INIT INFO DAEMON=/usr/local/bin/rdiffweb PIDFILE="/var/run/rdiffweb" LOGFILE="/var/log/rdiffweb.log" SUCCESS_MSG="^[[71G done" ERROR_MSG="^[[71Gfailed" if [ -f /etc/init.d/functions ]; then . /etc/init.d/functions fi # This script won't be able to run without root privileges. if [ `id -u` -ne 0 ]; then echo "Error: this script must be run as root." exit 1 fi # See how we were called. case "$1" in start) if [ ! -f /etc/rdiffweb/rdw.conf ]; then echo -n "rdiffWeb is not configured! Please run 'rdiff-web-config'." echo $ERROR_MSG exit 1 fi echo -n "Starting rdiffWeb..." $DAEMON --pid-file="$PIDFILE" \ --log-file="$LOGFILE" \ --background > /dev/null 2>&1 echo $SUCCESS_MSG exit 0 ;; stop) if [ -e "$PIDFILE" ]; then echo -n "Stopping rdiffWeb..." kill `cat "$PIDFILE" 2>/dev/null` > /dev/null 2>&1 rm $PIDFILE > /dev/null 2>&1 echo $SUCCESS_MSG exit 0 else echo -n "rdiffWeb is not running" echo $ERROR_MSG exit 1 fi ;; status) echo -n "rdiffWeb " if [ -e "$PIDFILE" ]; then echo "is running." exit 0 else echo "is not running." exit 1 fi ;; restart) "$0" stop && "$0" start ;; *) echo "Usage: `basename "$0"` {start|stop|status|restart}" exit 1 esac exit 0
Il ne reste plus qu'à :
service rdiffweb start
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
Ici, on sauvegarde un serveur (ou poste) Windows à partir d'un serveur linux qui lance rdiff-backup. A adapter si on veut le contraire.
Cygwin
On installe d'abord Cygwin sur Windows (la version .exe de rdiff semble plutôt bugguée), dans lequel on installera un serveur OpenSSH et rdiff-backup.
Naviguer sur http://www.cygwin.com/ pour charger le setup*.exe correspondant à la version de Windows.
Lancer le setup, et pendant l'installation ajouter les paquets :
Devel/ autoconf automake binutils gcc-g++ make patchutils Interpreters/ python Net/ openssh Web/ wget
Lancer une console cygwin
Librsync dans Cygwin
Dans la console, installer librsync
wget http://sourceforge.net/projects/librsync/files/latest/download?source=files -O librsync-0.9.7.tar.gz tar xzf librsync-0.9.7.tar.gz cd librsync-0.9.7 ./configure --prefix=/usr --bindir=/bin --libdir=/lib
En cas de message "unable to guess system type", repérer la version d'automake et récupérer un config.guess à jour :
automake --version .... 1.14.1 .... cp /usr/share/automake-1.14/config.guess .
relancer ./configure. Puis :
make all make install cd ..
Rdiff-backup dans Cygwin
Télécharger le source et installer rdiff-backup
wget http://savannah.nongnu.org/download/rdiff-backup/rdiff-backup-1.2.8.tar.gz tar -xzf rdiff-backup-1.2.8.tar.gz cd rdiff-backup-1.2.8 python setup.py install
Configurer openSSH
ssh-host-config
Répondre "yes" à tout jusqu'à "value of CYGWIN for the daemon" auquel on répond "ntsec", puis "no" pour garder le nom de compte service par défaut, et "yes" pour le créer, tout le reste est par défaut.
Démarrer le service CYGWIN sshd, par la MMC ou par :
"net start sshd"
Créer un répertoire ".ssh". Sur le serveur linux de sauvegarde, générer si nécessaire les clé SSH, et copier la clé public dans ".ssh/authorized_keys" dans la console Cygwin.
Ouvrir l'accès au port 22 (SSH), sur les firewalls, routeurs, box, etc... entre le Windows et internet, et dans le firewall Windows lui-même. A partir du serveur linux, tester une connexion ssh vers le Windows, qui ne doit pas demander de mot de passe.
Exemple de backup, à partir du serveur linux, qui lit les données distante du poste Windows
rdiff-backup -v5 --force --create-full-path --print-statistics --no-hard-links --include "/cygdrive/c/Données utilisateurs" --include "/cygdrive/d/Logiciels" --include "/cygdrive/d/Work" --exclude /cygdrive/** --remote-schema "ssh -p 22 %s rdiff-backup --server" Administrateur@serveurWindows.no-ip.org::/cygdrive/ /backup/serveurWindows
On aura à l'arrivée /backup/serveurWindows/c/Données utilisateurs, /backup/serveurWindows/d/Logiciels et/backup/serveurWindows/d/Work.
L'exclusion "/cygdrive/**" a la même fonction que "**" entre serveurs linux.