Pokročilé zálohování s Rsync

30. 7. 2007
Doba čtení: 6 minut

Sdílet

Ze všech stran stále slýcháme, že nejlepší způsob, jak se vyhnout nečekané ztrátě dat, je zálohovat, zálohovat a ještě jednou zálohovat. A proto se dnes podíváme na to, jak s pomocí propracovaného nástroje rsync provádět zálohy s mnoha rozsáhlými možnostmi. Jak se přesně používá? K čemu se hodí nejlépe?

Co je to rsync?

Rsync je aplikace pro unixové systémy, která dokáže synchronizovat soubory a složky z jednoho umístění do jiného. Přitom, pokud je to možné, minimalizuje objem přenášených dat pomocí delta encodingu.

Rsync by měl být s největší pravděpodobností součástí výchozí instalace vaší distribuce. Pokud tomu tak není, nainstalujte ho z balíčku pro vaši distribuci nebo použijte zdrojové kódy z webové stránky projektu k sestavení.

Výhody rsync

Rsync má např. oproti klasickému nástroji z balíku GNU utilit cp několik výhod. Tou nejvýraznější je pravděpodobně optimalizace velikosti přenášených dat. Rsync k tomuto používá speciální algoritmus, vyvinutý australským programátorem Andrewem Tridgellem, který zefektivní přenos struktury (jako např. souboru) přes komunikační linku, když má cílový počítač již jinou verzi stejné struktury. Platí to však také pro lokální kopírování. Stručně a srozumitelně řečeno: rsync, pokud je to možné, nekopíruje celé soubory, ale jen rozdíly mezi nimi. Z toho samozřejmě plyne, že se celý proces kopírování značně urychlí.

Další výhody rsync jsou např. zachování oprávnění a vlastnické informace souborů, kopírování symbolických odkazů, atd. Při přenosu je také možné zapnout kompresi dat, což je výhodné zejména při zálohování přes síť.

Základy práce s rsync

Základní syntaxe rsync je jednoduchá: rsync [volby] A B, kde A je zdrojový adresář (soubor) a B je cílový adresář (soubor). Pokud tedy chcete zálohovat adresář se svými dokumenty z domovského adresáře na jiný disk, použijte příkaz podobný tomuto:

$ rsync -av /home/uzivatel/dokumenty /mnt/zaloha/

V příkladu jsem použil dvě volby. Volba -a zajistí to, že rsync bude pracovat v archivačním módu. To znamená, že u kopírovaných souborů zachová oprávnění a vlastnické informace, zkopíruje symbolické odkazy, soubory zařízení, atd. Volba -v, jak je zvykem, nastavuje množství vypisovaných informací. Lze ji použít až třikrát, kdy -v vypisuje jen několik základních informací o prováděných činnostech, volba -vv poskytne o něco více informací a -vvv vás detailně informuje o všech činnostech, které rsync právě provádí, i když pak už výpis není tak přehledný.

Další důležitou volbou je zajisté --exclude. Představte si, že zálohujete svůj /etc adresář. Nechcete ale do zálohy zařazovat např. soubory s koncovkou bak. Použijete tedy příkaz

$ rsync -av --exclude="*.bak" /etc /mnt/zalohy/

Ten zajistí, že tyto soubory budou ze zálohovacího procesu vyřazeny.

Lokální záloha

S rsync můžete samozřejmě provádět lokální zálohy. Zálohy mohou být ukládány např. na externí disk, flash disk, ale také do adresáře na obyčejném oddílu pevného disku. Rsync ale kvůli svému přístupu ke kopírování dat není vhodný pro ukládání na zařízení s magnetickým lineárním zápisem. K tomu se spíš hodí nástroje dump nebo tar, které zajistí, že se k datům bude přistupovat lineárně.

Řekněme, že si chci zálohovat fotky z dovolené z adresáře /mnt/data/fotky-dovolena/ na svůj externí disk. Provedu to příkazem, který jsme si již vysvětlovali:

$ rsync -av /mnt/data/fotky-dovolena /mnt/sda1/

Potom ale přijedou známí, kteří se mnou byli na dovolené, a dovezou svoje fotky. Některé jejich se mi líbí více, a proto jejich fotky přidám do své složky a některé moje smažu. Znovu chci zálohovat na svůj externí disk. Kdybych použil stejný příkaz jako posledně, nové fotky od známých by se přidaly k mým starším, ale ty, které jsem smazal, by tam zůstaly také. Kvůli těmto situacím rsync obsahuje volbu --delete, která zajistí, že se z cílové složky odstraní soubory, které již ve zdrojové složce neexistují. Pak příkaz bude vypadat nějak takto:

$ rsync -av --delete /mnt/data/fotky-dovolena /mnt/sda1/

Tuto volbu ale používejte velice opatrně. S její pomocí lze smazat gigabajty dat během několika vteřin, čehož byste mohli později litovat. Raději nejdříve celý proces zálohy spusťte s volbou --dry-run, díky které zjistíte, jak bude záloha probíhat, aniž by se jakékoliv soubory někam kopírovaly, přesouvaly nebo se mazaly.

Pro obnovení dat ze zálohy neexistuje žádný speciální příkaz. Stačí jenom prohodit cílovou a zdrojovou složku v příkazu rsync. Dobře si zde rozmyslete použití volby --delete. Ta by mohla způsobit ztrátu některých dat vytvořených po posledním zálohování. Pokud je to možné, tato data odděleně zálohujte a po obnovení ze zálohy je znovu zařaďte.

Při psaní cesty složky, kterou hodláte zálohovat, dávejte pozor na koncové lomítko. Rsync totiž jeho přítomnost a nepřítomnost chápe rozdílně. Pokud ho nenapíšete, kopíruje se zadaná složka i s jejím obsahem. Příkaz by vypadal takto:

$ rsync -av /home /mnt/zaloha

Pokud ale lomítko na konci cesty zadáte, rsync zkopíruje pouze obsah složky. Následující příkaz bez koncového lomítka:

$ rsync -av /home/ /mnt/zaloha/

tedy zkopíruje do složky /mnt/zaloha pouze složky jednotlivých uživatelů, kdežto rsync -av /home /mnt/zaloha/ je zkopíruje i s adresářem /home.

Vzdálená záloha

Co když budete chtít kopírovat svá data přes síť na vzdálený počítač? S rsync to není žádný problém. Rsync jako výchozí možnost nabízí přenos dat mezi dvěma počítači přes daemona rsyncd. Ten je sice rychlý, ale přenášená data nešifruje. Proto se podíváme na to, jak data posílat pomocí SSH (zabezpečeného shellu), který sice není tak rychlý jako rsyncd, ale vaše data se s jeho pomocí přenáší zašifrovaná, takže nikdo nepovolaný nemůže zjistit, jaké informace přenášíte.

Příkaz, který k přenosu použijeme může být podobný tomuto:

$ rsync -ave ssh --delete /mnt/data/fotky-dovolena user@remotehost.cz:/mnt/data/

Pokud chcete vědět jak rychle přenos probíhá a za jak dlouho proces skončí, přidejte k příkazu volbu --progress. To je vhodné, pokud proces zálohování spouštíte ručně a kontrolujete jeho průběh. Pokud se ale spouští zálohování automaticky (viz níže), není tato volba potřeba. Data můžete samozřejmě také kopírovat zpět. Třeba takto:

$ rsync -ave ssh user@remotehost.cz:/mnt/data/fotky-dovolena /mnt/data/

Pokud disponujete pomalým připojením nebo prostě chcete ušetřit nějaké ty bajty, měli byste zapnout volbu --compress nebo kratší -z. S touto volbou bude rsync komprimovat přenášené soubory a tím redukovat množství dat přenášených po síti. Míru koprese lze nastavit pomocí volby --compress-level=NUM. Za NUM dosadíte celé číslo, nula vypne kompresi.

Automatizace

Řekněme, že chcete vytvářet denní zálohy celého kořenového adresáře. To by znamenalo každý den nejlépe ve stejnou dobu spouštět stále stejný příkaz, který by to obstaral. Koho by to ale bavilo, že? Naštěstí existují různé automatizační nástroje a jedním z nich je také cron. Jak tedy pomocí cronu nastavit automatické každodenní zálohy? Začneme editací crontab. Jako root spustíme příkaz crontab -e a přidáme následující řádku:

ict ve školství 24

00 23 * * * rsync -av --delete / /mnt/zalohy/denni

Díky ní se každý den přesně ve 23:00 spustí zadaný příkaz. Pokud jste náročnější a jednořádkový příkaz vám nestačí, není problém napsat si skript, který pak bude cron spouštět.

Doufám, že jste se z článku dozvěděli něco nového a že (pokud ještě pravidelně nezálohujete) jste poznali, že to nemusí být vůbec složité. Stačí tomu na začátku chvíli věnovat a pak už se o nic nemusíte starat, vše probíhá automaticky. Použití programu popsané v tomto článku by mělo stačit na vytváření plnohodnotných záloh. Pokud ale máte zájem podrobněji zkoumat rozsáhlé možnosti tohoto programu, odkážu vás na manuálové stránky rsync nebo webové stránky projektu. Na závěr bych vám chtěl popřát co nejméně nečekaných výpadků a ztrát dat.

Jak zálohujete data?

Autor článku