Snapper ist ein Befehlszeilendienstprogramm in Linux, das zum Erstellen und Verwalten von Snapshots von LVM-Thin-Volumes verwendet wird. Es kann Snapshots erstellen, löschen und vergleichen und Änderungen rückgängig machen, die zwischen Snapshots vorgenommen wurden. Snapper ermöglicht auch die einfache Erstellung und Verwaltung von Snapshots für Btrfs.
Installieren von Snapper
Verwenden Sie den Befehl yum, um das Snapper-Softwarepaket zu installieren.
# yum install snapper ... Transaction Summary ============================================================= Install 1 Package (+3 Dependent packages) Total download size: 499 k Installed size: 1.5 M Is this ok [y/d/N]: y ... Complete!
Verwenden Sie den Befehl rpm –ql, um die vom Snapper-Paket bereitgestellten Dateien anzuzeigen.
# rpm –ql snapper /etc/cron.daily/snapper /etc/cron.hourly/snapper /etc/dbus-1/system.d/org.opensus.Snapper.conf /etc/logrotate.d/snapper /usr/bin/snapper /usr/sbin/snapperd /usr/share/dbus-1/system-services/org.opensus.Snapper.service ...Beachten Sie die beiden Cron-Snapper-Dateien.
– Standardmäßig richtet Snapper eine cron.hourly ein Job zum Erstellen von Snapshots in der .snapshots Unterverzeichnis des Volumes und eine cron.daily Job zum Bereinigen alter Snapshots.
– Sie können die Konfigurationsdatei bearbeiten, um dieses Verhalten zu deaktivieren oder zu ändern.
1. Erstellen eines Thin Provisioned Logical Volume
Verwenden Sie den Befehl lvcreate, um ein Thin Provisioning-Volume mit dem Namen – thinvol1 zu erstellen. Beachten Sie, dass dieses Volume gemountet werden muss, bevor wir den Schnappschuss mit dem Snapper-Befehl erstellen.
# vgs VG #PV #LV #SN Attr VSize VFree myvolg 1 0 0 wz--n- 1020.00m 1020.00m
Erstellen Sie einen dünnen Pool:
# lvcreate –v –L 100m –T myvolg/mythinpool ... Logical volume “mythinpool” created
Dünn bereitgestelltes Volume erstellen :
# lvcreate –v –V 200m –T myvolg/mythinpool –n thinvol1 ... Logical volume “thinvol1” created
Erstellen Sie ein Dateisystem auf dem Thin Volume.
# mkfs.ext4 /dev/myvolg/thinvol1 ... Writing superblocks and filesystem accounting information: done
Mounten Sie das Dateisystem:
# mkdir /myvol1 # mount /dev/myvolg/thinvol1 /myvol1
2. Snapper-Konfigurationsdatei erstellen
Um einen Snapshot mit Snapper zu erstellen, ist eine Konfigurationsdatei für das LVM-Thin-Volume oder das Btrfs-Subvolume erforderlich. Die LVM- und Btrfs-Volumes müssen auch ein gemountetes Dateisystem haben. Verwenden Sie den Befehl create-config, um die Konfigurationsdatei zu erstellen. Das folgende Beispiel erstellt eine Konfigurationsdatei namens myvol_snap für ein LVM ext4-Dateisystem, das auf /myvol1:
gemountet ist# snapper –c myvol1_snap create-config –f "lvm(ext4)" /myvol1
– Dieser Befehl fügt einen Eintrag zu /etc/sysconfig/snapper hinzu.
– Dieser Befehl erstellt die Konfigurationsdatei /etc/snapper/configs/myvol1_snap.
– Dieser Befehl erstellt ein .snapshots-Verzeichnis in /myvol1 Verzeichnis.
# cat /etc/sysconfig/snapper ... SNAPPER_CONFIGS=”myvol1_snap”
# cat /etc/snapper/configs/myvol1_snap ... # subvolume to snapshot SUBVOLUME=”/myvol1” # filesystem type FSTYPE=”lvm(ext4)” ... # start comparing pre- and post-snapshot in background after... BACKGROUND_COMPARISON=”yes” # run daily number cleanup NUMBER_CLEANUP=”yes” ... # create hourly snapshots TIMELINE_CREATE=”yes” # cleanup hourly snapshots after some time TIMELINE_CLEANUP=”yes” ... # cleanup empty pre-post-pairs EMPTY_PRE_POST_CLEANUP=”yes” ...
Snapshots des Dateisystems /myvol1 werden im Unterverzeichnis .snapshots gespeichert.
# ls –la /myvol1 ... drwxr-x--- ... .snapshots ...
Arten von Schnappschüssen
Es gibt drei Arten von Snapshots, die Sie mit Snapper erstellen können:
pre: Wird verwendet, um den Status eines Volumes vor einer Änderung aufzuzeichnen. Pre-Snapshots sollten immer einen entsprechenden Post-Snapshot haben.
post: Wird verwendet, um den Status eines Volumes nach einer Änderung aufzuzeichnen.
einzeln: Diese Schnappschüsse haben keine besondere Beziehung zu anderen Schnappschüssen.
3. Snapshot erstellen
Erstellen Sie eine Testdatei im Verzeichnis /myvol1.
# echo "This is a test file" > /myvol1/test_file
Verwenden Sie snapper create -t pre, um einen Pre-Snapshot des durch myvol1_snap definierten Volumes zu erstellen Konfigurationsdatei. Schließen Sie die Option –p ein, um die Nummer des erstellten Snapshots anzuzeigen. (In diesem Beispiel ist die Pre-Snapshot-Nummer 1)
# snapper –c myvol1_snap create –t pre –p 1
Die Snapshots werden nach Snapshot-Nummer im Unterverzeichnis .snapshots des Volumes gespeichert. Zeigen Sie den Inhalt des Verzeichnisses /myvol1/.snapshots an.
# ls –l /myvol1/.snapshots ... drwxr-xr-x ... 1
Zeigen Sie den Inhalt des Verzeichnisses /myvol1/.snapshots/1 an.
# ls –l /myvol1/.snapshots/1 ... -rw------- ... info.xml drwxr-x--- ... snapshot
Ändern Sie nun den Inhalt des Verzeichnisses /myvol1, indem Sie die Datei test_file.
entfernen# rm /myvol1/test_file
Verwenden Sie snapper create -t post, um einen Post-Snapshot des Volumes zu erstellen, das durch die Konfigurationsdatei myvol1_snap definiert ist. Fügen Sie die Option –pre-num 1 hinzu, um diesen Post-Snapshot mit dem Pre-Snapshot 1 zu verknüpfen. Fügen Sie die Option –p ein, um die Nummer des erstellten Snapshots anzuzeigen.
# snapper –c myvol1_snap create –t post --pre-num 1 –p 2
Sie würden ein neues Verzeichnis namens 2 sehen, das im Verzeichnis .snapshots erstellt wurde.
# ls –l /myvol1/.snapshots/2 ... -rw------- ... filelist-1.txt -rw------- ... info.xml drwxr-x--- ... snapshot
Die filelist-1.txt enthält die Datei, die nach dem Pre-Snapshot und vor dem Post-Snapshot gelöscht wurde.
# cat /myvol1/.snapshots/2/filelist-1.txt -..... /test_file
Vergleich von Pre- und Post-Snapshots
Verwenden Sie den Snapper-Statusbefehl, um die Dateien und Verzeichnisse anzuzeigen, die zwischen Pre-Snapshot 1 und Post-Snapshot 2 hinzugefügt, entfernt oder geändert wurden.
# snapper –c myvol1_snap status 1..2 -..... /test_file
Verwenden Sie den Befehl snapper diff, um die Unterschiede zwischen den Inhalten der Dateien in Pre-Snapshot 1 und Post-Snapshot 2 anzuzeigen.
# snapper –c myvol1_snap diff 1..2 Binary files /myvol1/.snapshots/1/snapshot/test_file and /myvol1/.snapshots/2/snapshot/test_file differ
Verwenden Sie den Befehl snapper list, um die Snapshots aufzulisten, die für das Volume vorhanden sind, das durch die Konfigurationsdatei myvol1_snap definiert ist.
# snapper –c myvol1_snap list Type | # | Pre # | Date | User | Cleanup |Description| Userdata ------+---+-------+------+------+---------+------------+-------- single| 0 | | ... | root | | Current | pre | 1 | | ... | root | | | post | 2 | 1 | ... | root | | |
Kehren Sie die Änderungen vom Post-Snapshot zum Pre-Shanshot um
Um die Änderungen vom Post-Snapshot zum Pre-Snapshot rückgängig zu machen, d. h. um die test_file wiederherzustellen, verwenden Sie den Snapper Undochange Befehl.
# snapper –c myvol1_snap undochange 1..2 create:1 modify:0 delete:0
Bestätigen
# ls /myvol1 lost+found test_file