Rsnapshot
Updated 29 Avril 2019
Introduction
Rsnapshot est un utilitaire de sauvegarde, écrit en Perl et Rsync. Il facilite la sauvegarde périodique des systèmes de fichiers. Rsnapshot utilise des liens durs pour la déduplication des données. La sauvegarde est un élément indispensable de l'administration d'un système informatique, car il existe toujours un risque de perte de données, que ce soit en cas de défaillance du disque dur, d'effacement accidentel de données, de logiciels malveillants, ou encore de dysfonctionnement d'un système de fichiers.
Rsnapshot permet de créer plusieurs niveaux d'instantanés (alpha, bêta, gamma, etc.), leur attribuant un nom de votre choix, ainsi que d'assurer leur rotation, en supprimant ceux devenus obsolètes. L'exemple du présent manuel prévoit la création de 6 copies alpha, 7 copies beta et 4 copies gamma.
Pour créer un nouvel instantané, il faut utiliser la commande rsnapshot sync
, qui place toutes les données spécifiées dans le répertoire .sync du chemin d'accès réservé à la sauvegarde.
Pour placer un instantané au niveau alpha , utilisez la commande rsnapshot alpha
. Au premier démarrage, le répertoire '.sync'sera renommé en alpha.0. Lors de la deuxième exécution, alpha.0 sera renommé en alpha.1 et la copie actuelle sera sauvegardée sous le nom alpha.0. Ainsi, alpha.0 contiendra toujours le dernier instantané. Les instantanés suivants seront également renommés et conservés jusqu'à ce que leur nombre atteigne six. Une copie de alpha.5 sera alors supprimée et remplacée par alpha.4.
Vous pouvez visualiser la création d'un instantané sur le diagramme ci-dessous :
+---------------------------+ | .sync | +---------------------------+ | ------------- | ∇ --> +---+---+---+---+---+---+---+ niv. alpha | 0 | 1 | 2 | 3 | 4 | 5 | - | +---+---+---+---+---+---+---+ | --------------------- | ∇ --> +---+---+---+---+---+---+---+---+ niv. beta | 0 | 1 | 2 | 3 | 4 | 5 | 6 | - | +---+---+---+---+---+---+---+---+ | ------------------------- | ∇ --> +---+---+---+---+---+ niv. gamma | 0 | 1 | 2 | 3 | - | +---+---+---+---+---+
L'instantané beta est créé à partir de la copie la plus ancienne du niveau alpha (alpha.5) avec la commande rsnapshot beta
.
Autrement dit, alpha.0 provient du système de fichiers, alpha.1 d'alpha.0, beta.0 de la dernière version d'alpla (alpha.5), beta.1 de beta.0, gamma.0 de la dernière version de beta (beta.6).
Important
Si alpha.5 n'existe pas au moment où rsnapshot beta
est exécuté, alors que alpha.4 existe, l'instantané beta.0 ne sera pas créé. Cependant, les autres instantanés de la version bêta feront l'objet d'une rotation. Par conséquent, vous ne devez pas utiliser les niveaux postérieurs plus souvent que les niveaux antérieurs.
Installation
Commencez par installer rsnapshot :
emerge -a app-backup/rsnapshot
Configuration
Effectuez les réglages de base en modifiant, si nécessaire, le chemin de sauvegarde et/ou le nombre et les niveaux d'instantanés :
/etc/rsnapshot.conf
# chemin d'accès au répertoire local où les instantanés seront stockés snapshot_root /var/calculate/snapshots # niveaux et nombre d'instantanés retain alpha 6 retain beta 7 retain gamma 4
Important
Notez que les champs sont Tab -espacement !
Vérifiez la liste des chemins qui ne seront pas sauvegardés :
- /dev/* - /lost+found - /tmp/* - /usr/portage/* - /var/lib/layman/* - /lxc/*/snaps - /lxc/*/rootfs/dev/* - /lxc/*/rootfs/tmp/* - /lxc/*/rootfs/usr/portage/* - /lxc/*/rootfs/var/lib/layman/* - /lxc/*/rootfs/var/log/* - /lxc/**/calculate/packages - /lxc/**/remote/distfiles - /packages - /remote/distfiles - /snapshots/* - /var/calculate/snapshots/*
Instantanés locaux
Configuration du chemin
L'exemple ci-dessous présente les chemins de sauvegarde (racine du système de fichiers et répertoire /var/calculate) pour le système actuel, établis avec le paramètre backup :
/etc/rsnapshot.d/localhost.conf
backup / localhost/rootfs/ backup /var/calculate localhost/calculate
Les chemins ~localhost/rootfs~ et ~localhost/calculate~~~ seront alors créés dans le répertoire de stockage en tant que racine du système de fichiers et en tant qu'emplacement /var/calculate, respectivement.
Créer un instantané
Pour préparer les données à sauvegarder, exécutez :
rsnapshot sync
Cette commande peut être interrompue ou relancée autant de fois que nécessaire. Une fois la synchronisation terminée, procédez à la rotation du niveau alpha :
rsnapshot alpha
En relançant rsnaphost sync
, vous préparerez une nouvelle sauvegarde. rsnapshot alpha
effectuera la rotation et déplacera les données synchronisées au niveau alpha0.
Lorsque les instantanés alpha auront rempli le niveau, vous pourrez déplacer le dernier instantané vers le niveau bêta au lieu de le supprimer. Pour ce faire, exécutez rsnapshot beta
avant d'exécuter rsnapshot alpha
.
+---+---+---+---+---+---+ niv. alpha | 0 | 1 | 2 | 3 | 4 | 5 | +---+---+---+---+---+---+ alpha.6 | --------------------- | ∇ +---+---+---+---+---+---+---+---+ niv. beta | 0 | 1 | 2 | 3 | 4 | 5 | 6 | - | +---+---+---+---+---+---+---+---+
Si ces commandes sont exécutées dans l'ordre inverse, la dernière copie alpha sera d'abord supprimée, puis un niveau alpha de 6 éléments sera constitué, et enfin le dernier élément sera déplacé vers le niveau beta, réduisant la file d'attente alpha de 1.
+---+---+---+---+---+---+ +---+ niv. alpha | 0 | 1 | 2 | 3 | 4 | | | 6 | +---+---+---+---+---+---+ +---+ alpha.5 | --------------------- | ∇ +---+---+---+---+---+---+---+---+ niv. beta | 0 | 1 | 2 | 3 | 4 | 5 | 6 | - | +---+---+---+---+---+---+---+---+
Calendrier de sauvegardes
Ajoutez la procédure d'instantané quotidien .sync à cron. La synchronisation peut prendre un certain temps ; pensez à prévoir suffisamment de temps pour la mener à bien (12 heures environ). Demandons au système d'effectuer des copies alpha et bêta tous les samedis, et des copies gamma le premier jour de chaque mois.
Important
Avant de créer une copie alpha, vous devez créer une copie beta, et une copie gamma avant de créer une copie beta.
La suppression d'une copie obsolète pouvant prendre un certain temps, il convient d'ajouter une pause d'environ 1 heure entre deux rotations.
/etc/cron.d/rsnapshot
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin HOME=/ # run rsnapshot 0 0 * * * root /usr/bin/rsnapshot sync &>/dev/null 0 10 1 * * root /usr/bin/rsnapshot gamma &>/dev/null 0 11 * * 6 root /usr/bin/rsnapshot beta &>/dev/null 0 12 * * * root /usr/bin/rsnapshot alpha &>/dev/null
Mise en place d'instantanés pour un nœud distant
Configuration du serveur de sauvegarde
Générer une clé ssh pour un accès sans mot de passe à l'hôte distant sur le serveur de sauvegarde:
ssh-keygen -b 4096 -f /root/.ssh/backup.key
Ajoutez la clé à utiliser pour tous les clients:
/etc/rsnapshot.conf
rsync_long_args --delete --numeric-ids --delete-excluded --rsh="ssh -i /root/.ssh/backup.key
Indiquez les emplacements pour lesquels des instantanés seront créés :
/etc/rsnapshot.d/example.conf
backup example.org::rootfs example/rootfs/ backup example.org::calculate example/calculate/
où :
- où exemple.org est le nom de réseau de l'hôte,
- rootfs et calculate sont les emplacements à décrire dans le fichier de configuration du client rsyncd
Configuration du client
Créez un fichier sur l'ordinateur distant qui sera l'instantané, contenant la description des répertoires à synchroniser. Assignez-leur de nouveaux noms, rootfs et calculate :
/etc/rsyncd-backup.conf
uid = root gid = root read only = true [rootfs] path = / [calculate] path = /var/calculate
Copiez la clé publique du serveur précédemment générée sur l'hôte distant, en ajoutant rsync au début de la ligne:
command="rsync --config=/etc/rsyncd-backup.conf --server --daemon .",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding
Vous devriez obtenir quelque chose comme ça:
/root/.ssh/authorized_keys
command="rsync --config=/etc/rsyncd-backup.conf --server --daemon .",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCohMEmkUVd72YI+gRXyCSL2YWQGg3tmy1SiKJ4i3enTpVf7oY+SDSk/WDJUkBisOh1VGWbtylCqez6K4/rkIxtQmog/L6KmnVEv/MKPXCfRb0SletaLLRhoLB9yjPJltzS+q/983yBIJKYO9jBJQbDYYdqPIuGidQ6xjX+OuJoCL/akKoaQxBm+92k+hp9Yi7RxGX12Y0WMD6XCZEZcktjGX/FyzIaRV9Ikt+0uHRZBo9lwEtEWEXY3coYauBr9A9XbtXPy4sGDXJsePKi7lxGi880IVgZgABMgPo9B8hVPVBplvKa5tUaj5C7s+lrZ0VI3Nr7i3c4cVwSnOcFlg9Z root@backup
Répartition des nœuds entre plusieurs dépôts d'instantanés
Si les ordinateurs pour lesquels des instantanés sont réalisés sont accessibles via une connexion à faible débit, il est judicieux de fractionner le stockage en plusieurs sauvegardes.
Créez un fichier de configuration rsnapshot pour les ordinateurs locaux :
/etc/rsnapshot.local.conf
include_conf `/bin/cat /etc/rsnapshot.conf` snapshot_root /var/calculate/snapshots/local lockfile /var/run/rsnapshot.local.pid include_conf `/bin/cat /etc/rsnapshot.d/local.*.zone` include_conf `/bin/cat /etc/rsnapshot.d/localhost.zone`
Important
Notez que les champs sont Tab -espacement !
Ces paramètres font référence aux paramètres communs décrits dans /etc/rsnapshot.conf , et remplacent les valeurs du fichier de verrouillage et de la racine du médium de stockage de l'instantané. /etc/rsnapshot.d fournit tous les fichiers de la zone commençant par local et localhost.zone.
Créez un fichier de configuration instantané pour les hôtes distants :
/etc/rsnapshot.remote.conf
include_conf `/bin/cat /etc/rsnapshot.conf` snapshot_root /var/calculate/snapshots/remote lockfile /var/run/rsnapshot.remote.pid include_conf `/bin/cat /etc/rsnapshot.d/remote.*.zone`
Contrairement au fichier de configuration que nous avons vu précédemment, celui-ci ne fournit que les noms de fichiers de zone commençant par remote.
Les instantanés locaux seront enregistrés dans /var/calculate/snapshots/local, et les instantanés distants dans /var/calculate/snapshots/remote.
Indiquez les emplacements pour lesquels des instantanés seront créés :
/etc/rsnapshot.conf.d/local.example.org.zone
backup example.org::rootfs example.org/rootfs/ backup example.org::calculate example.org/calculate/
/etc/rsnapshot.conf.d/remote.example.org.zone
backup remote.example.org::rootfs remote.example.org/rootfs/ backup remote.example.org::calculate remote.example.org/calculate/