Présentation
Rsnapshot
est un script écrit en perl
.
Il utilise rsync
et ssh
pour effectuer des sauvegardes à intervalle régulier, soit localement, soit via le réseau, de manière sécurisée.
Il est capable de réaliser des sauvegardes d'un systèmes de fichier ou bien de bases de données par l'intermèdiaires de scripts.
De plus, il utilise les hard link
unix pour :
- Éviter de dupliquer inutilement les fichiers.
- Faciliter la restauration.
Ainsi, rsnapshot
crée l'illusion de plusieurs sauvegardes complètes, alors qu'il n'y a sur le système de fichier que la première et les différences éventuelles apparues entre cette dernière et les suivantes.
Installation
Tout d'abord, par acquis de conscience, et pour être certain d'avoir la version la plus récente du logiciel, Il faut utiliser portsnap
ou bien utiliser cvsup
pour mettre à jour les ports
.
Si vous préférez comme moi la méthode old school
et si votre /etc/make.conf
est correctement configuré, vous pouvez utiliser la méthode suivante :
$ cd /usr/ports && make update
Dans le cas contraire, cette commande fera le même travail, à la condition que votre fichier de configuration pour cvsup
soit dans /etc/cvsupfile
:
$ cvsup -L2 -g /etc/cvsupfile
Une fois la mise à jour des ports
effectué, il faut installer rsnapshot
, de la manière la plus traditionnelle qui soit :
$ cd /usr/ports/sysutils/rsnapshot && make install clean
La solution de sauvegarde est maintenant prête à être configurée.
Configuration du serveur de sauvegarde
Commençons par créer un répertoire dans /root
pour stocker les différents éléments nécéssaires au fonctionnement de rsnapshot
:
$ sudo mkdir -p /root/rsnapshot/scripts
Une fois ce répertoire créé, il faut générer la paire de clefs ssh nécéssaire à la sécurisation de la connexion entre le serveur et les machines à sauvegarder :
$ ssh-keygen -t dsa -b 2048 -f /root/rsnapshot/ssh-key
Il faut ensuite copier dans le répertoire /root/rsnapshot/scripts
les deux fichiers joints avec ce billet et les rendre éxécutables :
- L'un,
mysql.rsnapshot.sh
, permet de faire la sauvegarde de bases de données mysql. - L'autre,
rsnapreport.php
, permet de générer un rapport au format texte à l'issue de la sauvegarde.
Il reste ensuite à éditer /usr/local/etc/rsnapshot.conf
pour définir différents paramètres, tel que le répertoire ou seront stockées les sauvegardes et les chemins à suivre pour les effectuer :
ssh_args -o BatchMode=yes -i /root/rsnapshot/ssh-key
backup rsnapshot@machine-a-sauvegarder:/usr/local/www/ machine-a-sauvegarder/usr/local/www/
backup_script /root/rsnapshot/scripts/mysql.rsnapshot.sh machine-a-sauvegarder machine-a-sauvegarder/mysql/
Une fois les modifications nécéssaires effectuées, une vérification s'impose :
$ rsnapshot configtest
Une fois cela effectué, il reste à réaliser la configuration des clients.
Configuration des machines à sauvegarder
Il faut commener par se connecter sur l'un de clients.
Une fois cela fait, il faut ajouter un utilisateur rsnapshot
ayant /home/rsnapshot
comme répertoire d'accueil et pas de mot de passe :
$ sudo adduser -s /bin/sh -w no -d /home/rsnapshot
Une fois cela effectué, il faut créer le répertoire /home/rsnapshot/.ssh
:
$ mkdir /home/rsnapshot/.ssh && chmod 700 /home/rsnapshot/.ssh
Il est alors temps de copier à l'aide de scp la clef publique générée au départ de ce tutorial (et surtout pas la clef privée) :
cd /home/rsnapshot/.ssh && scp mon-serveur-de-backup:/root/rsnapshot/ssh-key.pub ./authorized_keys && chown rsnapshot:rsnapshot ./authorized_keys && chmod 600 ./authorized_keys
Il faut ensuite créer le répertoire scripts
dans /home/rsnapshot
et y mettre le script rsnapshot-manager.sh
ci-joint et le rendre éxécutable par l'utilisateur rsnapshot
.
Il reste ensuite à ajouter au début du fichier /home/rsnapshot/authorized_keys
le texte suivant, sans oublier l'espace final :
command="/home/rsnapshot/scripts/rsnapshot-manager.sh"
Si ce n'est pas déjà fait, installer sudo
:
cd /usr/ports && make update && cd /usr/ports/security/sudo && make install clean
Dans le fichier /usr/local/etc/sudoers
, ajouter la ligne suivante à l'aide de l'utilitaire visudo
:
rsnapshot ALL=NOPASSWD: /usr/local/bin/rsync
Finalisation
Il faut maintenant se connecter à l'aide de ssh
à partir du serveur de sauvegarde sur la machine à sauvegarder pour vérifier que l'authentification fonctionne et l'ajouter aux hôtes reconnus par ssh
:
ssh rsnapshot@machine-a-sauvegarder -i /root/rsnapshot/ssh-key
Si tout est correct, ssh
va vous poser une question à laquelle il faudra répondre par l'affirmative, et vous verrez ensuite s'afficher un magnifique Rejected
, parfaitement normal puisque l'utilisateur rsnapshot
sur la machine distante ne peut qu'éxécuter rsync
, mysqldump
et mysql
.
Il ne reste plus qu'à lancer rsnapshot
pour vérifier que l'ensemble de la solution est opérationnelle :
$ rsnapshot hourly
Si vous souhaitez avoir un rapport par courrier électronique, il faut ajouter la ligne suivante dans /etc/crontab
:
0 */4 * * * root /usr/local/bin/rsnapshot hourly 2>&1 | /root/rsnapshot/scripts/rsnapreport.php | mail
-s"[Rsnapshot report]" monadresse@mondomaine.tld
Il faut également ajouter l'argument --stats
à l'option rsync_long_args
du fichier de configuration de Rsnapshot
.
2 réactions
1 De Cyril - 18/12/2008, 18:14
Bonsoir,
As-tu testé Rdiff-backup (Rsync différentiel) ?
Les deux outils semble avoir un fonctionnement quasi identique.
Cyril
2 De mageekguy - 19/12/2008, 09:00
@Cyril :
Non je n'ai pas testé.
Je sais qu'il existe au moins un autre outil, dont je ne connais plus le nom, peut être est celui dont tu parles.
Dans mon souvenir, il fonctionne effectivement sur le même principe que rsnapshot, mais il rajoute en + de la compression.
On gagne alors en espace disque, mais la restauration est plus lente, puisqu'il faut décompresser avant restaurer.
Avec rsnapshot, un simple
cp
ouscp
suffit pour faire la restauration.Or nous avons des applications critiques, qui doivent pouvoir être restauré le plus rapidement possible, d'ou notre choix.
Dans tous les cas, merci de l'information, je testerai ta solution.