přejít na obsah přejít na navigaci

Linux E X P R E S, Zálohuj svá data tolikrát, kolikrát je máš rád

Zálohuj svá data tolikrát, kolikrát je máš rád

disk.png

Přestože zálohování celého systému nebo alespoň důležitých souborů by mělo patřit ke každodennímu chlebíčku administrátora, často se setkávám s tím, že není prováděno vůbec, případně jsou přes sít přenášeny zcela zbytečně neuvěřitelné objemy dat. V následujícím článku bych vám proto chtěl ukázat, že zálohování je relativně jednoduchá záležitost a není na něm téměř nic, čeho byste se měli bát.


Každý má své mouchy

Nejdůležitější a většinou nejproblematičtější bývá volba zálohovacího programu. V Linuxu existuje nespočet nástrojů, které lze pro zálohu dat použít. Přiznám se, že v začátcích jsem se také nemohl rozhodnout. Moji kolegové používali "klasické" cp s tolika přepínači, že to vypadalo, jakoby bušili hlavou do klávesnice. Toho jsem se tak trochu bál, a proto jsem raději použil na zálohování program tar. Bohužel tady nastal problém u ext2 filesystémů, kdy velikost souboru nesmí být větší než 2 GB. Z tohoto důvodu jsem nakonec skončil u programu rsync, se kterým pracuji k maximální spokojenosti již několik let a o kterém bych vám chtěl něco málo říct.

Zálohy obecně rozdělujeme do několika skupin. Prvním případem je úplná záloha. Při úplné záloze se ukládají přesné kopie všech dat. Dalším typem je rozdílová nebo-li diferenciální záloha. U této se ukládají pouze ty soubory (části souborů), které se změnily od poslední úplné zálohy. Poslední v řadě je přírůstková nebo-li inkrementální záloha. U tohoto typu je ukládána kopie jen těch souborů, které se změnily od poslední, ať již úplné, nebo inkrementální, zálohy.

Rsync je flexibilnější a rychlejší nástupce programu rcp, napsaný Andrewem Tridgellem a Paulem Mackerrasem. Dnes je již běžně obsažen téměř ve všech distribucích. Slouží k zálohování (i inkrementálnímu) celých stromových struktur disku, a to i po síti. Existuje pro něj spousta nástaveb většinou ve formě různých skriptů, které za nás nastavují v přehlednějším GUI rozhraní parametry zálohování, případně rsync o některé parametry doplňují. Za zmínku jistě stojí, že některé linuxové/unixové distribuce rsync defaultně používají pro stažení svých zdrojových kódů a balíčků do systému.

Šedivá je teorie, zelený strom praxe

Jestliže máme rsync nainstalovaný a chceme si ho otestovat, založíme si na svém disku v adresáři /tmp dva adresáře. První nazveme abc a druhý xyz. Našim úkolem bude přenést zálohu adresáře abc do adresáře xyz. Abychom měli co přenášet, vytvoříme si ještě v adresáři abc příkazem touch /tmp/abc/test soubor test. Syntaxe programu rsync je shodná s většinou linuxových příkazů. Jako první zadáváme patřičný parametr, následně adresář, který chceme zálohovat a dále pak adresář, do kterého bude záloha uložena. Nejednodušší příkaz by pak mohl vypadat kupříkladu takto:

rsync -av /tmp/abc/ /tmp/xyz/

Pakliže jej spustíme, rsync zkopíruje všechny soubory z adresáře abc do adresáře xyz. Parametr -av značí, že bude provedena "ukecaná" rekurzívní záloha se zachováním patřičných symlinků, práv, času, skupiny vlastníků a zařízení. Výše uvedený příklad je plně funkční, ovšem někdy potřebujeme přenášet soubory po síti a ne jen v rámci jednoho počítače. Pro tyto případy je rsync vybaven přepínačem -e, za který doplníme název shellu, přes který budeme ke stanici přistupovat. S protokolem SSH, vzdáleným počítačem hodza.net a s uživatelem tester by příkaz vypadal následovně.

rsync -av -e ssh /tmp/abc/ tester@hodza_net:/tmp/xyz/

Zde bych si dovolil udělat malou odbočku od tématu. SSH klient po nás bude v tomto (ale i v jiných) případech vyžadovat zadání hesla z klávesnice. Bohužel se heslo se nedá do SSH "poslat" žádnou standardní routou, což nám značně komplikuje život. Nemusíme však zoufat - existují tři způsoby, jak SSH klienta "přelstít" (čtěte v poznámce na okraji).

SSH neboli Secure Shell je klient/server protokol v TCP/IP sítích, který umožňuje zabezpečenou komunikaci mezi dvěma počítači pomocí transparentního šifrování přenášených dat. Pracuje na portu TCP/22. Pokrývá tři základní oblasti bezpečné komunikace: autentizaci obou účastníků komunikace, šifrování přenášených dat a integritu dat.


Jak přelstít SSH?

Prvním způsobem je úprava samotných zdrojových kódů tak, aby SSH při autorizaci komunikoval se standardním vstupem a výstupem. Tuto variantu opravdu nedoporučuji, neboť byste mohli vytvořit v systému velmi vážnou bezpečnostní díru. Navíc představa ruční kompilace SSH klienta pokaždé, když vyjde jeho nová verze (a to třeba na několika desítkách serverů) mi nahání husí kůži. Druhým, velice často používaným způsobem, je vytvoření SSH klíčů, díky kterým nemusíme heslo vůbec zadávat. Bohužel některá zařízení, přestože obsahují SSH démona, klíče vytvořit neumí. V tomto případě nám nezbývá než použít poslední možnost - program expect.


Pokud smažeme ve složce /tmp/abc soubor test a provedeme opět příkaz rsync -av /tmp/abc/ /tmp/xyz/, kupodivu se nic nestane. Rsync nás totiž úmyslně chrání před nechtěným smazáním souborů. V případě, že odstraníme ve výchozím adresáři soubor a chceme, aby se změna projevila i u zálohy, použijeme za přepínač -a ještě přepínač --delete. Celý příkaz by pak byl následující:

rsync -av --delete /tmp/abc/ /tmp/xyz/

Jeho funkčnost si můžeme ověřit příkazem ls /tmp/abc/; ls /tmp/xyz/.

Rsync obsahuje nespočetně různých voleb a přepínačů. Suplovat zde manuálové stránky by bylo zbytečné a tak uvedu již jen poslední pro nás velmi důležitý parametr. Tím je -- exclude=, který nám zajistí, že složka uvedená za rovnítkem bude při zálohování vynechána.

Pokud si shrneme všechny znalosti z výše uvedeného, můžeme kompletně zazálohovat například svůj notebook na jiný počítač. Dosáhneme toho tímto příkazem

rsync -av -e  --delete  ssh / pepa@domaci_net:/mnt/sdb5/zaloha_notebook --exclude=/lost+found/ --exclude=/mnt/  --exclude=/proc/ --exclude=/tmp/

V případě, že provedu na svém stroji několik změn a spouštím stejný příkaz ještě jednou, provede se takzvaně inkrementální záloha. Co to znamená? Rsync si sám porovná jednotlivé soubory a adresáře na počítači, ve kterém je spuštěn s těmi na počítači, kde je (bude) umístěna záloha. Pokud najde mezi jednotlivými strukturami rozdíl, stáhne pouze ty soubory (adresáře), které se od sebe liší. Výrazně tím tak ušetří na síťovém provozu a zvýší rychlost zálohování.

Rsync se často používá i tam, kde již zálohování existuje, nebo jsou data uložena bezpečnější technologií. Typickým příkladem bývají například webhostingové servery s RAID poli. Zákazníci totiž potřebují maximálně jeden den starou kopii jejich stránek na read-only FTP účtu na zcela jiném stroji pro případ, že by web server někdo napadl nebo došlo k živelní pohromě.

Abychom se nemuseli každý den přihlašovat na server a spouštět příkaz ručně, můžeme celou akci automatizovat pomocí plánovače úloh - cronu. V případě, že jsme na systému aktuálně přihlášeni pod uživatelem, kterého budeme chtít zálohovat, stačí k editaci cronu příkaz crontab -e. V opačném případě se přepneme na root shell a zeditujeme ručně tabulku daného uživatele, kterou nalezneme v adresáři /var/spool/cron/crontabs.

Zápis spuštění programu je velice jednoduchý. Řekněme, že chceme zálohovat složku /home/hodza každý den ve 23:30 a jednou za měsíc v 16:00 pak zazálohujeme celý obsah disku. Pod rootem napíšeme crontab -e a do tabulky vložíme:

# Zaloha /home/hodza kazdy den ve 23:30
30 23 * * * rsync -av -e  --delete  ssh /home/hodza hodza@hodza_net:/mnt/sdb5/zaloha_notebook/home/hodza >/dev/null
# Zaloha / jednou mesicne v 16:00
0 16 1 * * rsync -av -e  --delete  ssh / hodza@hodza_net:/mnt/sdb5/zaloha_notebook ---exclude=/lost+found/ --exclude=/mnt/  --exclude=/proc/ --exclude=/tmp/  >/dev/null

Soubor uložíme a pro jistotu restartujeme démon cron příkazem killall -HUP crond.

Závěrem

Sami vidíte, že zálohovat přes rsync není žádná věda. Stačí několik málo řádek kódu a máte funkční skript. Pokud potřebujete sofistikovanější řešení, které například zálohuje celý systém (server) každý den, a nechcete zbytečně plýtvat místem, existuje spousta efektivních řešení pomocí symbolických (nebo hard) linků. V opačném případně můžete sáhnout po některém z chytrých skriptů. Mně například v tomto směru připadá velice zajímavý perlovský skript v projektu s názvem Dirvish.

Nahoru

Odkazy

Příspěvky

online zálohování
Radek 13. 01. 2009, 16:20:28
Odpovědět  Odkaz 
Je tady také možnost online zálohování pomocí nějaké služby. V linuxu např. funguje http://www.zalohujeme.cz s možností šifrování pomocí enterprise produktu IBM Tivoli Storage Manager...
Zálohuj svá data tolikrát, kolikrát je máš rád
Václav Pavlů 20. 12. 2012, 10:45:04
Odpovědět  Odkaz 
Dobrý den,
nevím jestli je to verzí rsync, popřípadě debianu nebo je to chyba, ale pořadí parametrů -e --delete mi nefungovalo, po prohození na --delete -e je vše OK, snad to někomu ušetří čas :)
Zálohuj svá data tolikrát, kolikrát je máš rád
lzap 18. 09. 2018, 10:35:26
Odpovědět  Odkaz 
"Zálohovat" pomocí "rsync -av" nebo nedejbože "rsync -av --delete" je strašný omyl, který bude někoho stát data. Stejně tak jako RAID není záloha, tak i prostá kopie není záloha.

Záloha musí být inkrementální, aby se dal dohledat přepis nějakého souboru novým obsahem. Toho lze rsyncem docílit pomocí volby --stats, doporučuji vygooglit "rsync incremental" nebo také "rsync hardlink" čímž se dá ušetřit místo.

Začátečníkům doporučuji ale využít již hotový program, například duplicity nebo jiný. Protože kdy člověk pozná že záloha nefunguje? Když potřebuje obnovit data.

To jen pro náhodné kolemjdoucí, vím že Milan toto ví a zálohuje tucty svých zákazníků správně. Návod je psán spíš jako "rychlá záloha", tak jen aby bylo jasno :-)

Přidat názor

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích a pravidlech najdete v nápovědě.
Diskuzi můžete sledovat pomocí RSS kanálu rss



 
 

Top články z OpenOffice.cz