Zálohujeme s rsnapshot

21. 2. 2012
Doba čtení: 4 minuty

Sdílet

Každý z nás nejspíš někdy slyšel o zálohovacím nástroji rsync, my si dnes ukážeme práci s programem rsnapshot, který ke svému běhu rsync používá, ale zároveň umí i archivovat. Až se vám tedy někdy stane, že budete potřebovat soubor, který jste před 14 dny smazali, s rsnapshotem nebudete mít problém.

Představení

Rsnapshot je zálohovací utilita nejen pro automatizované inkrementální zálohování, která nám umožní obnovit daný soubor nebo i celý operační systém, který jsme zálohovali kdykoliv v minulosti.

Takováto vlastnost se může hodit třeba ve chvíli, když vás zákazník osloví, že si před týdnem smazal soubor a teď ho nutně potřebuje. Vám pak stačí ho jen správným nástrojem obnovit.

Co se skrývá pod kapotou

Rsnapshot je více méně sada skriptů napsaných v jazyce Perl, které využívají nástroje: rsync, OpenSSH, GNU cp, GNU du a BSD logger. Jak už bylo řečeno, rsnapshot používá rsync, stejně tedy jako u zálohy samotným rsyncem se při zálohování dat přenáší pouze rozdíly mezi soubory. Archivace je realizována za pomocí hardlinků, což se dá pokládat za základní výhodu i nevýhodu. Výhoda je, že se díky tomu přístupu šetří místo na disku a nevýhodou může být zpomalení filesystému.

Nastavujeme a lokálně zálohujeme

Rsnapshot je součástí většiny linuxových distribucí, viz výčet na domovské stránce projektu, podle něhož je testován na systémech Debian, Red Hat, Fedora, Solaris, Mac OS X, FreeBSD, OpenBSD, NetBSD a IRIX. Stačí tedy nainstalovat balíček rsnapshot cestou, kterou nabízí náš systém a můžeme směle nastavovat.

Z konfiguračního souboru /etc/rsnapshot.conf nás budou zajímat zejména tyto parametry:

interval    hourly  6
interval    daily   7
interval    weekly  4
interval    monthly 3
snapshot_root   /mnt/backup/
backup  /etc/   localhost/
backup  /home/  localhost/
backup  /var/   localhost/
exclude /var/log/ localhost/

Popis parametrů

  • interval – první hodnota určuje název adresáře a zároveň spouštěcí parametr, druhá hodnota říká, kolik záloh chceme nechat, hodnoty jsou počítané od nuly
  • snapshot_root – adresář, do kterého se bude zálohovat
  • backup – adresář, který chceme zálohovat v našem případě /etc/, druhý parametr udává název adresáře za snapshot_root
  • exclude – vynechané adresáře, opačně funguje parametr include

Pří zadávání hodnot do konfiguračního souboru dbejte na to, aby „volný prostor“ mezi backup /etc/ localhost/ nebyla mezera, ale tabulátor. Pro rsnapshot to totiž není totéž. Správnost syntaxe se dá ověřit příkazem: rsnapshot configtest. Když vám tento příkaz vypíše: „Syntax OK“, zbývá už jen pustit rsnapshot v testovacím režimu rsnapshot -t hourly , který jen vypíše, co zamýšlí dělat.

Další věc, na které byste si mohli vylámat zuby, jsou intervaly a jejich pořadí. Pokud máte nastavený interval hourly jako první a zavoláte kupříkladu daily, nic se nestane a při spuštění stejného příkazu s testovacím parametrem -t vám rsnapshot odpoví:

/mnt/backup/localhost/hourly.6 not present (yet), nothing to copy

Což se stane, protože rsnapshot počítá s tím, že už proběhly všechny předešlé zálohy hourly a chce z nich většinu nalinkovat a přenášet jen to, co se změnilo. Pokud tedy chcete používat kupříkladu jen denní zálohy, bude potřeba interval hourly v konfiguraci zakomentovat.

Když se nám vše povedlo, stačí spustit samotnou zálohu: vybereme si třeba interval hourly: rsnapshot hourly, tedy naše záloha bude v /mnt/backup/localhost/, tato cesta vznikla složením parametrů: snapshot_root a backup. Protože u intervalu hourly máme parametr 7, budou nám vznikat takové adresáře se zálohami:

hourly.0  hourly.1  hourly.2  hourly.3  hourly.4  hourly.5  hourly.6

Při osmé a další záloze se bude archiv automaticky promazávat, nejmladší záloha je vždy označena nulou.

Vzdálené zálohování přes SSH

Protože jsme si v úvodu uvedli modelovou situaci se zálohou serveru, slušelo by se teď ukázat, jak se taková záloha provádí. Rsnapshot funguje vzdáleně přes SSH, pro automatizované zálohování je potřeba mít vytvořenou dvojici SSH klíčů, o jejichž tvorbě jsme už psali v rámci seriálu o OpenSSH. Co se týče konfigurace rsnapshotu, zde stačí odkomentovat a nastavit tyto parametry:

cmd_ssh /usr/bin/ssh
ssh_args        -p 22 -i /cesta/k/ssh/klici

Aby se to nepletlo, mezi 22 a -i je mezera a nikoliv tabulátor. Nyní můžeme opět zavolat naší trojici příkazů: rsnapshot configtest, rsnapshot -t hourly, rsnapshot hourly a máme zálohováno.

Chyby a možné problémy

Zálohování jsem testoval na Fedoře 16 a na CentOS 6. Na Fedoře jsem se s žádným problémem nesetkal, ale CentOS mi při příkazu rsnapshot configtest vyhazoval chybu:

ERROR: /etc/rsnapshot.conf on line 117:
ERROR: logfile /var/log/rsnapshot

Řešení bylo naštěstí triviální, stačilo jít na řádek 117 v konfiguračním souboru a umazat mezeru mezi parametry logfile /var/log/ a nahradit ji tabulátorem.

Více záloh na jednom stroji

Řešení zde popisované, je dělané pouze pro zálohování jednoho serveru. V případě, že chcete mít jeden univerzální zálohovací stroj, který bude na sebe zálohovat serverů více, stačí si jen rozkopírovat konfigurační soubor a v cronu pak volat rsnapshot například takto:

bitcoin_skoleni

rsnapshot -c /etc/rsnapshot.conf-server1 hourly, rsnapshot -c /etc/rsnapshot.conf-server2 hourly

Porovnání s Rdiff-backup

Rdiff-backup, o kterém se tu už také psalo, má s rsnapshotem společnou jednu věc – jde o nadstavbu nad programem rsync. Nicméně zdání podobnosti může klamat, protože každý z nich svou práci dělá tak trochu po svém. V závěru tedy uvedu jen pár základních rozdílů mezi nimi.

Rdiff-backup

  • psán v jazyce Python
  • archivace: rozdílové soubory si ponechá v podadresáři rdiff-backup-data
  • komprimuje
  • záloha se obnovuje přes příkaz
  • je potřeba, aby byl nainstalovaný i na vzdáleném počítači

Rsnapshot

  • psán v jazyce Perl
  • archivace: přes hardlinky
  • nekomprimuje
  • záloha je přímo „vidět“, není potřeba ji nijak obnovovat
  • stačí když je nainstalovaný na stroji, který zálohuje

Srovnání nemá a ani by nemělo mít vítěze, je už jen na vás, který nástroj vám lépe padne do ruky a který budete používat.

Autor článku