Správa linuxového serveru: Jednoduché zálohování pomocí rdiff-backup
V tomto dílu vám ukáži, jak využít nástroje rdiff-backup k zálohování dat a k případné obnově.

Úvod
Nástroj rdiff-backup je napsaný v Pythonu, umí rozdílové zálohování a umí pracovat jak lokálně, tak vzdáleně. Unikátní vlastností tohoto nástroje je podoba zálohy. Nástroj totiž vytváří de facto „zrcadlový“ obraz původních dat, který uchovává v aktuální podobě, zatímco rozdíly si zaznamenává do speciálního adresáře. To znamená, že máte vždy k dispozici aktuální verze souborů přístupné přímo z cílového souborového systému, a to bez nutnosti použít nástroj rdiff-backup. K obnovení dat z poslední zálohy tak stačí pouhé překopírování. Oproti jiným nástrojům (např. duplicity) naopak rdiff-backup neumí ani kompresi dat, ani šifrování. Jediné, co se komprimuje, jsou samotné rozdíly.

Ačkoliv je rdiff-backup schopen pracovat vzdáleně, doporučuje se, je-li to možné, použít stejnou verzi nástroje na obou počítačích. V případě nesouladu verzí vypíše nástroj varování.

Rdiff-backup umí využívat přenosové pásmo podobně efektivně jako nástroj rsync (tomuto nástroji se věnuje článek Zálohuj svá data tolikrát, kolikrát je máš rád), takže při následných zálohách se vždy přenáší pouze rozdíly a nikoliv znovu veškerá data.

Archfs
Nasazení nástroje rdiff-backup může vhodně doplnit FUSE modul archfs, který umí připojit adresář se zálohami jako souborový systém, přes který je možné snadno prohlížet data jednotlivých záloh (ty jsou pak dostupné jako adresáře, jejichž název odpovídá datu pořízení). Bohužel tento FUSE modul není k dispozici v oficiálních repozitářích Debianu pro vydání Lenny ani Squeeze, který je momentálně na spadnutí. K dispozici je až ve větvi Sid (unstable), kterou ovšem rozhodně nelze doporučit k používání na serveru.

Místní záloha
Nejjednodušší příklad použití nástroje rdiff-backup je místní záloha, tzn. záloha v rámci jednoho počítače. V takovém případě je už z principu velmi vhodné zálohovat na jiné médium, než na kterém se nachází zdrojová data. Pokud by byla data k zálohování v adresáři /home/data a připojený externí disk v /mnt/extdisk, záloha by se provedla takto:

rdiff-backup /home/data /mnt/extdisk
Každé provedení tohoto příkazu způsobí aktualizaci souborů zálohy do stejného stavu jako ve zdrojovém adresáři, přičemž informace o rozdílech se ukládají do speciálního adresáře pojmenovaného rdiff-backup-data.

Ne vždy je ale žádoucí zálohovat veškerá data ve zdrojovém adresáři. Proto má nástroj rdiff-backup bohaté možnosti pro specifikaci dat, která nemají být zálohována ze zdrojového adresáře. Nejjednodušší metodou je použít parametr --exclude:

rdiff-backup --exclude /home/data/vyradit /home/data /mnt/extdisk
Všimněte si, že parametry a volby předcházejí specifikaci zdroje a cíle – toto pořadí je nutné dodržovat. Potřebujete-li vyřadit více souborů či adresářů, použijte parametr --exclude vícekrát za sebou:

rdiff-backup --exclude /home/data/vyradit1 --exclude /home/data/vyradit2 /home/data /mnt/extdisk
Možné je i vyřadit určité typy souborů, třeba zařízení (device files), symbolické linky, sokety apod., např. takto:

rdiff-backup --exclude-device-files /home/chroot /mnt/extdisk
Výše uvedený příkaz nebude zálohovat soubory zařízení (device files). Rdiff-backup nabízí řadu dalších možností filtrování souborů včetně regulárních výrazů. Ty naleznete popsané v manuálové stránce.

Vzdálená záloha
Vzdálené zálohování je řešeno prostřednictvím SSH. Jak již bylo řečeno, dalším předpokladem je dostupnost nástroje rdiff-backup na cílovém počítači, pokud možno ve stejné verzi jako na zdrojovém. Zálohování na vzdálený počítač pak může vypadat třeba takto:

rdiff-backup /home/data uzivatel@server::/cilovy/adresar
Problémem, na který můžete při vzdáleném zálohování narazit, je problém s metadaty souborů, tzn. s vlastnictvím a oprávněními. Dojde k tomu třeba v situaci, kdy zálohujete data vlastněná uživatelem, který na cílovém systému neexistuje, nebo třeba v situaci, kdy zálohujete data vlastněná uživatelem root, zatímco na cílový systém se hlásíte s právy obyčejného uživatele. Rdiff-backup si naštěstí metadata zapisuje zvlášť, takže pokud k obnově použijete právě tento nástroj, informace o vlastnictví a oprávněních se přenese korektně. Pokud byste ale obnovovali prostým překopírováním, data by se obnovila se špatnými právy, vlastníkem či skupinou.

Obnova dat
Pokud dojde k nějakému problému a potřebujete provést obnovu, můžete aktuální data rovnou zkopírovat (pozor ale na problém s metadaty souborů – viz výše) nebo použít příkaz níže, kde na pozici zdroje uvedete zálohu a na pozici cíle adresář, kam se mají data obnovit. Nutné je také specifikovat čas, ke kterému budou data ze záloh obnovena, pomocí parametru -r. Pokud vám stačí nejnovější data, můžete použít časovou značku now, takto:

rdiff-backup -r now uzivatel@server::/zaloha /tmp/obnova
Jelikož rdiff-backup provádí rozdílové zálohování, můžete obnovit i stav k určitému datu nebo stav k určité provedené záloze. Můžete také specifikovat relativní čas (např. stav před dvaceti dny), takto:

rdiff-backup -r 20D /zaloha /tmp/obnova
Stav k určitému datu můžete obnovit takto:

rdiff-backup -r 2010-12-30 /zaloha /tmp/obnova
Je také možné obnovit stav k určité provedené záloze, tzn. chcete-li obnovit stav k sedmé nejnovější záloze, použijete následující příkaz:

rdiff-backup -r 7B /zaloha /tmp/obnova
Vývojáři nástroje rdiff-backup se snaží, aby bylo jeho použití bezpečné. Proto vám tento nástroj standardně neumožní např. přepsat existující data při obnově či jiné potenciálně rizikové operace. Pokud jste si opravdu jisti, že chcete danou operaci provést, i když vás nástroj tímto způsobem varuje, můžete použít parametr --force.

Zajištění pravidelného zálohování
Abyste zajistili pravidelné zálohování, postačí přidat příslušný příkaz do cronu, popřípadě si vytvořit skript, přidat mu právo ke spuštění a umístit jej do vhodného adresáře (pro spouštění každý den by to byl adresář /etc/cron.daily). Pokud by v rámci běhu nástroje došlo k chybě, měl by cron informovat uživatele root mailem.

Čištění úložiště od starých záloh
Jelikož zálohovaná data se časem nahromadí a začnou zabírat nemalý prostor, je dobré vědět, jakým způsobem stará data bezpečně odmazat. K tomuto slouží parametr --remove-older-than, jehož hodnotou je buď absolutní, nebo relativní čas. Drobným problémem je, že v jednom volání nástroje rdiff-backup není možné současně mazat stará data a spolu s tím i zálohovat. Musíte tedy provádět čištění záloh zvlášť, třeba takto:

rdiff-backup /home/data /mnt/extdisk
rdiff-backup --remove-older-than 30D /mnt/zaloha
Kromě relativního nebo absolutního času je možné specifikovat i počet záloh, které se mají nechat, tzn. pokud chcete nechat pouze deset posledních záloh a ostatní smazat, použijete následující příkaz:

rdiff-backup --remove-older-than 10B /mnt/zaloha