Snapper ist ein Linux-Befehlszeilentool zum Erstellen und Verwalten von Snapshots Ihrer Dateisysteme.
Mit dem Snapper-Befehl können Sie schreibgeschützte Snapshots erstellen. Sie können diese Snapshots verwenden, um bestimmte Dateien oder alle Dateien während einer Notfallsituation wiederherzustellen.
Sie können damit auch mehrere Snapshots vergleichen und zu einem bestimmten alten Snapshot zurückkehren.
Snapper wird nur auf btrfs (B-Tree File Systems Copy-on-Write), ext4-Dateisystemen und Thin- bereitgestellte LVM-basierte logische Volumes.
Wenn ein Snapshot mit dem Snapper-Befehl erstellt wird, befindet er sich im selben Dateisystem, sodass genügend freier Speicherplatz verfügbar sein sollte und eine regelmäßige FS-Bereinigung erforderlich sein kann.
Wenn Sie daran interessiert sind, einen rsync-basierten Snapshot zu verwenden, sollten Sie sich auch das zuvor besprochene rsnapshot-Dienstprogramm ansehen.
Installieren Sie das Snapper-Dienstprogramm
Sie können entweder die Snapper-Binärdatei für verschiedene Distributionen herunterladen und installieren oder den Quellcode herunterladen und selbst kompilieren.
Beispielsweise können Sie die Snapper-RPMs aus dem SUSE SLES11 SP2-Repository herunterladen.
# rpm -ivh snapper-0.1.6-2.1.x86_64.rpm
Das Folgende sind Abhängigkeiten für das Snapper-Paket. Wenn Sie yum oder andere Paketverwaltungstools verwenden, werden alle Abhängigkeiten automatisch installiert.
- 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
Btrfs-Dateisystem erstellen
Da btrfs ein unterstütztes Dateisystem von SLES11 SP2 ist, können Sie btrfs verwenden, um Ihr logisches Volume zu erstellen, oder btrfs-convert-Befehle verwenden, um Ihr vorhandenes ext3-Dateisystem in btrfs zu konvertieren.
Führen Sie die folgenden Befehle aus, um ein neues btrfs-Dateisystem zu erstellen. Wenn Sie das btrfs-Programm nicht installiert haben, verwenden Sie zypper install btrfsprogs, um es zu installieren.
# lvcreate -L 8G -n snapvol vglocal Logical volume "snapvol" created # mkfs.btrfs /dev/vglocal/snapvol # mount /dev/vglocal/snapvol /snapmount
Dünn bereitgestelltes LVM erstellen
Wenn Sie einen Thin-bereitgestellten LVM erstellen möchten, verwenden Sie den lvcreate-Befehl, um Folgendes zu tun.
# 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
Snapper-Konfigurationsdatei erstellen
Um die Konfigurationsdatei mit dem Snapper-Befehl zu erstellen, verwenden Sie den „snapper -c“-Befehl wie unten gezeigt.
Syntax auf btrfs:
snapper –c create-config
Auf btrfs geben Sie einfach den Namen der Konfigurationsdatei und den Einhängepunkt wie unten gezeigt an.
snapper -c snapconfig create-config /snapmount
Syntax auf Thin-bereitgestelltem LVM:
snapper –c create-config --fstype="lvm(xfs)"
Auf Thin-bereitgestelltem LVM sollten Sie neben dem Namen der Konfigurationsdatei und dem Einhängepunkt auch den Dateisystemtyp mit –fstype angeben, wie unten gezeigt:
snapper -c snapconfig1 create-config --fstype="lvm(xfs)" /snapmount1
Snapper-Konfigurationsdateien anzeigen und löschen
Nachdem Sie die Konfigurationsdateien erstellt haben, sehen Sie das Verzeichnis .snapshots, das im Verzeichnis /snapmount erstellt wurde.
Sie werden auch feststellen, dass die Konfigurationsdatei unter /etc/snapper/configs/snapconfig erstellt wird. Informationen über alle Subvolumes, die für Snapshots konfiguriert sind, werden in dieser Datei gespeichert.
Die zur Fehlerbehebung verwendete Protokolldatei befindet sich unter /var/log/snapper.log
Um alle Konfigurationsdateien anzuzeigen, führen Sie den folgenden Snapper-Befehl aus:
# snapper list-configs Config | Subvolume ------------+------------ snapconfig | /snapmount ? btrfs filesystem snapconfig1 | /snapmount1 ? Thin provisioned filesystem
Um eine Konfigurationsdatei zu löschen, verwenden Sie die folgende Syntax:
snapper –c delete-config
Beispielsweise löscht der folgende Befehl die Konfigurationsdatei snapconfig im Verzeichnis /etc/snapper/configs.
# snapper -c snapconfig delete-config
Erstellen Sie einen Snapshot mit Snapper
Um einen Snapshot des Dateisystems zu erstellen, verwenden Sie die folgende Snapper-Befehlssyntax:
snapper –config create –description "description of the snapshot"
Folgendes wird beispielsweise einen neuen Snapshot erstellen.
# snapper --config snapconfig create --description "Snapshot taken on 02-24-0354"
Nachdem Sie einen Snapshot erstellt haben, sehen Sie sich die Snapshot-Informationen wie unten gezeigt an:
# 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 |
Zweiten Snapshot zum Vergleich erstellen
Zu Testzwecken habe ich die testfile1 im /snapmount-Verzeichnis aufgehoben.
# 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
Lassen Sie uns nach der obigen Änderung einen weiteren Schnappschuss machen.
# snapper --config snapconfig create --description "Snapshot taken on 02-24-0427"
Wie Sie unten sehen, haben wir jetzt zwei Schnappschüsse.
# 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 |
Vergleiche 1. und 2. Schnappschuss
Lassen Sie uns nun beide Schnappschüsse vergleichen.
Der folgende Befehl vergleicht den Schnappschuss Nr. 1 mit dem Schnappschuss Nr. 2.
# snapper -c snapconfig status 1..2 c.... /snapmount/testfile1
In der Ausgabe:
- „c“ in der Ausgabe zeigt an, dass der Inhalt geändert wurde.
- „+“ zeigt an, dass dem Verzeichnis neue Dateien hinzugefügt werden.
- „-“ zeigt an, dass Dateien gelöscht wurden.
Machen Sie mehrere Snapshots und vergleichen Sie die Ausgabe
Ich habe mehrere Test-Snapshots mit wenigen hinzugefügten Dateien, wenigen entfernten Dateien und wenigen Inhaltsänderungen erstellt.
# 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 |
Die folgende Ausgabe listet die Dateien auf, die hinzugefügt, geändert und gelöscht wurden.
# snapper -c snapconfig status 4..1 -.... /snapmount/a -.... /snapmount/b -.... /snapmount/c c.... /snapmount/testfile1 +.... /snapmount/testfile2
Sehen Sie sich den Unterschied zwischen Snapshots an
Um nun den spezifischen Inhaltsunterschied in der Datei zwischen Schnappschuss Nr. 1 und Schnappschuss Nr. 4 anzuzeigen, können Sie den folgenden Befehl verwenden.
# 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
Die Ausgabe erfolgt im typischen Format einer diff-Befehlsausgabe.
Eine bestimmte Datei aus einem Snapshot wiederherstellen
Sobald Sie die Unterschiede zwischen Snapshots gesehen haben und wissen, welche bestimmte Datei Sie wiederherstellen möchten, können Sie sie wie hier beschrieben wiederherstellen.
Vor der Wiederherstellung haben wir die Testdatei2 nicht in dieser 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
Um beispielsweise eine einzelne Datei aus dem Snapshot wiederherzustellen, d. h. /snapmount/testfile2 (die Datei, die gelöscht wurde) aus Snapshot#1, verwenden Sie den folgenden Befehl:
# snapper -c snapconfig -v undochange 1..4 /snapmount/testfile2 create:1 modify:0 delete:0 creating /snapmount/testfile2
Nach der Wiederherstellung sehen wir die Testdatei2 in der 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
Alle Dateien aus einem Snapshot wiederherstellen
Gehen Sie wie folgt vor, um alle Dateien aus dem Snapshot wiederherzustellen:
Lassen Sie uns nun alle Dateien aus einem bestimmten Snapshot wiederherstellen. Beachten Sie, wie dies einige Dateien löscht, eine Datei erstellt und eine Datei ändert.
# 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