Snapper è un'utilità della riga di comando in Linux utilizzata per creare e gestire snapshot di volumi sottili LVM. Può creare, eliminare e confrontare istantanee e ripristinare le modifiche apportate tra le istantanee. Snapper consente inoltre di creare e gestire facilmente le istantanee per Btrfs.
Installazione dello snapper
Usa il comando yum per installare il pacchetto software snapper.
# 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!
Utilizzare il comando rpm –ql per visualizzare i file forniti dal pacchetto snapper.
# 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 ...Nota i due file cron snapper.
– Per impostazione predefinita, snapper imposta un cron.hourly lavoro per creare snapshot in .snapshots sottodirectory del volume e un cron.daily lavoro per ripulire i vecchi snapshot.
– È possibile modificare il file di configurazione per disabilitare o modificare questo comportamento.
1. Creazione di un volume logico Thinly Provisioned
Utilizzare il comando lvcreate per creare un volume con thin provisioning denominato – thinvol1. Nota che questo volume deve essere montato prima di creare lo snapshot utilizzando il comando snapper.
# vgs VG #PV #LV #SN Attr VSize VFree myvolg 1 0 0 wz--n- 1020.00m 1020.00m
Crea una piscina sottile:
# lvcreate –v –L 100m –T myvolg/mythinpool ... Logical volume “mythinpool” created
Crea volume con thin provisioning :
# lvcreate –v –V 200m –T myvolg/mythinpool –n thinvol1 ... Logical volume “thinvol1” created
Crea un file system sul volume sottile.
# mkfs.ext4 /dev/myvolg/thinvol1 ... Writing superblocks and filesystem accounting information: done
Monta il file system:
# mkdir /myvol1 # mount /dev/myvolg/thinvol1 /myvol1
2. Creazione del file di configurazione dello snapper
Per creare uno snapshot utilizzando snapper, è necessario un file di configurazione per il volume sottile LVM o il sottovolume Btrfs. Anche i volumi LVM e Btrfs devono avere un file system montato. Utilizzare il comando create-config per creare il file di configurazione. L'esempio seguente crea un file di configurazione chiamato myvol_snap per un file system LVM ext4 montato su /myvol1:
# snapper –c myvol1_snap create-config –f "lvm(ext4)" /myvol1
– Questo comando aggiunge una voce a /etc/sysconfig/snapper.
– Questo comando crea il file di configurazione /etc/snapper/configs/myvol1_snap.
– Questo comando crea una directory .snapshots in /myvol1 directory.
# 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” ...
Gli snapshot del file system /myvol1 sono archiviati nella sottodirectory .snapshots.
# ls –la /myvol1 ... drwxr-x--- ... .snapshots ...
Tipi di istantanee
Esistono tre tipi di snapshot che puoi creare utilizzando snapper:
pre: Utilizzare per registrare lo stato di un volume prima di una modifica. Gli snapshot pre devono sempre avere uno snapshot post corrispondente.
post: Utilizzare per registrare lo stato di un volume dopo una modifica.
singolo: Queste istantanee non hanno alcuna relazione speciale con altre istantanee.
3. Creazione di un'istantanea
Crea un file di prova nella directory /myvol1.
# echo "This is a test file" > /myvol1/test_file
Usa lo snapper create -t pre per creare una pre-istantanea del volume definito da myvol1_snap file di configurazione. Includere l'opzione –p per visualizzare il numero dello snapshot in fase di creazione. (In questo esempio, il numero pre-istantanea è 1)
# snapper –c myvol1_snap create –t pre –p 1
Gli snapshot vengono archiviati in base al numero di snapshot nella sottodirectory .snapshots del volume. Visualizza il contenuto della directory /myvol1/.snapshots.
# ls –l /myvol1/.snapshots ... drwxr-xr-x ... 1
Visualizza il contenuto della directory /myvol1/.snapshots/1.
# ls –l /myvol1/.snapshots/1 ... -rw------- ... info.xml drwxr-x--- ... snapshot
Ora modifica il contenuto della directory /myvol1 rimuovendo il file_test.
# rm /myvol1/test_file
Usa lo snapper create -t post per creare un'istantanea del post del volume definito dal file di configurazione myvol1_snap. Includere l'opzione –pre-num 1 per associare questo post snapshot con lo snapshot pre 1. Includere l'opzione –p per visualizzare il numero dello snapshot in fase di creazione.
# snapper –c myvol1_snap create –t post --pre-num 1 –p 2
Vedresti una nuova directory con i nomi 2 creati nella directory .snapshots.
# ls –l /myvol1/.snapshots/2 ... -rw------- ... filelist-1.txt -rw------- ... info.xml drwxr-x--- ... snapshot
Il filelist-1.txt contiene il file che è stato eliminato dopo lo snapshot pre e prima dello snapshot post.
# cat /myvol1/.snapshots/2/filelist-1.txt -..... /test_file
Confronto tra snapshot pre e post
Usa il comando di stato dello snapper per visualizzare i file e le directory che sono stati aggiunti, rimossi o modificati tra il pre snapshot 1 e il post snapshot 2.
# snapper –c myvol1_snap status 1..2 -..... /test_file
Usa il comando snapper diff per visualizzare le differenze tra i contenuti dei file nella prima istantanea 1 e nella post istantanea 2.
# snapper –c myvol1_snap diff 1..2 Binary files /myvol1/.snapshots/1/snapshot/test_file and /myvol1/.snapshots/2/snapshot/test_file differ
Utilizzare il comando snapper list per elencare gli snapshot esistenti per il volume definito dal file di configurazione myvol1_snap.
# snapper –c myvol1_snap list Type | # | Pre # | Date | User | Cleanup |Description| Userdata ------+---+-------+------+------+---------+------------+-------- single| 0 | | ... | root | | Current | pre | 1 | | ... | root | | | post | 2 | 1 | ... | root | | |
annulla le modifiche dallo snapshot post a quello pre-shanshot
Per annullare le modifiche dallo snapshot post al pre snapshot, ad esempio per ripristinare il file_test, utilizzare snapper undochange comando.
# snapper –c myvol1_snap undochange 1..2 create:1 modify:0 delete:0
Verifica
# ls /myvol1 lost+found test_file