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ě.
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.
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.
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á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.
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
.
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.
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