Hlavní navigace

Bup: záloha velkých souborů

27. 1. 2012
Doba čtení: 5 minut

Sdílet

Na Rootu už jsme několikrát rozebírali nástroje pro zálohování, ale nikdy ještě ne nástroj, pro zálohování velkých souborů jako jsou obrazy virtuálních serverů nebo třeba velkých archivů. Dnes se na jeden takový podíváme. Je postaven na datovém formátu verzovacího systému GIT a s velkými soubory pracuje velmi rychle.

Pokud provozujete pár virtuálních serverů, určitě řešíte, jakým způsobem jejich obsah zálohovat. Víceméně máte dvě možnosti. Buď si vytvoříte nějaký snapshot daného stroje, ten připojíte a začnete zálohovat jeho obsah a nebo zazálohujete celé blokové zařízení (nebo soubor), kde se stroj nachází. V prvním případě se použije co možná nejméně prostoru na disku, v druhém se zase neřeší souborový systém, je možné zálohovat prakticky cokoli a v některých případech může být tato varianta rychlejší. Nechci Bup představit jen jako nástroj pro zálohování virtuálních strojů, ale právě na takovéto použití byl navržen.

Bup je nástroj napsaný v Pythonu a i když využívá formát verzovacího systému GIT, nechová se úplně jako GIT. Jeho vývojář, Avery Pennarun, práci s tímto formátem zjednodušil a celý proces přizpůsobil svému účelu. Výsledkem je rychlejší práce právě s velkými soubory. Bup používá algoritmus velmi podobný tomu v rsyncu, který rozdělí velké soubory na tzv. chunky. Ke každému chunku si spočítá hash, který při druhé a každé další záloze porovnává s předchozí verzí. Samozřejmě pak na disk uloží jenom ty chunky, které se od poslední verze změnily. Bup si poradí s velkým množstvím dat, podle jeho vývojáře se stovkami až tisíci GB.

Uživatel se nestará, která záloha je založená na které a prakticky ani není možné to zjistit. Bup se snaží využít co nejméně prostoru a i když se rozhodnete zazálohovat nějaká úplně jiná data už do existující zálohy, na chování Bupu to nic nemění a udělá vše proto, aby bylo na disku použito co nejméně místa. Teoreticky je možné obnovit i zálohy z nějakým způsobem poškozeného disku díky par2 redundanci. Zálohovat je možné i na vzdálený stroj přes integrovaný server. Pokud by náhodou při komunikaci došlo k nějakému problému, po jejím znovu navázání bude Bup pokračovat tam, kde skončil.

Bup zálohuje inkrementálně, ale nemusíte mít strach, že byste měli historii jen částečných dat. Všechna data se chovají jako plnohodnotné zálohy, jediný rozdíl je, že berou méně prostoru. Repositář je navíc možné připojit přes FUSE nebo ho zpřístupnit přes HTTP protokol a přistupovat k němu například přes klasický git. Bup je podle jeho vývojáře jednoduché rozšířit o další funkce. Je napsaný v Pythonu a některé části jsou v C, kvůli rychlosti.

Bohužel ne vše je u Bup ideální. I když se dostal do distribucí, vývojáři ho ještě neoznačili za stabilní a dokonce je u něj uvedeno, že nemusí ve vašem případě fungovat. Navíc mu chybí některé vlastnosti, které by pro někoho mohly být důležité.

Instalace

Jak jsem napsal výše, Bup se nachází v repositářích nejpoužívanějších distribucí jako je Debian nebo Ubuntu. V takovém případě postačí „apt-get install bup“. Že by byl Bup v dalších distribucích, se mi nepodařilo dostatečně potvrdit, takže v nejhorším budete muset sáhnout ke kompilaci.

git clone git://github.com/apenwarr/bup
cd bup
make
./bup 

První záloha

Máte-li Bup nainstalovaný, nezbývá než se pustit do první zálohy. Na GitHubu je použití velmi dobře popsané, takže se od toho nebudu moc vzdalovat. Bup pracuje s velkými soubory, takže není nic jednoduššího, než mu přehodit nějaký archiv.

# tar -cvf - /etc | bup split -n etc -vv 

V tomto příkladě pošleme konfiguraci systému uloženou v /etc jako archiv rourou přímo na standardní vstup Bupu. Parametr -vv u bup a -v u taru donutí oba nástroje, aby o sobě řekli co dělají. Tar vám zobrazí seznam zabalených souborů a Bup informace o velikosti archivu a času, který na jeho zálohou strávil. Data najdete v adresáři ~/.bup, což asi ne vždy vyhovuje, takže ho můžeme změnit pomocí parametru -d adresar/se/za­lohami. V příkladu si také všimněte názvu zálohy za parametrem -n. Druhou, už inkrementální zálohu, provedeme úplně stejně jako tu první. Bup sám pozná, zda už nějaká data pro porovnání k dispozici má nebo ne a automaticky řeší místo, pokud může.

Velmi důležitá vlastnost zálohovacích nástrojů je obnovení zálohovaných dat, což se provádí příkazem join.

# bup join etc | tar -xf - 

Po spuštění se vám v aktuálním adresáři objeví zálohovaná data v poslední verzi. Pokud potřebujete nějakou z předchozích verzí, použijte git k její identifikaci:

# GIT_DIR=~/.bup git log etc 

Ve vypsaném logu najdete data a časy jednotlivých záloh. Pokud se potřebujete vrátit například o pět záloh zpět, použijte:

# bup join etc~5 | tar -xf - 

Berte v úvahu, že číslování záloh začíná od nuly.

Důležitou vlastností je záloha na vzdálený stroj. Provedení takové zálohy je prakticky stejné jako v předchozím případě s tím rozdílem, že se použije parametr -r.

# tar -cvf - /etc | bup split -r misha:/home/cx/.bup -n etc2 -vv 

Komunikace probíhá přes SSH a serverová část je nahozena v rámci SSH spojení, takže není potřeba startovat nějakého daemona. Obnovení probíhá podobně.

# bup join -r misha:/home/cx/.bup etc2 | tar xf - 

Druhou možností zálohy je použití experimentálních příkazů index, save a restore.

# bup index -uv /etc
# bup save -n eth /etc 

Touto metodou se obejde použití taru. První řádek v příkladu vytvoří index (cache uložená v ~/.bup/bupindex) souborů, které budeme chtít zazálohovat. Druhý řádek provede samotnou zálohu. Tento způsob má své nevýhody, které vychází z nedokončené implementace. Soubory zálohované tímto způsobem například neponesou stejná metadata (datum vytvoření, práva, vlastníky a další) a vytváření indexu souborů je pomalejší, než když to necháte na taru. Obnovení se provádí pomocí restore.

# bup restore myetc/latest/ 

Tento řádek nakousl další příkaz nástroje Bup, a to je ls, kterým lze procházet zálohy vytvořené přes index a save.

# bup ls myetc/
2012-01-26-212633@
2012-01-26-214623@
latest@

# bup ls myetc/2012-01-26-214623/etc/
...
sane.d/
securetty
security/
sensors.d/
... 

Obnova třeba adresáře security se pak provede tímto způsobem:

root_podpora

# bup restore myetc/2012-01-26-214623/etc/security 

Při použití index a save je pak užitečný i integrovaný web server, který zpřístupní obsah přes web nebo podpora FUSE, přes kterou lze namountovat zálohy do souborového systému.

# bup fuse /mnt/bup
# bup web 

Shrnutí

Bup sice nikdy nedostal nálepku „stabilní“, ale dá se říct, že v praxi funguje dobře. Z GITu si vzal to nejlepší a jeho vývojář se snaží psát kritické části kódu v C, kvůli rychlosti. Jeho vývoj není tak bouřlivý jako na začátku, ale nejde o zapomenutý projekt. Možnost připojit zálohy přes FUSE včetně historie a nebo je prohlížet přes web je velmi komfortní, ale bohužel se neukládají metadata o souborech, což je v některých případech nepřekousnutelné. Na druhou stranu je pro velké soubory Bup nepřekonatelný, a když ho budete používat s tarem, udělá dobrou službu. Pokud se vám Bup líbí natolik, že byste do něj rádi přispěli, jeho zdrojové kódy najdete na GitHubu.

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

Autor článku

Adam Štrauch je redaktorem serveru Root.cz a svobodný software nasazuje jak na desktopech tak i na routerech a serverech. Ve svém volném čase se stará o komunitní síť, ve které je již přes 100 členů.