Snapper je nástroj příkazového řádku Linuxu pro vytváření a správu snímků vašich souborových systémů.
Pomocí příkazu snapper můžete vytvářet snímky pouze pro čtení. Tyto snímky můžete použít k obnovení konkrétních souborů nebo všech souborů během jakékoli havárie.
Můžete jej také použít k porovnání více snímků a vrátit se zpět ke konkrétním starým snímkům.
Snapper je podporován pouze na btrfs (systémy souborů B-strom kopírování při zápisu), souborových systémech ext4 a tenkých- zřízené logické svazky založené na LVM.
Když je snímek pořízen pomocí příkazu snapper, bude umístěn ve stejném souborovém systému, takže by mělo být k dispozici dostatek volného místa a může být vyžadováno pravidelné čištění FS.
Pokud máte zájem o použití snímku založeného na rsync, měli byste se také podívat na nástroj rsnapshot, o kterém jsme hovořili dříve.
Nainstalujte nástroj Snapper
Můžete si buď stáhnout binární soubor snapper pro různé distribuce a nainstalovat jej, nebo si stáhnout zdrojový kód a zkompilovat jej sami.
Můžete si například stáhnout otáčky snapperu z úložiště SUSE SLES11 SP2.
# rpm -ivh snapper-0.1.6-2.1.x86_64.rpm
Níže jsou uvedeny závislosti pro balíček snapper. Když použijete yum nebo jiné nástroje pro správu balíčků, všechny závislosti se nainstalují automaticky.
- 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
Vytvořit souborový systém btrfs
Vzhledem k tomu, že btrfs je podporovaný souborový systém od SLES11 SP2, můžete použít btrfs k vytvoření logického svazku nebo použít příkazy btrfs-convert k převodu vašeho stávajícího souborového systému ext3 na btrfs.
Pro vytvoření nového souborového systému btrfs spusťte následující příkazy. Pokud nemáte nainstalovaný program btrfs, použijte k jeho instalaci zypper install btrfsprogs.
# lvcreate -L 8G -n snapvol vglocal Logical volume "snapvol" created # mkfs.btrfs /dev/vglocal/snapvol # mount /dev/vglocal/snapvol /snapmount
Vytvoření tenkého LVM
Pokud chcete vytvořit tenký LVM, použijte příkaz lvcreate k následujícímu.
# 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
Vytvořte konfigurační soubor aplikace Snapper
Chcete-li vytvořit konfigurační soubor pomocí příkazu snapper, použijte příkaz „snapper -c“, jak je uvedeno níže.
Syntaxe na btrfs:
snapper –c create-config
Na btrfs stačí zadat název konfiguračního souboru a bod připojení, jak je uvedeno níže.
snapper -c snapconfig create-config /snapmount
Syntaxe na tenkém LVM:
snapper –c create-config --fstype="lvm(xfs)"
Na tenkém LVM byste měli kromě zadání konfiguračního souboru a bodu připojení také zadat typ souborového systému pomocí –fstype, jak je uvedeno níže:
snapper -c snapconfig1 create-config --fstype="lvm(xfs)" /snapmount1
Zobrazení a odstranění souborů konfigurace aplikace Snapper
Po vytvoření konfiguračních souborů uvidíte adresář .snapshots vytvořený v adresáři /snapmount.
Také si všimnete, že konfigurační soubor je vytvořen v /etc/snapper/configs/snapconfig. V tomto souboru budou uloženy informace o celém dílčím svazku, který je nakonfigurován pro snímek.
Soubor protokolu používaný pro účely odstraňování problémů se nachází pod /var/log/snapper.log
Chcete-li zobrazit všechny konfigurační soubory, spusťte následující příkaz snapper:
# snapper list-configs Config | Subvolume ------------+------------ snapconfig | /snapmount ? btrfs filesystem snapconfig1 | /snapmount1 ? Thin provisioned filesystem
Chcete-li odstranit konfigurační soubor, použijte následující syntaxi:
snapper –c delete-config
Například následující příkaz odstraní konfigurační soubor snapconfig v adresáři /etc/snapper/configs.
# snapper -c snapconfig delete-config
Vytvořte snímek pomocí aplikace Snapper
Chcete-li vytvořit snímek systému souborů, použijte následující syntaxi příkazu snapper:
snapper –config create –description "description of the snapshot"
Například následující pořídí nový snímek.
# snapper --config snapconfig create --description "Snapshot taken on 02-24-0354"
Jakmile pořídíte snímek, zobrazte informace o snímku, jak je uvedeno níže:
# 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 |
Pořiďte 2. snímek pro srovnání
Pro účely testování jsem vynuloval testfile1 v adresáři /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
Po výše uvedené změně pořídíme další snímek.
# snapper --config snapconfig create --description "Snapshot taken on 02-24-0427"
Jak vidíte níže, nyní máme dva snímky.
# 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 |
Porovnejte 1. a 2. snímek
Nyní porovnejme oba snímky.
Níže uvedený příkaz porovná snímek#1 se snímkem#2.
# snapper -c snapconfig status 1..2 c.... /snapmount/testfile1
Ve výstupu:
- „c“ na výstupu znamená, že obsah byl změněn.
- „+“ znamená, že do adresáře byly přidány nové soubory.
- „-“ znamená, že existují soubory, které byly smazány.
Pořídit více snímků a porovnat výstup
Vytvořil jsem několik testovacích snímků s několika přidanými soubory, několika odstraněnými soubory a několika změnami obsahu.
# 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 |
Následující výstup obsahuje seznam souborů, které byly přidány, upraveny a odstraněny.
# snapper -c snapconfig status 4..1 -.... /snapmount/a -.... /snapmount/b -.... /snapmount/c c.... /snapmount/testfile1 +.... /snapmount/testfile2
Zobrazit rozdíl mezi snímky
Chcete-li nyní zobrazit konkrétní rozdíl obsahu v souboru mezi snímkem č. 1 a snímkem č. 4, můžete použít následující příkaz.
# 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
Výstup je v typickém formátu výstupu příkazu diff.
Obnovení konkrétního souboru ze snímku
Jakmile uvidíte rozdíly mezi snímky a víte, jaký konkrétní soubor chcete obnovit, můžete jej obnovit, jak je vysvětleno zde.
Před obnovením nemáme v tomto seznamu testovací soubor2.
# 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
Chcete-li například obnovit jeden soubor ze snímku, tj. /snapmount/testfile2 (soubor, který byl odstraněn) ze snímku č. 1, použijte níže uvedený příkaz:
# snapper -c snapconfig -v undochange 1..4 /snapmount/testfile2 create:1 modify:0 delete:0 creating /snapmount/testfile2
Po obnovení vidíme v seznamu testovací soubor2.
# 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
Obnovit všechny soubory ze snímku
Chcete-li obnovit všechny soubory ze snímku, proveďte následující:
Nyní obnovíme všechny soubory z konkrétního snímku. Všimněte si, jak to je smazání několika souborů, vytvoření souboru a úprava souboru.
# 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