Snapper est un outil de ligne de commande Linux pour créer et gérer des instantanés de vos systèmes de fichiers.
À l'aide de la commande snapper, vous pouvez créer des instantanés en lecture seule. Vous pouvez utiliser ces instantanés pour restaurer des fichiers spécifiques ou tous les fichiers en cas de catastrophe.
Vous pouvez également l'utiliser pour comparer plusieurs instantanés et revenir à un ancien instantané spécifique.
Snapper n'est pris en charge que sur btrfs (systèmes de fichiers B-tree copie sur écriture), systèmes de fichiers ext4 et thin- volumes logiques basés sur LVM provisionnés.
Lorsqu'un instantané est pris à l'aide de la commande snapper, il réside dans le même système de fichiers. Il doit donc y avoir suffisamment d'espace libre disponible et un nettoyage régulier de FS peut être nécessaire.
Si vous souhaitez utiliser un instantané basé sur rsync, vous devriez également consulter l'utilitaire rsnapshot dont nous avons parlé plus tôt.
Installer l'utilitaire Snapper
Vous pouvez soit télécharger le binaire snapper pour différentes distributions et l'installer, soit télécharger le code source et le compiler vous-même.
Par exemple, vous pouvez télécharger les rpm snapper à partir du référentiel SUSE SLES11 SP2.
# rpm -ivh snapper-0.1.6-2.1.x86_64.rpm
Voici les dépendances du package snapper. Lorsque vous utilisez yum ou d'autres outils de gestion de packages, toutes les dépendances seront installées automatiquement.
- libsnapper-devel-0.1.6-2.1.x86_64.rpm
- pam_snapper-0.1.6-2.1.x86_64.rpm
- snapper-debuginfo-0.1.6-2.1.x86_64.rpm
- snapper-debugsource-0.1.6-2.1.x86_64.rpm
Créer un système de fichiers btrfs
Étant donné que btrfs est un système de fichiers pris en charge à partir de SLES11 SP2, vous pouvez utiliser btrfs pour créer votre volume logique ou utiliser les commandes btrfs-convert pour convertir votre système de fichiers ext3 existant en btrfs.
Exécutez les commandes suivantes pour créer un nouveau système de fichiers btrfs. Si vous n'avez pas installé le programme btrfs, utilisez zypper install btrfsprogs pour l'installer.
# lvcreate -L 8G -n snapvol vglocal Logical volume "snapvol" created # mkfs.btrfs /dev/vglocal/snapvol # mount /dev/vglocal/snapvol /snapmount
Créer un LVM à provisionnement dynamique
Si vous souhaitez créer un LVM à allocation dynamique, utilisez la commande lvcreate pour effectuer les opérations suivantes.
# lvcreate --thin vglocal/vgthinpool --size 20G Rounding up size to full physical extent 32.00 MiB Logical volume "vgthinpool" create # lvcreate --thin vglocal/vgthinpool --virtualsize 8G --name lvthin_snap Logical volume "lvthin_snap" created # lvs LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert opt vglocal -wi-ao--- 2.73g tmp vglocal -wi-ao--- 2.73g usr_local vglocal -wi-ao--- 2.73g var vglocal -wi-ao--- 2.73g lvthin_snap vglocal Vwi-a-tz- 8.00g vgthinpool 0.00 vgthinpool vglocal twi-a-tz- 20.00g 0.00 # mkfs.ext3 /dev/vglocal/lvthin_snap # mkdir /snapmount # mount /dev/vglocal/lvthin_snap /snapmount
Créer un fichier de configuration Snapper
Pour créer le fichier de configuration à l'aide de la commande snapper, utilisez la commande "snapper -c" comme indiqué ci-dessous.
Syntaxe sur btrfs :
snapper –c create-config
Sur btrfs, vous n'aurez qu'à spécifier le nom du fichier de configuration et le point de montage comme indiqué ci-dessous.
snapper -c snapconfig create-config /snapmount
Syntaxe sur LVM à allocation dynamique :
snapper –c create-config --fstype="lvm(xfs)"
Sur LVM à allocation dynamique, en plus de spécifier le nom du fichier de configuration et le point de montage, vous devez également spécifier le type de système de fichiers à l'aide de –fstype comme indiqué ci-dessous :
snapper -c snapconfig1 create-config --fstype="lvm(xfs)" /snapmount1
Afficher et supprimer les fichiers de configuration de Snapper
Après avoir créé les fichiers de configuration, vous verrez le répertoire .snapshots créé sous le répertoire /snapmount.
Vous remarquerez également que le fichier de configuration est créé sous /etc/snapper/configs/snapconfig. Les informations sur tous les sous-volumes configurés pour l'instantané seront stockées dans ce fichier.
Le fichier journal utilisé à des fins de dépannage se trouve sous /var/log/snapper.log
Pour afficher tous les fichiers de configuration, exécutez la commande snapper suivante :
# snapper list-configs Config | Subvolume ------------+------------ snapconfig | /snapmount ? btrfs filesystem snapconfig1 | /snapmount1 ? Thin provisioned filesystem
Pour supprimer un fichier de configuration, utilisez la syntaxe suivante :
snapper –c delete-config
Par exemple, la commande suivante supprime le fichier de configuration snapconfig sous le répertoire /etc/snapper/configs.
# snapper -c snapconfig delete-config
Créer un instantané à l'aide de Snapper
Afin de créer un instantané du système de fichiers, utilisez la syntaxe de commande snapper suivante :
snapper –config create –description "description of the snapshot"
Par exemple, ce qui suit prendra un nouvel instantané.
# snapper --config snapconfig create --description "Snapshot taken on 02-24-0354"
Une fois que vous avez pris un instantané, affichez les informations sur l'instantané comme indiqué ci-dessous :
# snapper --config snapconfig list Type | # | Pre # | Date | User | Cleanup | Description | Userdata -------+---+-------+--------------------------+------+---------+------------------------------+--------- single | 0 | | | root | | current | single | 1 | | Mon Feb 24 15:57:00 2014 | root | | Snapshot taken on 02-24-0354 |
Prenez un deuxième instantané pour comparaison
À des fins de test, j'ai annulé le testfile1 sous le répertoire /snapmount.
# cat /dev/null > testfile1 # ls -ltr -rw-r--r-- 1 root root 11 Feb 24 11:28 testfile2 -rw-r--r-- 1 root root 43 Feb 24 11:28 testfile3 drwxr-x--- 1 root root 2 Feb 24 15:57 .snapshots -rw-r--r-- 1 root root 0 Feb 24 16:25 testfile1
Après le changement ci-dessus, prenons un autre instantané.
# snapper --config snapconfig create --description "Snapshot taken on 02-24-0427"
Comme vous le voyez ci-dessous, nous avons maintenant deux instantanés.
# snapper --config snapconfig list Type | # | Pre # | Date | User | Cleanup | Description | Userdata -------+---+-------+--------------------------+------+---------+------------------------------+--------- single | 0 | | | root | | current | single | 1 | | Mon Feb 24 15:57:00 2014 | root | | Snapshot taken on 02-24-0354 | single | 2 | | Mon Feb 24 16:27:48 2014 | root | | Snapshot taken on 02-24-0427 |
Comparer le 1er et le 2ème instantané
Maintenant, comparons les deux instantanés.
La commande ci-dessous compare l'instantané #1 avec l'instantané #2.
# snapper -c snapconfig status 1..2 c.... /snapmount/testfile1
Dans la sortie :
- "c" sur la sortie indique que le contenu a été modifié.
- "+" indique que de nouveaux fichiers sont ajoutés au répertoire.
- "-" indique que des fichiers ont été supprimés.
Prendre plusieurs instantanés et comparer les résultats
J'ai créé plusieurs instantanés de test avec peu de fichiers ajoutés, peu de fichiers supprimés et peu de modifications de contenu.
# snapper --config snapconfig list Type | # | Pre # | Date | User | Cleanup | Description | Userdata -------+---+-------+--------------------------+------+---------+------------------------------+--------- single | 0 | | | root | | current | single | 1 | | Mon Feb 24 15:57:00 2014 | root | | Snapshot taken on 02-24-0354 | single | 2 | | Mon Feb 24 16:27:48 2014 | root | | Snapshot taken on 02-24-0427 | single | 3 | | Mon Feb 24 16:37:53 2014 | root | | Snapshot taken on 02-24-0437 | single | 4 | | Mon Feb 24 16:38:17 2014 | root | | Snapshot taken on 02-24-0440 |
La sortie suivante répertorie les fichiers qui sont ajoutés, modifiés et supprimés.
# snapper -c snapconfig status 4..1 -.... /snapmount/a -.... /snapmount/b -.... /snapmount/c c.... /snapmount/testfile1 +.... /snapmount/testfile2
Afficher la différence entre les instantanés
Maintenant, pour voir la différence de contenu spécifique dans le fichier entre l'instantané n°1 et l'instantané n°4, vous pouvez utiliser la commande suivante.
# snapper -c snapconfig diff 4..1 /snapmount/testfile1 --- /snapmount/.snapshots/4/snapshot/testfile1 2014-02-24 16:25:44.416490642 -0500 +++ /snapmount/.snapshots/1/snapshot/testfile1 2014-02-24 11:27:35.000000000 -0500 @@ -0,0 +1 @@ +This is a test file
La sortie est dans le format typique d'une sortie de commande diff.
Restaurer un fichier spécifique à partir d'un instantané
Une fois que vous avez vu les différences entre les instantanés et que vous savez quel fichier spécifique vous souhaitez restaurer, vous pouvez le restaurer comme expliqué ici.
Avant la restauration, nous n'avons pas le testfile2 dans cette liste.
# ls -ltr -rw-r--r-- 1 root root 43 Feb 24 11:28 testfile3 -rw-r--r-- 1 root root 0 Feb 24 16:25 testfile1 drwxr-x--- 1 root root 10 Feb 24 16:45 .snapshots
Par exemple, pour restaurer un seul fichier à partir de l'instantané, c'est-à-dire /snapmount/testfile2 (le fichier qui a été supprimé) à partir de l'instantané #1, utilisez la commande ci-dessous :
# snapper -c snapconfig -v undochange 1..4 /snapmount/testfile2 create:1 modify:0 delete:0 creating /snapmount/testfile2
Après la restauration, nous voyons le testfile2 dans la liste.
# ls -ltr -rw-r--r-- 1 root root 43 Feb 24 11:28 testfile3 -rw-r--r-- 1 root root 0 Feb 24 16:25 testfile1 drwxr-x--- 1 root root 10 Feb 24 16:45 .snapshots -rw-r--r-- 1 root root 11 Feb 24 16:55 testfile2
Restaurer tous les fichiers à partir d'un instantané
Pour restaurer tous les fichiers de l'instantané, procédez comme suit :
Maintenant, restaurez tous les fichiers à partir d'un instantané particulier. Remarquez comment cela supprime quelques fichiers, crée un fichier et modifie un fichier.
# snapper -c snapconfig -v undochange 1..4 create:1 modify:1 delete:3 deleting /snapmount/c deleting /snapmount/b deleting /snapmount/a modifying /snapmount/testfile1 creating /snapmount/testfile2