PC-BSD: způsoby a možnosti zálohování (pokračování)

22. 7. 2013
Doba čtení: 6 minut

Sdílet

Ilustrační obrázek
Autor: Depositphotos – stori
Ilustrační obrázek
Nejen Linuxem živ je člověk a unixový svět je mnohem širší. V minulém díle našeho seriálu o operačním systému PC-BSD jsme skončili popisem vytváření snapshotů a dnes tuto část dokončím popisem exportu snapshotu do souboru. Následně se potom pustím do zálohování uživatelských dat z domovského adresáře.

Se snapshoty je možné rámci exportu a importu (nebo by bylo možná lepší definovat to jako odeslání a příjem) manipulovat pomocí příkazů send a recv. Je tak možné snapshot odeslat a přijmout na jiném poolu toho samého nebo jiného stroje či vzdáleného úložiště.. V rámci jednoho stroje a poolu je možné snapshot odeslat do souboru. Tuto operaci budu dále nazývat exportem snapshotu. Export bude také náš případ z dalšího důležitého důvodu – exportované soubory poolu se budou zálohovat na externí úložiště. Více o popsané manipulaci se snapshoty je možné zjistit např. na docs.oracle.com.

Pokud by se zvolil nejjednodušší způsob exportu snapshotu do souboru, vypadal by příkaz např. takto:

# sudo zfs send tank1/usr/home/vojtaj@2013-06-19 > /zalohy/snaps/snap.`date +%Y-%m-%d`

Vznikne tak soubor příslušného názvu a velikosti 14 359 MB. Na výpisu ze systému se ale ukáže trochu něco jiného:

# zfs list
NAME                         USED  AVAIL   REFER  MOUNTPOINT
tank1/zalohy                 11,9G    803G   209K   legacy
tank1/zalohy/backup          209K    803G   209K    /zalohy/backup
tank1/zalohy/snaps           11,9G   803G   11,9G   /zalohy/snaps

Pokud bychom si chtěli ověřit úspěšnost komprimace, tak je výsledek následující:

# sudo zfs get compressratio tank1/zalohy/snaps
NAME                    PROPERTY       VALUE  SOURCE
tank1/zalohy/snaps      compressratio     1.18x     -

Vzhledem k tomu, že se soubory s exportovanými snapshoty budou kopírovat na externí úložiště, je možné zvolit ještě jednu variantu a přímo je komprimovat. Tato operace je samozřejmě znatelně pomalejší než předchozí, ale má určitě svoje výhody:

# sudo zfs send tank1/usr/home/vojtaj@2013-06-19 | bzip2 > /zalohy/snaps/snap-`date +%Y-%m-%d`.bz2

Výsledná velikost souboru je 9 574 MB:

# zfs list
NAME                       USED  AVAIL  REFER   MOUNTPOINT
tank1/zalohy               9,35G   806G   209K      legacy
tank1/zalohy/backup        209K    806G   209K      /zalohy/backup
tank1/zalohy/snaps         9,35G   806G   9,35G     /zalohy/snaps

# sudo zfs get compressratio tank1/zalohy/snaps
NAME                    PROPERTY        VALUE  SOURCE
tank1/zalohy/snaps      compressratio   1.00x

Zálohy pomocí snapshotů HOME se budou provádět jednou týdně. Při této operaci je nutné brát v úvahu, že scrubbing a export snapshotu do komprimovaného souboru může trvat i několik hodin a samozřejmě velmi značně zatěžuje diskový systém. Je proto velmi vhodné operaci startovat v době, kdy se na stroji právě nepracuje.

Zatím nemám v plánu tuto část zálohy nějak automatizovat. Nebylo by to asi moc přínosné vzhledem k tomu, co bylo popsáno výše.

Kopírování souborů se snapshoty je pak už samo o sobě jednoduché a vzhledem k jejich velikosti docela rychlé.

Pro usnadnění práce v této oblasti zálohování jsem udělal dvě opatření: některá uživatelská data jsem přesunul mimo domovský adresář (upřesním v části o zálohách uživatelských dat) a pro operaci vytvoření a exportu snapshotu jsem vytvořil jednoduchý skript – viz soubor snapback.txt.

Zálohování uživatelských dat – interní

Pro zálohy uživatelských dat se bude využívat běžně dostupných aplikací, které jsou k tomuto účelu vhodné a dostupné přes balíčkovací systém. Jistě nemusím připomínat, že je k dispozici celá škála nástrojů od těch velmi rozsáhlých a sofistikovaných (Bacula, AMANDA apod.) až po ty velmi primitivní (cp, tar atd.).

Myslím si, že na jednom desktopu nemá smysl žádné „těžké“ řešení instalovat a používat. I tak je nabídka možností pořád dostatečně pestrá a každý si může vybrat. Abych to příliš nerozvíjel, tak jenom uvedu, že jsem zvolil dva typy záloh. Jedna ukládá komprimované rozdílové (podle časových rozmezí i úplné) zálohy vybraných uživatelských adresářů. Druhá provádí synchronizaci, nebo chcete-li, zrcadlení vybraných adresářů.

Pro každý z těchto typů vytvoříme příslušný dataset a nastavíme mu komprimaci:

# sudo zfs create -o mountpoint=/zalohy/backup/history tank1/zalohy/backup/history
# sudo zfs create -o mountpoint=/zalohy/backup/mirror tank1/zalohy/backup/mirror
# sudo zfs set compression=on tank1/zalohy/backup/history
# sudo zfs set compression=on tank1/zalohy/backup/mirror

Pro oba datasety se provede změna vlastníka na běžného uživatele, který spouští zálohovací operace.

Je asi zřejmé, že pro každý typ zálohy bude nutné použít jinou aplikaci. Já jsem konkrétně pro rozdílové zálohy vybral duplicity a pro synchronizaci unison (tedy konkrétně balík unison-nox11). K dispozici jsou verze 2.40.102 a devel 2.45.28. Při synchronizaci v rámci jednoho stroje není verzování žádný problém. Pokud by ale bylo vaším cílem to provádět na jiný stroj, je nutné na obou použít přesně stejnou verzi unisonu!

Pro rozdílové zálohy jsem vytvořil jednoduchý skript, který je založen na možnostech duplicity a provádí zálohu vybraných adresářů. Jeden příklad za všechny:

# duplicity –no-encryption --full-if-older-than=7D
/usr/home/vojtaj/Projekty           file:///zalohy/backup/history/projekty
>> /usr/home/vojtaj/.Duplicity/Projekty.log

Velký popis asi není třeba, takže letecky: žádné šifrování, pokud je poslední full záloha starší 7 dnů, udělá se full, jinak increment, zálohovaný adresář, záložní dataset, soubor, do kterého se ukládají logy – viz přílohu Projekty.log.

Pokud se instaluje a spustí aplikace unison, tak se vytvoří adresář $HOME/.unison. V něm je nebo se musí vytvořit soubor s příponou *.prf. Já tam mám konkrétně default.prf s tímto obsahem:

# Unison preferences file
 # Root directory
root=/usr/home/vojtaj/
root=/zalohy/backup/mirror/
 # Dirs
path=Apps
path=Develop
path=Dokumenty
path=Projekty
path=.mozilla
path=.thunderbird

batch=true
group=true
owner=true

Zase jenom krátký popis: synchronizované „domovské“ adresáře, synchronizované konkrétní adresáře (relativně k domovským), nastavení – na nic se neptat, zachovat původní vlastníky a skupiny souborů a adresářů.

Synchronizace se pak spustí příkazem

# unison default.prf

Výpis v terminálu je při běhu aplikace poměrně obsáhlý – ukázka je v příloze unison.txt. Kdo by chtěl třeba ukládat výpisy do souboru, může použít další nastavení:

silent=true  – vypisují se pouze chyby

Při každém běhu se také automaticky doplňují záznamy do souboru $HOME/unison.log. Příklad jeho obsahu obsahuje stejnojmenná příloha unison.log. V adresáři $HOME/.unison se při každém běhu aktualizují čtyři soubory s velmi „podivnými“ názvy… Uvedu zde pouze jejich hlavičky, které trochu objasní jejich účel a obsah:

Unison archive format 22
Archive for root //pcbsd-6584//zalohy/backup/mirror synchronizing roots //pcbsd-6584//usr/home/vojtaj, //pcbsd-6584//zalohy/backup/mirror
Written at 2013-07-02 at 14:53:47 - case sensitive mode

Unison archive format 22
Archive for root //pcbsd-6584//usr/home/vojtaj synchronizing roots //pcbsd-6584//usr/home/vojtaj, //pcbsd-6584//zalohy/backup/mirror
Written at 2013-07-02 at 14:53:47 - case sensitive mode
Unison fingerprint cache format 2

Unison fingerprint cache format 2

Jak jsem se již zmínil v předchozím odstavci, provedl jsem některé úpravy domovského adresáře a některé adresáře a soubory přemístil mimo něj. Jedná se hlavně o takové adresáře, jejichž obsah se příliš často nemění – fotografie a obrázky, hudební kolekce, veškeré instalační soubory včetně ISO obrazů a soubory virtuálních strojů. Tyto adresáře jsou umístěné do zvláštního adresáře, který se zálohuje na externí úložiště podle potřeby a v návaznosti na případné občasné změny. Tím se poměrně dramaticky zmenšila velikost HOME a samozřejmě i exportovaný soubor snapshotu. U těchto adresářů není také nutné provádět pravidelné zálohování ani zrcadlení.

Zálohy a zrcadlení uživatelských adresářů zatím probíhají v jednoduchém „automatickém“ režimu. Oba skripty se spouštějí při startu LXDE. V případě zrcadlení je prodleva při startu minimální. U zálohy záleží na tom, jestli probíhá pouze inkrementální (to trvá velmi krátce), a nebo full. Ta je potom samozřejmě mnohem delší.

Do budoucna bych chtěl v tomto režimu ponechat pouze zrcadlení pomocí aplikace unison.

Vytváření inkrementálních záloh bych chtěl rozšířit jednak směrem k častějšímu provádění (na při startu systému, ale v průběhu dne 2–4×) a také k lepší automatizaci.

Automatické provádění úloh je v PC-BSD možné dvojím způsobem. K dispozici je samozřejmě obvyklá aplikace cron (či anacron) a crontab pro běžného uživatele nebo roota.

hacking_tip

Kromě toho je k dispozici ještě systém periodic, který je určen k provádění shellových skriptů.

V posledním díle o zálohování se budu trochu podrobněji věnovat možnostem využití systémů cron a periodic a také se zaměřím na zálohování jailů.

Autor článku