Záloha dat pomocí rdiff-backup

27. 11. 2008
Doba čtení: 6 minut

Sdílet

Problematika záloh by měla zajímat každého uživatele, který nechce přijít o svá data. Ať už používáte pro zálohy libovolné médium, určitě potřebujete šikovný nástroj, který zajistí nejdůležitější části zálohovacích operací. Představíme si rdiff-backup, který umí zajímavé věci jako třeba cestováni v čase.

Říká se, že na počítačích bývají tím nejcennějším data. Přijít byť jen o několikadenní práci není žádný med, natož pokud bychom ztratili například rukopis knihy nebo podobně rozsáhlý dokument. Zálohy proto patří k základním činnostem, které bychom měli na svém počítači provádět. Pro správce serverů to platí samozřejmě dvojnásob.

Existuje mnoho způsobů, jak zálohovat, leckdy stačí prostě zkopírovat nejdůležitější adresáře na jiný disk, vypálit na DVD či nahrát na jiný počítač. Při častějším zálohování bychom uvítali automatizaci této činnosti a některé další zajímavé funkce. Jednou z podobných aplikací je rdiff-backup.

O co jde?

Samozřejmě o zálohování a vše, co s ním souvisí. Pokud bychom ale měli charakterizovat rdiff-backup jednou větou, pak by to asi byla věta podobná této: Zálohovací utilita pro plně automatizované inkrementální zálohy, která dokáže rekonstruovat starší zálohy vytvořené kdykoliv v minulosti.

Možnost zpětného obnovení starších záloh je samozřejmě naprosto klíčová a bez ní se i s kvalitním zálohovacím plánem můžeme dostat do potíží. Představme si modelovou situaci: Píšete diplomovou práci a po několika týdnech zjistíte, že se vám podařilo někdy dříve smazat prvních třicet stran textu, které už v souboru nemáte. S hrůzou zjišťujete, že v zálohách už máte verzi bez zmíněných třiceti stran, které jsou definitivně ztraceny.

Tento problém elegantně řeší právě rdiff-backup. Mezi jeho schopnosti totiž patří také možnost obnovit konkrétní soubory či celou zálohu v podobě, v jaké byla v libovolnou dobu v minulosti, pokud jsme v té době už samozřejmě zálohy pořizovali. Ve výše zmíněné situaci s poškozenou diplomovou prací by stačilo programu říct, aby ze záloh obnovil soubor v takovém stavu, v jakém byl řekněme před 50 dny.

Jak to funguje?

Utilita rdiff-backup je vytvořená v jazyce Python a ke svému běhu využívá program rsync, o kterém jsme nedávno přinesli podrobný článek. Z tohoto faktu plynou základní vlastnosti celé zálohovací utility:

  • kopíruje soubory lokálně či po síti (ssh)
  • přenáší jen změny v souborech
  • zachovává práva souborů

Navíc ale přidává další funkce

  • přenášené patche (diff) ukládá
  • zachovává práva i na médiích, která to neumožňují
  • umožňuje obnovit i smazané soubory
  • vede záznamy a statistiky o zálohách

Z uživatelského hlediska se tedy jedná o rsync, který vytvářené rozdílové soubory nejen na „druhé straně“ aplikuje na zálohované soubory, ale zároveň si je ponechá komprimované v podadresáři rdiff-backup-data. Kromě toto tam ukládá i zmíněné statistiky, případně informace o právech na souborových systémech, které tyto informace nedokáží udržet samy od sebe (například při zálohování na flashdisk s FAT).

Z hlediska zálohování je podstatné, že rdiff-backup dokáže obnovit i smazaný soubor. Ten sice po spuštění dalšího kola zálohování z našeho média zmizí také, ale v adresáři programu zůstanou jeho data uložena. Jsme tedy schopni kdykoliv obnovit i tohoto „ducha“, který už reálně nikde v celku neexistuje.

Jdeme zálohovat

Pokud vás rdiff-backup zaujal, můžete jej nainstalovat ze své distribuce, určitě jej budete mít v příslušných repositářích. Z výše uvedených informací plynou i závislosti: rsync a Python. Pokud jste nainstalovali, můžete rovnou zálohovat:

$ rdiff-backup dulezite/ /mnt/flash/zaloha 

Provede samozřejmě zálohu adresáře dulezite na připojený flashdisk do adresáře zaloha. Tento příkaz můžeme naprosto libovolně opakovat. Program sám zajistí prověření rozdílů a přehraje jen to, co jsme mezi zálohami změnili.

Je pochopitelné, že adresář se zálohami bude postupně narůstat, jak do něj bude utilita připisovat rozdílové diffy. Jak moc bude narůstat záleží především na tom, jak intenzivně se zálohovanými daty pracujeme a jak často provádíme jejich zálohu. Část zpětných dat je samozřejmě možno pohodlně odstranit, jak si ukážeme dále.

Velmi často je potřeba ze zálohy vyjmout konkrétní soubory či adresáře, které pro nás nejsou tak důležité a zbytečně by na médiu zabíraly cenné místo. Slouží k tomu parametr  --exclude.

$ rdiff-backup /home/petr /mnt/zaloha --exclude /home/petr/video /home/petr/src 

Tento příkaz odzálohuje můj domovský adresář, ale vynechá jeho podadresáře video a src. Existuje také parametr --include, který naopak vynutí zálohu konkrétního obsahu. Obě možnosti lze kombinovat:

$ rdiff-backup data /mnt/zaloha --exclude data/videa --include data/videa/rodina 

Vynechali jsme adresář videa, kde máme nedůležité filmečky. Zároveň ale nevynecháváme podadresář rodina s rodinnými záznamy, které chceme pochopitelně zachovat.

Obnovujeme ze záloh

Už umíme vytvářet zálohy, teď nás ale bude zajímat i opačný postup – totiž jak data zase dostat zpět. V případě, že jsme si právě smazali některé soubory a záloha mezi tím neproběhla, stačí jednoduše ze záložního zdroje zkopírovat příslušná data tak, jak jste zvyklí. Program přeci vytváří i plnohodnotný mirroring dat.

Pokud chceme obnovit starší zálohu, je situace o trochu složitější a už budeme muset využít služby utility rdiff-backup. Použijeme přitom parametr -r (jako restore), který určuje, že teď budeme obnovovat místo zálohování. Základní použití je snadné:

$ rdiff-backup -r now /mnt/zaloha /home/petr/obnova 

Příkaz způsobí obnovení posledního stavu do adresáře obnova. Povšimněte si časového údaje now, který určuje současnost. Využít je možno mnoho různých údajů včetně přípon určujících následující období:

  • s – sekundy
  • m – minuty
  • h – hodiny
  • D – dny
  • W – týdny
  • M – měsíce
  • Y – roky

Příklady časových údajů:

  • 20m – před dvaceti minutami
  • 3W – před třemi týdny
  • 3M21D6h18m – před třemi měsíci, jednadvaceti dny, šesti hodinami…
  • konkrétní datum a čas: 2008–04–26T12:37:08

Takto můžeme libovolně určit časový bod, ke kterému chceme obnovu provést. Samozřejmě je pravděpodobné, že v onom přesném historickém bodě jste zálohu neprováděli. V tom případě bude vybrána nejbližší předcházející záloha. Pokud tedy zálohujete každé pondělí a ve středu zvolíte -r 1W, pak to sice značí minulou středu, ale bude obnovena záloha z minulého pondělí.

Stejně tak je možno vybrat ze zálohy jediný soubor, nemusíte obnovovat celou strukturu. Stačí jednoduše zvolit konkrétní objekt na zálohovacím médiu:

$ rdiff-backup -r 2W /mnt/zaloha/diplomka.odt /home/petr/diplomka.odt 

Stejně tak je možno zvolit konkrétní diff a program z něj pozná, ke kterému souboru a časovému údaji patří a automaticky provede příslušnou obnovu:

$ rdiff-backup zaloha/rdiff-backup-data/increments/soubor.2008-11-22T09:07:41+01:00.snapshot.gz 

Vzdálená práce

Všechny zde zmíněné operace je možno provádět nejen lokálně (jak bylo ukázáno), ale také pomocí ssh spojení na vzdáleném počítači. Na něm musí být také nainstalován rdiff-backup, aby spolu mohly obě strany komunikovat. Nemá smysl všechny příkazy opakovat, syntaxe je stejná, jediné, co se změní, je určení jedné (nebo i obou) z cest. Konkrétní příklad:

$ rdiff-backup petr@www.root.cz::/var/www /mnt/zaloha/web 

Tímto jednoduše odzálohujeme náš web k nám na lokální zálohovací médium. Samozřejmě budeme dotázání na heslo a opět se přenášejí jen změny, při příští záloze již vše proběhne o poznání rychleji. Naprosto stejně je možno zálohovat v opačném směru:

$ rdiff-backup /home/petr petr@www.root.cz::/home/petr/zaloha 

Další drobty

Už jsem zmínil, že záloha jako celek postupně bobtná, protože v ní přibývá rozdílových souborů. Existuje jednoduchý způsob, jak se můžete starších záloh zbavit. Můžete tak například odstranit informace o zálohách starších než dva měsíce:

$ rdiff-backup --remove-older-than 2M --force /mnt/zaloha 

Od verze 0.13.1 existuje možnost určit konkrétní počet historických záloh, které mají být zachovány, a to pomocí přípony B (jako backups). Chceme-li si ponechat posledních 10 záloh, stačí tedy zvolit:

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

Užitečná je také možnost zobrazit časové údaje o konkrétním souboru. To se hodí v případě, že potřebujete obnovit soubor, ale netušíte, kdy jste zálohy prováděli a jaké možnosti tedy máte.

bitcoin_skoleni

$ rdiff-backup -l zaloha/diplomka.odt
Found 2 increments:
    diplomka.odt.2008-11-23T09:07:41+01:00.missing   Wed Nov 23 09:07:41 2008
    diplomka.odt.2008-11-23T09:19:49+01:00.snapshot.gz   Wed Nov 23 09:19:49 2008
Current mirror: Wed Nov 23 14:28:00 2008 

Kromě toho je možné získávat další údaje jako například seznam změn od určitého časového bodu. Chceme například vědět, jak se záloha změnila za posledních pět dní:

$ rdiff-backup --list-changed-since 5D zaloha/
changed .
diplomka.odt     clanek.txt
deleted fotka.jpeg 

Závěrem

Zmínil jsem jen stěžejní možnosti programu rdiff-backup. Článek rozhodně není vyčerpávající, ale zde uvedené příklady by vám měly stačit k běžnému zálohování a ochraně dat. Další informace naleznete v manuálové stránce, případně v dokumentaci na domovské stránce projektu.

Kam zálohujete?

Autor článku

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.