Snapper je nástroj příkazového řádku v Linuxu používaný k vytváření a správě snímků tenkých svazků LVM. Může vytvářet, mazat a porovnávat snímky a vracet změny provedené mezi snímky. Snapper také umožňuje snadné vytváření a správu snímků pro Btrfs.
Instalace snapperu
Pomocí příkazu yum nainstalujte softwarový balíček 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!
Pomocí příkazu rpm –ql zobrazíte soubory poskytované balíčkem 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 ...Všimněte si dvou souborů cron snapper.
– Ve výchozím nastavení snapper nastavuje cron.hourly úkol vytvořit snímky v .snapshots podadresář svazku a cron.daily úkol vyčistit staré snímky.
– Toto chování můžete zakázat nebo změnit úpravou konfiguračního souboru.
1. Vytvoření Thinly Provisioned Logical Volume
Pomocí příkazu lvcreate vytvořte tenký zajišťovaný svazek s názvem – thinvol1. Všimněte si, že tento svazek je třeba připojit, než vytvoříme snímek pomocí příkazu snapper.
# vgs VG #PV #LV #SN Attr VSize VFree myvolg 1 0 0 wz--n- 1020.00m 1020.00m
Vytvořte tenký bazén:
# lvcreate –v –L 100m –T myvolg/mythinpool ... Logical volume “mythinpool” created
Vytvořte tence zřízený svazek :
# lvcreate –v –V 200m –T myvolg/mythinpool –n thinvol1 ... Logical volume “thinvol1” created
Vytvořte systém souborů na tenkém svazku.
# mkfs.ext4 /dev/myvolg/thinvol1 ... Writing superblocks and filesystem accounting information: done
Připojte systém souborů:
# mkdir /myvol1 # mount /dev/myvolg/thinvol1 /myvol1
2. Vytváření konfiguračního souboru snapper
Chcete-li vytvořit snímek pomocí snapperu, je vyžadován konfigurační soubor pro tenký svazek LVM nebo podsvazek Btrfs. Svazky LVM a Btrfs musí mít také připojený souborový systém. K vytvoření konfiguračního souboru použijte příkaz create-config. Následující příklad vytvoří konfigurační soubor s názvem myvol_snap pro souborový systém LVM ext4 připojený k /myvol1:
# snapper –c myvol1_snap create-config –f "lvm(ext4)" /myvol1
– Tento příkaz přidá položku do /etc/sysconfig/snapper.
– Tento příkaz vytvoří konfigurační soubor /etc/snapper/configs/myvol1_snap.
– Tento příkaz vytvoří adresář .snapshots v /myvol1 adresář.
# 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” ...
Snímky systému souborů /myvol1 jsou uloženy v podadresáři .snapshots.
# ls –la /myvol1 ... drwxr-x--- ... .snapshots ...
Typy snímků
Existují tři typy snímků, které můžete vytvořit pomocí snapperu:
pre: Slouží k zaznamenání stavu svazku před úpravou. Předběžné snímky by vždy měly mít odpovídající snímek příspěvku.
příspěvek: Slouží k zaznamenání stavu svazku po úpravě.
single: Tyto snímky nemají žádný zvláštní vztah k ostatním snímkům.
3. Vytváření snímku
Vytvořte nějaký testovací soubor v adresáři /myvol1.
# echo "This is a test file" > /myvol1/test_file
Použijte snapper create -t pre k vytvoření předběžného snímku svazku definovaného parametrem myvol1_snap konfigurační soubor. Zahrnutím volby –p zobrazíte číslo vytvářeného snímku. (V tomto příkladu je číslo předběžného snímku 1)
# snapper –c myvol1_snap create –t pre –p 1
Snímky jsou uloženy podle čísla snímku v podadresáři .snapshots svazku. Prohlédněte si obsah adresáře /myvol1/.snapshots.
# ls –l /myvol1/.snapshots ... drwxr-xr-x ... 1
Prohlédněte si obsah adresáře /myvol1/.snapshots/1.
# ls –l /myvol1/.snapshots/1 ... -rw------- ... info.xml drwxr-x--- ... snapshot
Nyní upravte obsah adresáře /myvol1 odstraněním testovacího_souboru.
# rm /myvol1/test_file
Pomocí snapper create -t post vytvořte snímek příspěvku svazku definovaného konfiguračním souborem myvol1_snap. Zahrnutím volby –pre-num 1 přidružíte tento snímek příspěvku k předběžnému snímku 1. Zahrnutím volby –p zobrazíte číslo vytvářeného snímku.
# snapper –c myvol1_snap create –t post --pre-num 1 –p 2
Uvidíte, že v adresáři .snapshots se vytvoří nové názvy adresářů 2.
# ls –l /myvol1/.snapshots/2 ... -rw------- ... filelist-1.txt -rw------- ... info.xml drwxr-x--- ... snapshot
Filelist-1.txt obsahuje soubor, který byl smazán po předběžném snímku a před snímkem příspěvku.
# cat /myvol1/.snapshots/2/filelist-1.txt -..... /test_file
Porovnání před a po snímcích
Pomocí příkazu snapper status zobrazíte soubory a adresáře, které byly přidány, odebrány nebo změněny mezi před snímkem 1 a po snímku 2.
# snapper –c myvol1_snap status 1..2 -..... /test_file
Pomocí příkazu snapper diff zobrazte rozdíly mezi obsahem souborů v předběžném snímku 1 a po snímku 2.
# snapper –c myvol1_snap diff 1..2 Binary files /myvol1/.snapshots/1/snapshot/test_file and /myvol1/.snapshots/2/snapshot/test_file differ
Pomocí příkazu snapper list vypište snímky, které existují pro svazek definovaný konfiguračním souborem 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 | | |
vrátí změny z post snapshotu na preshanshot
Chcete-li vrátit změny ze snímku příspěvku na snímek před snímkem, tj. k obnovení souboru test_file, použijte změna snapperu příkaz.
# snapper –c myvol1_snap undochange 1..2 create:1 modify:0 delete:0
Ověřte
# ls /myvol1 lost+found test_file