Cet article décrit la mise en place d’un serveur de sauvegardes incrémentales avec Rsnapshot sous CentOS 7. Rsnapshot est une solution de sauvegarde robuste et efficace écrite en PERL et basée sur Rsync. En combinaison avec SSH, Rsnapshot permet d’effectuer des sauvegardes à distance. Une fois que la première synchronisation des données est effectuée, les sauvegardes se font de manière incrémentale moyennant une série de liens durs (hard links), ce qui évite la duplication inutile.
Rsnapshot tourne sur le serveur de sauvegardes. Les machines dont il faut sauvegarder les données sont totalement passives, il faut juste qu’elles aient un serveur SSH activé.
- Prérequis
- Installation
- Configuration sur un serveur dédié
- Tester la configuration
- Synchronisation initiale
- Définition des tâches automatiques
- Utilisation au quotidien
Prérequis
Le serveur de sauvegardes doit pouvoir se connecter via SSH aux machines distantes. Il faut donc configurer l’authentification par clé SSH au préalable.
Installation
Rsnapshot est fourni par le dépôt de paquets EPEL, qu’il faudra donc activer en conséquence.
$ sudo yum install rsnapshot
Configuration sur un serveur dédié
Rsnapshot se configure par le biais du fichier /etc/rsnapshot.conf
. Le fichier fourni par défaut est amplement commenté et pourra servir de point de départ. La page de manuel rsnapshot(1)
fournit la référence complète. Au lieu d’éditer le fichier /etc/rsnapshot.conf
, nous allons le renommer et repartir de zéro.
$ cd /etc $ sudo mv rsnapshot.conf rsnapshot.conf.orig
Éditer une configuration personnalisée comme ceci, par exemple.
# /etc/rsnapshot.conf # Config file version config_version 1.2 # Snapshot root directory snapshot_root /srv/backup # External program dependencies cmd_cp /usr/bin/cp cmd_rm /usr/bin/rm cmd_rsync /usr/bin/rsync cmd_ssh /usr/bin/ssh cmd_logger /usr/bin/logger cmd_du /usr/bin/du cmd_rsnapshot_diff /usr/bin/rsnapshot-diff # Backup intervals retain daily 7 # Print errors and warnings only verbose 2 # Same verbosity for data written to specified logfile loglevel 3 logfile /var/log/rsnapshot # Prevent two instances from running simultaneously lockfile /var/run/rsnapshot.pid # Exclude specified file types # exclude_file /etc/rsnapshot_exclude.list # sd-48011.dedibox.fr backup root@sd-48011.dedibox.fr:/etc sd-48011.dedibox.fr backup root@sd-48011.dedibox.fr:/home sd-48011.dedibox.fr backup root@sd-48011.dedibox.fr:/var/named sd-48011.dedibox.fr backup root@sd-48011.dedibox.fr:/var/www sd-48011.dedibox.fr
Quelques remarques.
- Il faut impérativement utiliser les tabulations comme séparateurs. Si l’on utilise l’éditeur Vim, l’option
:set list
permettra d’afficher les tabulations dans le fichier. Si l’on a activé l’option:set expandtab
qui remplace les tabulations par une série d’espaces, il faut également la désactiver grâce à:set noexpandtab
. - L’emplacement des sauvegardes spécifié par la directive
snapshot_root
sera créé au besoin par Rsnapshot. - Les commandes correspondent à un système CentOS 7, et plus généralement à la plupart des distributions Linux.
- La directive
retain daily 7
correspond à une sauvegarde quotidienne complète. - Le fichier spécifié dans la directive
exclude_file
contiendra éventuellement les types de fichiers et de répertoires sur lesquels on pourra faire l’impasse. - Dans l’exemple ci-dessus, on spécifie les arborescences de données à sauvegarder, plutôt que de choisir l’ensemble du système à la louche pour ensuite exclure les parties du système que l’on ne veut pas sauvegarder.
- Les bases de données sont récupérées par le biais d’un script automatique
sqldump.sh
installé sur la machine distante, qui range les sauvegardes SQL soigneusement ficelées dans le répertoire~/sql
de l’administrateur, en l’occurrence/home/microlinux/sql
.
Tester la configuration
Une fois qu’on a édité la configuration, on peut vérifier si l’on n’a pas fait d’erreurs de syntaxe.
$ sudo rsnapshot configtest Syntax OK
L’option -t
permet ensuite de simuler une sauvegarde. Dans ce cas, Rsnapshot nous affiche toutes les opérations qu’il effectuerait, sans réellement les exécuter.
$ sudo rsnapshot -t daily
Synchronisation initiale
Si le serveur distant contient quelques centaines de gigaoctets de données, la première synchronisation peut être assez longue. La bonne politique consiste à effectuer cette première opération à la main, comme ceci.
$ sudo rsnapshot daily
Dans une deuxième console, on peut se faire une idée de la progression du transfert.
$ sudo watch du -sh /srv/backup
Au bout de l’opération, on pourra vérifier si tout s’est bien déroulé.
$ less /var/log/rsnapshot [2020-03-20T18:18:11] /usr/bin/rsnapshot daily: started [2020-03-20T18:18:11] echo 8430 > /var/run/rsnapshot.pid [2020-03-20T18:18:11] mkdir -m 0700 -p /srv/backup/ [2020-03-20T18:18:11] mkdir -m 0755 -p /srv/backup/daily.0/ [2020-03-20T18:18:11] /usr/bin/rsync -a --delete ... ... [2020-03-20T18:42:49] touch /srv/backup/daily.0/ [2020-03-20T18:42:50] rm -f /var/run/rsnapshot.pid [2020-03-20T18:42:50] /usr/bin/rsnapshot daily: completed
Définition des tâches automatiques
Une fois que la synchronisation initiale s’est correctement déroulée, on peut songer à mettre en place une tâche automatique.
$ sudo crontab -l
# Rsnapshot
45 00 * * * /usr/bin/rsnapshot daily
Sur mes machines, j’utilise un petit script backup.sh
qui m’envoie une notification par mail chaque fois que la sauvegarde s’effectue.
#!/bin/bash
#
# backup.sh
HOSTNAME=$(hostname --fqdn)
SENDER="root@$HOSTNAME"
RELAY="$SENDER"
ADMIN="info@microlinux.fr"
rsnapshot -v daily 2>&1 | \
mail -s "Daily backup report for $HOSTNAME" \
-r "$RELAY (root@$HOSTNAME)" \
$ADMIN
Le script est lancé par une tâche automatique quotidienne.
$ sudo crontab -l
# Daily backup at 0:45
45 00 * * * /home/microlinux/bin/backup.sh
Utilisation au quotidien
Au bout d’une semaine d’utilisation, voilà à quoi ressemble le répertoire des sauvegardes.
$ sudo ls -l /srv/backup/ total 28 drwxr-xr-x. 3 root root 4096 Mar 23 00:50 daily.0 drwxr-xr-x. 3 root root 4096 Mar 22 00:48 daily.1 drwxr-xr-x. 3 root root 4096 Mar 21 00:49 daily.2 drwxr-xr-x. 3 root root 4096 Mar 20 00:48 daily.3 drwxr-xr-x. 3 root root 4096 Mar 19 00:52 daily.4 drwxr-xr-x. 3 root root 4096 Mar 18 00:53 daily.5 drwxr-xr-x. 3 root root 4096 Mar 17 00:50 daily.6
L’option du
permet d’afficher un rapport détaillé sur l’espace disque occupé par les sauvegardes.
$ sudo rsnapshot du 75G /srv/backup/daily.0/ 386M /srv/backup/daily.1/ 399M /srv/backup/daily.2/ 399M /srv/backup/daily.3/ 395M /srv/backup/daily.4/ 8.7G /srv/backup/daily.5/ 3.4G /srv/backup/daily.6/ 88G total
La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.
4 commentaires
Amoua KODJO · 26 mai 2020 à 13 h 25 min
comment procéder pour restaurer la sauvegarde faite avec Rsnapshot sous centos 7, si on suppose que les postes dont les données sont sauvegardées tournent sous Windows 10. Merci
kikinovak · 26 mai 2020 à 14 h 09 min
Cette solution fonctionne uniquement dans les réseaux 100 % Unix/Linux.
bob · 1 février 2021 à 11 h 35 min
« cmd_logge /usr/bin/logger » il manque le « r » de logger dans la copie d’écran du fichier de configuration de rsnapshot.
kikinovak · 1 février 2021 à 16 h 02 min
Corrigé, merci.
Les commentaires sont fermés.