Hlavní navigace

PC-BSD: způsoby a možnosti zálohování

15. 7. 2013
Doba čtení: 5 minut

Sdílet

Dnešní a další jeden až dva díly se v našem dlouhém seriálu o PC-BSD budeme poměrně podrobně věnovat možnostem a způsobům zálohování v tomto operačním systému. Něco z toho bude v přímé souvislosti se systémem, něco zase pro změnu obecné pro ZFS a něco úplně obecné i pro další *BSD a linuxové systémy.

Na systém zálohování desktopu se můžeme podívat z různých pohledů a hledisek. Je asi dost těžké říct, co je úplně správné a nejlepší. Co je ale úplně jednoduché a jasné? Pamatujte si: Nejhorší je nezálohovat nikdy a vůbec nic!

Zvolený systém zálohování závisí na několika věcech jako je HW konfigurace, priority uživatelských dat, způsob provozu stroje a některé další. Abych zde nevedl příliš teoretické úvahy, nastíním tok svých myšlenek při nastavení systému zálohování.

– budu zálohovat tři různé bloky dat: kompletní HOME, uživatelská data v HOME a exportované jaily

– na zálohu nebudu používat žádné komplexní a náročné aplikace kromě jiného i proto, že mi stroj neběží 24 hodin denně a není nutné ho zatěžovat nějakým složitým zálohovacím softwarem

– budu se maximálně snažit využít nástroje, které mi nabízí samotný systém a instalovat minimum dalších aplikací

– zálohy se budou ukládat v první řadě na interní diskový prostor a následně potom na externí pevný disk

Zálohování kompletního HOME – interní

Pro zálohy kompletního HOME se bude využívat vlastností ZFS – vytváření a odesílání snapshotů. V první fázi se budou snapshoty vytvářet každý týden včetně jejich odeslání do komprimovaného souboru ve vyhrazeném interním úložišti.

Pro interní uložení všech plánovaných zálohy se vytvoří dataset zalohy. Je nutné vytvořit dataset pomocí nástrojů ZFS a ne jenom adresář třeba prostřednictvím správce souborů. Je to kvůli nastavení přípojného bodu, který je nutný pro systém snapshotů.

Aby nebylo nutné se k tomu vracet později, popíšu na tomto místě vytvoření všech zálohovacích úložišť. Jako první se vytvoří základní dataset:

# sudo zfs create tank1/zalohy

# zfs list
NAME                                                    USED    AVAIL  REFER  MOUNTPOINT
tank1/zalohy                                       59,2G   708G    209K      legacy

Pro uložení konkrétních bloků záloh se vytvoří tři datasety:

– backup – zálohy uživatelských dat

– jails – zálohy exportovaných souborů WDN

– snaps – zálohy souborů se snapshoty kompletního HOME

Toto se provede následujícími příkazy včetně nastavení přípojných bodů:

# sudo zfs create -o mountpoint=/zalohy/snaps tank1/zalohy/snaps

# sudo zfs create -o mountpoint=/zalohy/backup tank1/zalohy/backup

# sudo zfs create -o mountpoint=/zalohy/jails tank1/zalohy/jails

Výsledek je zde (aby nebyla mýlka, už jsou zde uloženy některé zálohy!):

# zfs list
NAME                USED   AVAIL  REFER  MOUNTPOINT
tank1/zalohy        61,1G   708G   209K     legacy
tank1/zalohy/backup 31,1G   708G   31,1G    /zalohy/backup
tank1/zalohy/jails  1,90G   708G   1,90G    /zalohy/jails
tank1/zalohy/snaps  28,1G   708G   28,1G    /zalohy/snaps

U žádného z uvedených datasetů není nutné měnit nastavená práva. Je to z toho důvodu, že se do nich budou ukládat soubory a adresáře, které vznikají pod administrátorem.

Vzhledem k tomu, že se jedná o zálohovací úložiště, bylo by asi vhodné uvažovat o nastavení některých dalších vlastností. Pro tento daný účel by se mohlo jednat o nastavení komprese a deduplikace datasetů. Já konkrétně zatím využiji pouze kompresi. Z deduplikace mám trochu obavy ohledně výkonu systému. Je samozřejmě možné využít a nastavit i další vlastnosti. Jejich přehled je vidět třeba na docs.oracle.com.

Komprimaci všech datasetů nastavíme pomocí příkazů:

# sudo zfs set compression=on tank1/zalohy/backup

# sudo zfs set compression=on tank1/zalohy/jails

# sudo zfs set compression=on tank1/zalohy/snaps

Základní volby jsou on a off (ve výchozím stavu on = lzjb). Ostatní volby jsou: lzjb, gzip, gzip[1–9] a zle. Celkové nastavení a konkrétní hodnoty parametrů vybraného datasetu je možné zjistit příkazem

# zfs get all tank1/zalohy/backup

Jeho výstup je v souboru zfs-get-all.txt. Pokud by nás zajímal jenom kompresní poměr, je příkaz následující:

# zfs get compressratio tank1/zalohy/backup
NAME                    PROPERTY       VALUE  SOURCE
tank1/zalohy/backup  compressratio      1.00x  -

Samotnou zálohu systému pomocí snapshotů můžeme rozdělit do tří kroků:

1. kontrola systému pomocí funkce scrub

2. vytvoření snaphotu

3. odeslání snaphotu

O scrubbingu jsem již psal, takže jenom připomenu doporučení, aby se prováděl na běžných „desktopových“ discích jednou týdně. To plně koresponduje s předpokládanou frekvencí vytváření a ukládání snapshotů HOME.

1. scrubbing

Pro spuštění akce jsem si vytvořil jednoduchý skript – viz soubor scrubit.txt.

Po jeho spuštění a zadání hesla roota se v terminálu zdánlivě nic neděje, ale operace probíhá. Kontrolu průběhu je možné provést pomocí příkazu:

# zpool status

Pokud scrubbing probíhá, ukazuje tento příkaz postup akce. Po jejím ukončení se výstup příkazu změní následovně (uvádím jenom první část výstupu bez přehledu disků):

pool: tank1
state: ONLINE
scan: scrub repaired 0 in 0h26m with 0 errors on Wed Jun 19 12:15:09 2013

Zatím jsem tuto operaci prováděl 3× a výsledky jsou následující: nebyla nalezena žádná chyba. Při prvním běhu byla velikost celého poolu 140 GB a doba trvání 26 minut (průměrná rychlost tedy cca 90 MB/s). Při druhém běhu byla velikost 329 GB, doba 50 min a rychlost 110 MB/s. Při třetím běhu byla velikost 379 GB, doba 56 min a rychlost 113 MB/s.

Průběh operace je možné kdykoliv zarazit příkazem

# sudo zpool scrub -s tank1

2. vytvoření snapshotu

Obecně lze snapshot vytvořit příkazem

# sudo zfs snapshot tank1/usr/home/vojtaj@snap-name

Pokud by byly v daném datasetu ještě nějaké další jako podadresáře, je lepší volit rekurzivní provedení:

# sudo zfs snapshot -r tank1/usr/home/vojtaj@snap-name

Přehled vytvořených snapshotů je možné vyvolat příkazem:

# zfs list -t snapshot
NAME                                                                    USED  AVAIL     REFER  MOUNTPOINT
tank1/usr/home/vojtaj@2013-06-19                                    339M      -         14,3G       -
tank1/usr/home/vojtaj@2013-06-23                                    502M      -         14,6G       -
tank1/usr/home/vojtaj@2013-07-01                                    125M      -         14,2G       -
tank1/usr/jails/.warden-template-9.1-RELEASE-amd64@clean    11,6K      -        399M        -

Jak je z předchozího výpisu zřejmé, velikost samotných snapshotů (USED) není v porovnání s celkovou velikostí datasetu (REFER) nijak závratná. Také jejich vytvoření je v podstatě okamžité.

Snapshot je běžným datasetem, takže je možné ho běžným způsobem odstranit:

# sudo zfs destroy tank1/usr/home/vojtaj@2013-06-23

Já jsem se konkrétně rozhodl při tvorbě snapshotů jako názvu použít časovou značku ve tvaru RRRR-MM-DD. Příkaz pak vypadá následovně:

# sudo zfs snapshot -r tank1/usr/home/vojtaj@`date +%Y-%m-%d`

Možná zbytečně, ale přesto raději pro jistotu upozorním: časová značka je uzavřena do obrácených apostrofů (na mojí klávesnici kombinace Pravý Alt + Tilda).

Kdo by chtěl, může samozřejmě dále rozšířit obdobným způsobem časovou značku o hodiny, minuty a vteřiny.

Více o vytváření a odstraňování snapshotů je na docs.oracle.com.

CS24_early

Se snapshoty je možné provádět kromě jiných ještě další dvě zajímavé operace – klonování a export/import. Pro můj případ nejsou klony zatím moc přínosné, takže jenom odkážu na jejich bližší popis.

V příštím dílu dokončím tuto část zálohování popisem exportu snapshotu do souborů a budu se věnovat zálohování uživatelských dat.

Byl pro vás článek přínosný?

Autor článku