Pachy: malý nástroj pro velké zálohy

Adam Štrauch 9. 3. 2012

O zálohování už jsme vydali nejeden článek a vždy jsme se zabývali nějakou utilitkou, která ho umí udělat příjemnější. Dnešek nebude výjimkou a podíváme se na malou utilitku, která dokáže nahradit třeba rsnapshot nebo rdiff-backup. Jmenuje se pachy, pracuje s rsyncem a udržuje historii změn na souborech.

Linux má nespočet programů, které pomáhají se zálohováním, ale i tak není snadné si z nich vybrat. Může to být Bacula, která se k zálohování staví komplexně nebo třeba rdiff-backup, který pomáhá se synchronizací adresářů a udržuje historii. Opomíjet bychom neměli ani rsnapshot, o kterém jsme psali nedávno v článku Zálohujeme s rsnapshot. Další nástroje najdete například na Archlinux wiki a věřte, že tím seznam nekončí. Každý nástroj něčím vyniká, má své výhody i nevýhody a není vždy jednoznačné, který použít.

Od zálohování můžeme čekat různé vlastnosti. Máme třeba několik obrazů virtuálních strojů, které by chtěly občas někam uložit a nebo adresář s obrovským množstvím souborů třeba s emaily. Navíc někdy je potřeba zálohovat někam na vzdálený stroj a někdy je k dispozici jen lokální disk. Obojí má své hranice, se kterými musí admin počítat a podle toho se rozhodnete pro jeden či druhý nástroj. Měl by se hlavně dívat na faktory jako kolik dat bude mít uloženo, jak hluboko do historie chce jít, kde budou data přístupná, jaké je šance, že se záloha poškodí a hlavně jak je obnoví, aby to netrvalo zbytečně dlouho. K tomu je ještě potřeba každý den proces zálohování sledovat, nejlépe automaticky a řešit promtně vzniklé problémy. Není nic lepšího než přijít o data a po slavnostním otevření zálohy zjistit, že žádná není, protože zálohovací proces už 14 dní stojí každý den na stejné chybě.

Ale to už možná trochu odbočujeme. Dnes chci psát o nástroji s názvem Pachy. Je napsaný v Pythonu a funkčností dokáže nahradit takové molochy jako rdiff-backup nebo rsnapshot. Pythoní vývojáři mají zvláštní smysl pro pojmenování svých výtvorů a zatímco nedávno zmiňovaný Bup měl svůj název hlavně proto, že byl volný, pachy je zkráceně pachyderm, což je v překladu tlustokožec.

Na pachy jsem narazil, když jsem hledal náhradu za rdiff-backup, který se k 80 GB dat začal stavět s odporem. Pachy ho v tomto úkolu dokázal bez problémů nahradit. Autorem je Bas Westerbaan a když se podíváte na GitHub, tak zjistíte, že to není nic jiného než wrapper pro programy rsync a xdelta3. Rsync je v unixových systémech již ověřená utilita a spousta zálohovacích nástrojů ji používá pro stahování jen změněných dat. Xdelta3 je nástroj, který porovnává dva binární soubory a umí vytvořit rozdílový soubor podobný tomu, co dává utilitka diff. Formát pro ukládání rozdílů je VCDIFF, jehož popis najdete v RFC3284. Díky tomu, že je pachy pouze wrapper k těmto dvěma nástrojům, mají jeho zdrojové kódy méně jak 200 řádků (rdiff-backup je 66× větší).

Instalace

Pokud vás pachy zaujalo, tak pro instalaci budete potřebovat několik balíčků. Jde o docela čerstvý nástroj, má i nějaké mouchy, ale hlavně se ještě nedostal snad do žádné distribuce. Proto je instalace trochu komplikovanější. Nejprve je potřeba se postarat o závislosti. Ty jsou:

  • xz-utils
  • rsync
  • xdelta3
  • python-pip

Pachy funguje jen s Pythonem verze 2.x, takže pozor na distribuce, které už jako výchozí používají Python 3. Pokud máte vyřešené závislosti, použijte:

# pip install pachy 

Použití

Pachy dokáže zálohovat i data umístěná na vzdáleném serveru díky podpoře SSH a stejně jako další nástroje založené na rsyncu, drží lokální kopii dat, ke které vytváří rozdíly zpět do historie. Adresářovou strukturu se zálohami si nejlépe ukážeme na příkladu.

# pachy /etc /mnt/backups/ 

V adresáři backups nyní máme adresáře deltas a mirror, kde v adresáři mirror najdeme poslední verzi zálohovaných dat a v adresáři deltas zabalené rozdílové soubory, které z aktuálního mirror udělají jeden z předchozích mirrorů. Pachy při každé záloze spustí rsync, stáhne pomocí něj změněné soubory a uloží si je bokem do adresáře pile. Potom tyto soubory porovná s mirrorem a pomocí xdelta3 vytvoří rozdílové soubory, které obsahují jen ty části souborů, které se skutečně změnily a uloží je do adresáře deltas. Pokud dojde ke smazání nějakého souboru, bude tento soubor uložen celý. Pokud běží pachy pod rootem, drží se zálohované soubory svá meta data a tak je možné je obnovit opravdu jedna ku jedné se vším všudy.

Pokud se data nacházejí na vzdáleném serveru, probíhá záloha podobně, jen se uvede adresa vzdáleného serveru.

# pachy muj_server:/etc /mnt/backups/ 

Tím zazálohujeme adresář etc na serveru muj_server. V tomto případě doporučuji používat SSH klíče a konfigurační soubor ~/.ssh/config, kde je možné nastavit všechny parametry přenosu a předat pachy jenom identifikátor serveru.

Host muj_server
  HostName 1.2.3.4
  User root
  Port 22
  Compression yes 

Detaily k tomuto konfiguračnímu souboru najdete v manuálové stránce ssh.

$ man ssh_config 

Obnova

Jak jsem řekl, důležitá je i obnova dat a je to prakticky to první, co by mělo správného admina zajímat, když vytvoří nějakou zálohu. U pachy to platí dvojnásob, protože obnova nemusí být úplně triviální a možná bude vyžadovat i nějaké skriptovací schopnosti. Určitě si ji vyzkoušejte ještě předtím, než ji budete skutečně potřebovat. Předejdete tím nepříjemným situacím. V pachy je podoba dat z poslední záloha dostupná v adresáři mirror a tak si ho stačí otevřít. Bohužel, uživatel, kterému data zálohujete, se ne vždy ozve hned jak o data přijde a ani vy si nemusíte hned uvědomit, že je něco špatně. Proto tu máme díky historii vytvořenou pomocí xdelta3 a můžeme z ní vytvořit jeden z předchozích stavů vybraného souboru. Udělal jsem si tedy pár pokusných záloh adresáře etc, kde jsem občas něco upravil a zazálohoval znovu. Konkrétně se změny týkají souboru /etc/change2/tes­t, kde jsem uložil řetězec test a k němu číslo. Měl bych mít celkem tři zálohy, kde se hodnota mění od test1 po test3 a test3 je aktuální verze, kterou můžu najít v mirror.

Pokud chci zjistit, jak na tom byl soubor /etc/change2/test o dvě zálohy zpět, vylistuju si seznam rozdílových archivů:

-rw-r--r-- 1 root root 260 2012-03-08 22:01 2012-03-07@22h01.33.tar.xz
-rw-r--r-- 1 root root 264 2012-03-08 22:02 2012-03-07@22h02.34.tar.xz
-rw-r--r-- 1 root root 252 2012-03-08 22:03 2012-03-07@22h03.08.tar.xz
-rw-r--r-- 1 root root 252 2012-03-08 22:03 2012-03-07@22h03.12.tar.xz
-rw-r--r-- 1 root root 252 2012-03-08 22:03 2012-03-07@22h03.42.tar.xz 

Zjistím, že dvě zálohy zpět se nachází archiv 2012–03–07@22h03.12.tar­.xz, ale abych se k němu dostal, musím ještě použít 2012–03–07@22h03.42.tar­.xz. Rozbalím tedy ten:

tar xf backups/deltas/2012-03-07@22h03.42.tar.xz 

A v aktuálním adresáři se mi objeví adresáře deleted a changed, ve kterých najdu smazané soubory a nebo rozdíly ke změněným souborům. Abych zjistil co se nacházelo v /etc/change2/tes­t, aplikuji uložený patch pomocí xdelta3:

$ xdelta3 -d -s backups/mirror/change2/test changed/change2/test.xdelta3 test.restore
$ cat test.restore
test2 

Stejný postup opakuji pro 2012–03–07@22h03.12.tar­.xz, ale místo souboru z aktuální podoby dat použiju test.restore.

Shrnutí

Obnova dat z předchozích záloh není úplně triviální, ale pachy je mladý nástroj a jeho vývojář do něj ještě ledasco doplní. Navíc jde o vcelku krátký a jednoduchý kód a není složité ho vylepšit kromě obnovy i o další funkce. Samotný způsob zálohy je velmi jednoduchý, je postaven na spolehlivém programu rsync a díky xdelta3 je velikost rozdílových souborů minimalizována.

Našli jste v článku chybu?
120na80.cz: Tipy pro odvodnění organismu

Tipy pro odvodnění organismu

DigiZone.cz: Skylink v 1. polovině srpna ukončí 12 207

Skylink v 1. polovině srpna ukončí 12 207

Měšec.cz: Kurzy platebních karet: vyplatí se platit? (TEST)

Kurzy platebních karet: vyplatí se platit? (TEST)

Měšec.cz: Do ostravské MHD bez jízdenky. Stačí vaše karta

Do ostravské MHD bez jízdenky. Stačí vaše karta

Měšec.cz: Investice do drahých kovů - znáte základní chyby?

Investice do drahých kovů - znáte základní chyby?

Lupa.cz: Největší torrentový web KickassTorrents padl

Největší torrentový web KickassTorrents padl

Lupa.cz: Vodafone umí volání přes Wi-Fi. Z ciziny jako v ČR

Vodafone umí volání přes Wi-Fi. Z ciziny jako v ČR

Vitalia.cz: Sobotní masakr žrádla, chlastu a zábavy

Sobotní masakr žrádla, chlastu a zábavy

Měšec.cz: TEST: Vyzkoušeli jsme pražské taxikáře

TEST: Vyzkoušeli jsme pražské taxikáře

Lupa.cz: EU začala prověřovat bezpečnost open-source

EU začala prověřovat bezpečnost open-source

Vitalia.cz: Petr Koukal: Až rakovina mi zkvalitnila život

Petr Koukal: Až rakovina mi zkvalitnila život

DigiZone.cz: Markíza HD a Dajto? U Digi TV asi minulost

Markíza HD a Dajto? U Digi TV asi minulost

DigiZone.cz: Loewe Subwoofer 300 pro televizory

Loewe Subwoofer 300 pro televizory

Měšec.cz: Cool karta: recenze předplacenky

Cool karta: recenze předplacenky

Podnikatel.cz: Fotogalerie: Jesenka už má skoro 50 let

Fotogalerie: Jesenka už má skoro 50 let

DigiZone.cz: Hra o trůny: natáčení 7. řady posunuto

Hra o trůny: natáčení 7. řady posunuto

Podnikatel.cz: Rozhodnuto! Pracující senior penzi nezdaní

Rozhodnuto! Pracující senior penzi nezdaní

120na80.cz: Jaké plavecké pomůcky vaše dítě ochrání?

Jaké plavecké pomůcky vaše dítě ochrání?

Podnikatel.cz: Používají čárové kódy, vyhledávače je mají radši

Používají čárové kódy, vyhledávače je mají radši

Podnikatel.cz: Český zákazník nakupuje v čínských e-shopech

Český zákazník nakupuje v čínských e-shopech