Zálohování pomocí rsynce

rsync je nástroj používány pro zálohu a synchronizaci souborů. (můře být spouštěn na různých *.nix portech).

Jedno omezení rsyncu je, že NEUMÍ kopírovat z jednoho odlehlého systému na jiný odlehlý systém. Pokud to chcete udělat, budete muset jeden odlehlý systém zkopírovat na lokální počítač a pak udělat kopii na další odlehlý systém.

V aptosid máte možnosti, jak celý proces zahájit. DIY nebo přes deb balíček v Debian sid:

Balíček deb:
apt-get install luckybackup

Domovská stránka pro luckybackup.

Co následuje dál je DIY verze.

Následující řádky vám dají pracovní znalosti o tom, co rsync umí a několi příkladů kódu k použití pro váš vlastní zálohovací skript.

rsync je velice jednoduchý zálohovací program. Velice jednodušše může zálohovat soubory a adresáře. Je toho docíleno pomocí důmyslné kontroly, kdy se jaké soubory změnily, tak aby jenom tyto soubory byly vybrány ke kopii. rsync také používá kompresní nástroj, aby celý kopírovací proces urychlil (když je explicitně nastavena volba -z). To může být vysvětleno velice jednodušše:

Program rsync vybírá soubory a adresáře, které musí být zkopírovány, na základě změněných atributů (například datum/čas poslední úpravy nebo velikost souboru). V každém případě není něco stejné, jako když se to zálohovalo posledně. Tento proces výběry je velice rychlý.

Jakmile rsync dokončil vytváření seznamu, který použije, je zkopírování těchto souborů o dost rychlejší díky kompresní metodě prováděné během samotného kopírování. rsync používá tudo kompresi před poslání a potom je vše na konci rozbaleno, "za chodu".

rsync může kopírovat souboru z:
* lokálního systému na lokální systém
* lokálního systému na odlehlý systém
* z odlehlého systému na lokální systém

Používá buď výchozí klient ssh, nebo běží démon rsync na zdrojovém i cílovém systému. Man stránky pro rsync uvádí, že pokud se můžete spojit pomocí ssh se systémem, tak se přes ssh bude moci spojit i rsync.

Jedno omezení rsyncu je, že NEUMÍ kopírovat z jednoho odlehlého systému na jiný odlehlý systém. Pokud to chcete udělat, budete muset jeden odlehlý systém zkopírovat na lokální počítač a pak udělat kopii na další odlehlý systém.

Pro příklad této logiky uvažujme tři systémy:

neo – lokální systém
morpheus – odlehlý systém
trinity – odlehlý systém

Chcete použít rsync ke kopii nebo k synchronizaci adresářů /home/[uživatel]/Data mezi všemi systémy navzájem. Každý systém je "vlastněn" specifickým uživatelem, jinými slovy, určitý uživatel používá daný systém určitým způsobu, a tudíž by takový systém měl být použit jako "zdroj" pro oba další systémy. Také bude spouštět příkaz rsync jen na jednom "lokální" počítači, a to je neo:

hlavní uživatel počítače neo je cuddles,
hlavní uživatel počítače morpheus je tartie, a
hlavní uživatel počítače trinity je taylar.

Takže to, co bude chtít dělat, je zálohování, nebo synchronizace, následujícího:

/home/cuddles/Data na neovi na morphea a trinity,
/home/tartie/Data na morpheovi na nea a trinity,
/home/taylar/Data na trinity na nea a morphea.

Problém rsyncu a je neschopnost kopírovat z odlehlého systému na odlehlý, ve výše zmíněném příkladu, se projeví, když se bude pokoušet zálohovat trinity na morpheam, nebo morphea na trinity (jak zdrojový, tak cílový systém jsou odlehlé). Příklad:

neo --> morpheus – v pořádku, to je lokální na odlehlý
neo --> trinity – v pořádku, to je lokální na odlehlý
morpheus --> neo – v pořádku, odlehlý na lokální
trinity --> neo – v pořádku, odlehlý na lokální
morpheus --> trinity – odlehlý na odlehlý – nebude fungovat
trinity --> morpheus – odlehlý na odlehlý – nebude fungovat

K vyřešení tohoto omezení musíte schéma rsyncu trochu upravit. Následující se o to postará:

morpheus --> trinity – se změní v: morpheus --> neo & neo --> trinity
trinity --> morpheus – se změní v: trinity --> neo & neo --> morpheus

Jedná se sice o krok návíc, namísto jednoho kroku, ale, jelikož chceme kopírovat soubory taky na nea, jedná se jen o změnu toho, odkud zdroj pochází, ne finálního výsledku. Předpokládá se, že jsou naše zálohy v pořádku a že nechybí.

Toto omezení rsyncu musí být bráno v potaz, když navrhujete váš zálohovací proces.

Použvání jmen hostitele s jmény hostitele s pomocí rsync

Jak popsáno výše, používání neo, morpheus a trinity namísto fyzické IP adresy, je snadné a rychlé a umožňuje učinit proces čitelnější. Dosáhnout používání hostitelských názvů je velmi jednoduché.

Bude zapotřebí upravit váš soubor /etc/hosts a přířadit hostitelské názvy k IP adresám. Zde je malá část horních řádků ze souboru /etc/hosts, demonstrující toto přiřazení.

192.168.1.15	 neo
192.168.1.16	 morpheus
192.168.1.17	 trinity

rsync a dva způsoby, jak ho používat

Jeden způsobe je “natlačit (push)” souboru do cíle a druhý je “natahat (pull)” soubory do zdroje. Každý má své výhody a některé nevýhody. Pojďjmě se na každé z nich podívat (pro následné vysvětlování předpokládejme, že jeden systém je lokální a ten druhý je odlehlý. Tak bude možné mnohem jasněji vidět použitou terminologii).

“natlačení (push)” - lokální systém má zdrojové soubory a adresáře a cílové místo je odlehlý systém. Příkaz rsync je spouštěn na lokálním systému a "natlačí" své soubory na cílový systém.

Výhody:
* Můžete mít více než jeden systém, zálohující se na cílový systém.
* Zálohovací proces je rozložen na všechny vaše kompletní systémy a není to jen jeden, který je využíván.
* Jestli je jeden systém rychlejší, tak může skončit dřív než ostatní.

Nevýhody:
* Pokud používáte skript a plánujete ho s cronem, tak bude nutné aktualizovat a měnit několik crontabů na každém systému, stejně jako verze vašeho skriptu.
* Vaše záloha nemůže zkontrolovat, jestli má cílový systém svůj cílový diskový oddíl připojen, a může zálohovat do prázdna.

“natahání (pull)” - odlehlý systém má zdrojové soubory a adresáře a cílové místo je lokální systém. Příkaz rsync je spouštěn na lokálním systému a "natahá" soubory ze zdrojového systému.

Výhody:
* Jeden systém je vytvořen jako server, dohlížející na všechyn zálohy všech ostatních systémů. Centralizované zálohy.
* Pokud používáte skript, je uchováván jen na jednom systému, a máte pouze jeden skript, což činí aktualizace a modifikace jednoduchými. Také vám to umožňuje kontrolovat jen jeden soubor crontab pro plánování sktriptu.
* Váš skript může kontrolovat, a připojovat, pokud je to nezbytné, cílové diskové oddíly.

Syntaxe rsyncu, jak uvedena v manuálových stránkách:

       rsync [OPTION]... SRC [SRC]... DEST

       rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST

       rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST

       rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST

       rsync [OPTION]... SRC

       rsync [OPTION]... [USER@]HOST:SRC [DEST]

       rsync [OPTION]... [USER@]HOST::SRC [DEST]

       rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
Pracovní příklad příkazu rsyncu:
rsync -agEvz --delete-after --exclude=”*~” morpheus:/home/tartie /media/sda7/SysBackups/morpheus/home

Podívejme se na některé části tohoto příkazu:

zdrojová cesta/soubor je: morpheus:/home/tartie
a cíl je: /media/sda7/SysBackups/morpheus/home

vše z /home/tartie... bude zálohováno pod /media/sda7/SysBackups/morpheus/home, který bude vypadat takto:

/media/sda7/SysBackups/morpheus/home/tartie...

Mělo by být poznamenáno, že jediný důvod, proč je /tartie v /home, je kvůli CÍLOVÉ destinaci, a NE kvůli ZDROJI. "Zdroj" vybírá pouze, odkud soubory pochází, ne kam směřují. "Cíl" je to, co sděluji rsyncu, kam umístit soubory, které dostane od "zdroje". Uvažujte následující příklad:

rsync [...] /home/user/data/files /media/sda7/SysBackups/neo

Ve výše uvedeném příkazu, pouze zdrojový adresáč /files, a to, co je pod ním, bude pod cílovým adresářem /neo - a ne tenhle /media/sda7/SysBackups/neo/home/user/data/files.

Vemte toto v uváhu, když budete vytvářet vaše zálohovací příkazy rsyncu.

Vysvětlení voleb:
-a je používán pro archivovací mód. Z manuálových stránek je to vysvětleno jako "stručně se jedná
o způsob rekursivní zálohy a zachovává 'téměř' vše. Zmiňují, že tento formát nezachovává tvrdé
odkazy vzhledem ke složitosti procesu. Volba -a je označována jako ekvivalentní k: -rlptgoD,
což znamená:
  -r = rekurzivní - zpracovává podadresáře a souboru v naší "cílové" lokaci.
  -l = odkazy (links) - když je naraženo na symbolický odkaz, znovu je vytvoři v cílovém místě
  -p = práva - řekně rsyncu, aby byla oprávnění nastavena stejně jako na zdroji
  -t = časy (times) - sdělí rsyncu, aby byly časy nastaveny stejně jako na zdroji
  -q = tichý (quiet) - stělí rsyncu, aby byl jeho výstup minimální, ačkoliv nastavujeme úroveň
upovídanosti s volbou -v hned po téhle. Aby byl proces úplně "tichý", odstraňte ve výše uvedeném
příkazu volbu "v"
  -o = vlastník (owner) - sdělí rsyncu, že pokud je spuštěn jako root, ať nastaví vlastníka souborů
stejně jako na zdroji
  -D = je ekvivalentem ke dvěma příkazům: --devices --specials
 --devices = způsobí, že rsync přenese znakové a blokové soubory zařízení
na odlehlý systém, aby tyto zařízení znovu vytvořil. Bohužel, pokude není
použito s volbou --super v příkazu, tak to nemá žádný efekt
 --specials = způsobí, že rsync přenese speciální soubory jako pojmenované
zásuvky (sockets) nebo fifo
-g je používán k uchování "skupiny" zdrojového souboru do cílového
-E je používán k uchování "spustitelný" zdrojového souboru do cílového
-v je používán k zvýšení upovídanosti, která je zobrazována. Potom, co jsme si jisti,
co zálohujeme, můžeme "v" odebrat. Já jsem to tam nechal, neboť pouštím proces
z cronu a upřednostňuji "vidět", co se dělo.
Nechávám to na jednotlivci, aby to rozhodl.
-z je používán ke kompresi dat, které je potřeba "přenést" nebo zkopírovat, což způsobí,
že proces zabere méně času, neboť přenesená data mají menší než skutečnou veliksot
--delete-after = cílové soubory/adresáře, které již nejsou na zdroji jsou smazány po přenosu,
ne před. Toto "after" (potom) je použito v pířpadě problémů nebo pádů a "delete" (smazat)
je použito k tomu, aby byl cíl udržen čistý a bez souborů, které již neexistují používány a aby se
jen tak nepovalovaly kolem
--exclude = vzorec použiváný k vyloučení souborů nebo adresářů. V příkladu, --exclude="*~" by
vyloučil VŠECHNY a KAŽDÝ soubor nebo adresář končící znakem "~" ze zálohy. Pouze jeden vzorec může
být přidělen spolu s --exclude, takže pokud je jich potřeba nastavit více, tak je nutné přidat více
řádků s příkazem exclude.

Dodatečně jsou zde některé další užitečné příkazy:

-c = který přidá další úroveň kontrol pro porovnání zdroje a cíle potom, co je provedeno kopírování, ale zároveň
to celý proces prodlouží a rsync již porovnávání zdrojových a cílových soubroů dělá během zpracovávání, takže tato
volba nebyla zahrnuta pro jednoduchý důvod, že to celý proces zpomaluje a jedná se jen o formu přebytečnosti, která
není nutná
--super = jak popisují manuálové stránky, způsobí, že se přijímatel, nebo cílový systém,
pokusí o aktivity super-usera
--dry-run = ukáže, co by bylo přeneseno. Je to něco jako použití volby -s s apt-get install,
nebo apt-get dist-upgrade

Zbytek naše příkazu je zdrojový soubor/adresář a pak naše cílové umístění.

Příklady příkaů:
rsync -agEvz --delete-after --exclude=”*~” morpheus:/home/tartie /media/sda7/SysBackups/morpheus/home

Tento příkaz bude zálohovat všechny soubory a jakékoliv adresáře pod /home/tartie na systému označeném jako "morpheus" a umístí je do adresáře /media/sda7/SysBackups/morpheus/home - zachová stromovou strukuturu z adresáře tartie.

rsync -agEvz --delete-after --exclude=”*~” /home/tartie neo:/media/sda7/SysBackups/morpheus/home

Tento příkaz je obráceným předchozího, "natlačí" adresář /home/tartie, jeho obsah a podsložky, do systému nazvaného neo, do stejného adresáře - všimněte si, že systém je označován jako odlehlý, když obsahuje dvojtečky ":" před označením cesty.

rsync -agEvz --delete-after --exclude=”*~” /home/cuddles /media/sda7/SysBackups/neo/home

Tento příkaz provádí zálohu lokální na lokální. Všimněte si, že zde nejsou žádné dvojtečky, ani v cíli, ani ve zdroji. Tento příkaz lokálně zálohuje oblast /home/cuddles na stejný systém do umístění /media/sda7/SysBackups/neo/home location.

Podívejme se na to, co udělá rsync příkaz s více exclude volbami:

rsync -agEvz --delete-after --exclude=”*~” --exclude=”*.c” --exclude=”*.o” "/*" /media/sda7/SysBackups/neo

Výše uvedený příkaz bude zálohovat VŠE z kořene lokálního systému a všechny soubory/adresáře, a umístí je to cílového umístění /media/sda7/SysBackups/neo - pouze nyní vyloučí všechny soubory a adresáře, které končí na "~", nebo ".c", nebo ".o".

Níže je uveden příkaz rsyncu, který by měl způsobit chybu a měli byste se ho vyvarovat. Je to příklad zálohy rsyncu z odlehlého na odlehlý počítač.

rsync -agEvz --delete-after --exclude=”*~” morpheus:/home/tartie trinity:/home

Jak zmíněno dříve v tomto dokumentu, jedná se o omezení rsyncu.

Jeden poslední příkaz. Pdívejme se na to, jak by vypadal rsync z odlehlého systému na lokální, když nahradím "názvy systémů" jejich IP adresami.

První příkaz, je metoda "názvu" a druhý je úplně ten samý, ale za použití IP adresy.

rsync -agEvz --delete-after --exclude=”*~” morpheus:/home/tartie /media/sda7/SysBackups/morpheus/home
rsync -agEvz --delete-after --exclude=”*~” 192.168.1.16:/home/tartie /media/sda7/SysBackups/morpheus/home

Jak zmíněno dříve, nemusíte používat přenesené "názvy", ale, v prvním příkladu, si můžete daleko jednodušeji přečíst, co se děje, než ve druhém.

Nyní byste měli být schopni si navrhnout jednoduchý příkaz, buď z příkladů prezentovaných, nebo vynecháním a přidáním příkazů, které byly zmíněny, abyste docílili toho, co potřebujete.

Obsah naposledy revidován 14/08/2010 0100 UTC