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 :

/etc/rsnapshot.d/rsnapshot.filter
- /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/