Zálohování pomocí rdiff

rdiff-backup je nástroj používáný k zálohování souborů. (může být spuštěn pod různými *nix porty)

Spouštěte příkazy v konsoli jako root, pokud není uvedeno jinak.

* skvělý k obnovení pokažených dist-upgradeů, aktualizací jádra a další (a také pouze k obnovení jednotlivých souborů)
* zálohuje pouze pozměněné jako rsycn (takže každá záloha netrvá dlouho)
* udržuje historii změn (takže můžete obnovit soubor, který jste smazali před třemi týdny!)
* provádí zabezpečené zálohy přes síť (pomocí ssh)
* zálohuje diskové oddíly, když jsou připojeny (takže je jednoduché zautomatizovat denní zálohy ... není nutné odpojování)
* může vše obnovit, pokud se váš disk obrát vzhůru nohama musít koupit nový
* je schopen zálohovat celé sítě (linux bez problému, Windows je složitější) a je používán v obchodu
* je založen na příkazové řádce, což je skvělé pro ty, kdo rádi provádí automatické zálohy efektivním způsobem (například bash skript, který je volán cronem)
* pamatuje si a vypořádá se s vlastnictvím a oprávněními souborů, také si poradí se symbolickými odkazy (a podobnými věcmi), takže když obnovujete, vše se vám dostane tak, jak to bylo

Co budete potřebovat

rdiff-backup uchovává kompletní (nekomprimovanou) kopii souborů, které zálohujete, a také uchovává historii (inkrementální zálohy), takže to znamená, že místo, kam zálohujete, musí být větší než objem, který zálohujete. Pokud zálohuje 100 GB místa, můžete potřebovat 120 GB místa na zálohu (nejlépe na odděleném disku)

Jak to nastavit

Předpokládejme, že váš počítač má následující:
* pevný disk o 100 GB (sda), který je používán, s přípojnými body sda1 pro kořenový diskový oddíl a sda5 pro ukládání hudby a dalších souborů, sda6 pro swap
* využitelný pevný disk o 200 GB (sdb), který používán není, s jedním přípojným bodem sdb1 ... ten budeme používat pro naše zálohy
* IP adresu 192.168.0.1

První věc, kterou musíte udělat, je nainstalovat rdiff-backup:

# apt-get install rdiff-backup

Ačkoliv můžete zazálohovat jakýkoliv adresář, my budeme uvažovat zálohu celého diskového oddílu ... chceme zazálohovat sda1 a sda5 (nechceme zálohovat sda6), takže vytvoříme pár adresářů pro uložení dat:

# mkdir -p /media/sdb1/rdiff-backups/192.168.0.1/root
# mkdir -p /media/sdb1/rdiff-backups/192.168.0.1/sda5

Potřebujete odlišit IP adresu, pokud chcete tento pořítač použít i k zálohování jiného (pokryto později).

Zálohování

rdiff-backup používá syntaxi rdiff-backup zdrojový-dir cílový-dir. Poznámka: vždy specifikujte názvy adresářů, ne souborů.

Pro zálohu sda5, spousťte:

# rdiff-backup /media/sda5 /media/sdb1/rdiff-backups/192.168.0.1/sda5

Pro zálohu kořenového diskového oddílu:

# rdiff-backup --exclude '/tmp/*' --exclude '/proc/*' --exclude '/sys/*' --exclude '/media/*/*' / /media/sdb1/rdiff-backups/192.168.0.1/root

Jakékoliv chyby "AF_UNIX patt too long" mohou být ignorovány. To může zabrat chvíli času, neboť je to poprvné, co provádite zálohy diskového oddílu, takže rdiff-backu musí vzít v potaz celý diskový oddíl, ne jen rozdíl. Všimnětet si, že nechceme zálohovat /tmp, jelikož ten se stále mění, ani /proc nebo /sys, jelikož ty neobsahují opravdové soubory. Také nechceme zálohovat přípojné body. Pokud byste je zálohovali, tak se prováděla záloha i sdb1, a tak by se proces mohl dostat do nekonečné smyčky! Obklika je zálohovat přípojné body zvlášť.

Důvod, proč upřesňujeme '/proc/*' místo '/proc' je, že se stále bude zálohovat adresář nazvyný /proc, ale bude ignorováno vše uvnitř. To samé platí pro /tmp, /sys, a také pro názvy všech přípojných bodů.

Takovýmto způsobem, v případě, že si zničíte kořenový diskový oddíl a uděláte kompletní obnovu, budou vytvořeny /tmp, /proc, /sys a všechny diskové oddíly (tak, jak by měly). Pokud /tmp není přítomno při startu X, tak by si mohl stěžovat. (podívejte se do man stránek ohledně --exclude a --include)

Obnovení adresářů ze záloh

rdiff-backup používá následující syntaxi:

rdiff-backup -r <odkdy-dokdy> <zdrojový-dir> <cílový-dir>

Teď, pokud byste omylem vymazali adresář (/medi/sda7/photos, můžete je obnovit takto:

# rdiff-backup -r now /media/sdb1/rdiff-backups/192.168.0.1/sda5/photos /media/sda5/photos

Volba "-r now" znamená obnovení od poslední zálohy. Pokud jste vše zálohovali periodicky (pomocí crontab, řekněme) a všimli jste si až nedávno, že adresář photos chybí, museli byste udělat obnovu z doby před pár dny (no "now", jelikož poslední záloha by hlásila, že adresář photos neexistuje). Nebo se třeba jen potřebujete dosta k předchozí verzi čehokoliv.

Jestli chcte udělat obnovy z doby před třemi dny, tak použijte "-r 3D" .... ale, jak říkají man stránky, zaznamenejte:

"3D" odkazuje na okamžik před 72 hodinami a jestli v té době neproběhla žádná záloha, rdiff-backup obnoví stav uložený pro předchozí zálohu. Například, ve výše uvedeném příklad, s použitím "3D" a jestli existují pouze zálohy z doby před 2 dny a před 4, adresář bude obnoven ze zálohy staré 4 dny (takže na to musíte pamatovat, když děláte obnovu).

S použitím následujícího obdržíte seznam dat a časů, kdy byly udělány zálohy pro sda5:

# rdiff-backup -l /media/sdb1/rdiff-backups/192.168.0.1/sda5
Obnovení diskových oddílů

Můžet také obnovit celé diskové oddíly (přípojné body), koneckonců, přípojný bod je vlastně jen adresář.

VAROVÁNÍ: Neobnovujete kořenový adresář, když je do něj nabootováno! S jediným příkazem ztratíte všechy svoje soubory na všech diskových oddílech, včetně záloh na oddělených pevných discích!! rdiff-backup dělá přesně to, co je instruován dělat... pokud má záloha pro kořenový diskový oddíl prázdné přípojné body, tak k obnovení toho, čemu záloha odpovídá, vymaže vše v přípojných bodech, aby se vše podobalo záloze !!!

Pro obnovení sda5 z poslendí zálohy, stačí provést:

# rdiff-backup -r now /media/sdb1/rdiff-backups/192.168.0.1/sda5 /media/sda5
Obnovení kořenového diskového oddílu

Pro obnovení kořenového adresáře to ale tak jednoduché není. Neobnovujte kořenový adresář, když je připojen (viz. varování výše). Je užitečné mít možnost obnovit kořenový adresář, protože pokud se něco pokazí během instalace/aktualizace, nebo během aktualizace jádra (atd), můžete být klidní, jelikož je tu možnost vše vrátit do původní podoby a trvá jen asi 20 minut.

Jeden způsobit, jak obnovit kořenový diskový oddíl, je nabootovat do záchranného diskového oddílu, jestli nějáký na vašem disku máte. Potom budeme moci obnovit diskový oddíl, který potřebujete, a nebude připojen jako root. Potom, co obnovíte diskový oddíl, tak ho nabootujte a bude přesně takový, jaký byl při záloze ... úplně! Toto je ta nejjednodušší metoda.

Dalším způsobem obnovy kořenového diskového oddílu je načtení live-cd aptosid a udělat obnovu odsud. rdiff-backup je v aptosid zahrnut. V případě, že verze live-cd aptosid, kterou máte k dispozici, neobsahuje rdiff, můžete v Grubu (Možnosti spouštění/bootovaní (Spouštěcí příkazy)) zadat spouštěcí příkaz/kód "unionfs" a to znamená, že můžete instalovat aplikace v live-cd. Jen nabootujte a zadejte následující příkazy:

$ sudo su
# wget -O /etc/apt/sources.list http://aptosid.com/files/misc/sources.list
# apt-get update
# apt-get install rdiff-backup
Nyní obnovme:
# mount /dev/sda1 /media/sda1
# mount /dev/sdb1 /media/sdb1
# rdiff-backup -r now /media/sdb1/rdiff-backups/192.168.0.1/root /media/sda1

Poznámka: Pokud nemáte aptosid CD a klik podporuje vaše Live-CD, můžete pomocí Klik nainstalovat rdiff-backup a zavolat:

$ sudo ~/.zAppRun ~/Desktop/rdiff-backup_0.13.4-5.cmg rdiff-backup -r now /media/sdb1/rdiff-backups/192.168.0.1/root /media/sda1

Je doporučeno, aby kdokoliv, kdo zálohuje kořenový diskový oddíl (se záměrem ho obnovit, pokud bude třeba), provedl otestování procesu obnovení. Nic není horšího, než si myslet, že vše bude v pořádku, a potom se v nouzi stane něco neočekávaného.

Jestli byl pevný disk změněn nebo přeformátovát, překontrolujte UUID (nebo štítky) v /boot/grub/menu.lst (grub-legacy) nebo soubory v /etc/grub.d (grub2) a /etc/fstab a potřebně je upravte. Jednoduchý způsob, jak získat informace pro úpravu souborů menu.lst a fstab, pokud je to třeba, je jako root:

blkid
Zálohování jiných počítačů

Můžete zálohovat ostatní počítače na lokální, pokud váš lokální počítač může k ostatním přistoupit pomocí ssh (a pokud máte dostatek místa na vašem disku). ssh server (sshd) musí být odléhlém počítači spuštěn. Druhý počítač nemusí být na vaší lokální síti, může být kdekoliv na světě.

Předpokládejme, že vašemu druhému počítači odpovídá:
1) Pevný disk o velikosti 100 GB (sda), který je používán, s jedinými přípojnými body,
2) sda1 pro kořenový diskový oddíl,
3) sda5, který obsahuje nějaké dočasné soubory, které nechceme zálohovat,
4) a sda6 pro swap
5) IP adresa 192.168.0.2

Poznámka: Oba dva disky o velikosti 100 GB nemohou být obykle zazálohovány na 200 GB disk pomocí rdiff-bakcup (jelikož zde již nebude místo pro inkrementální soboruy), ale jelikož na odlehlém počítači nezálohujete sda5 (a jelikož disk většinou nikdy není na 100% plný - na to se ale nespoléhejte), můžete vypočítat, že místa máte dost.

Můžete rdiff-backupu sdělit, aby uchovával jen jeden měsíc záloh (tento příkaz je demonstrován později), a to zabere místa, než kdyby rdiff-backup zálohoval roky dat. Samozřemě pokud chcete zálohovat data z několika let, musíte mít adekvátní pevný disk, pro zálohy všech inkrementální souborů během těch let.

Jediná věc, kterou musíte provést, je instalace rdiff-backup i na váš odlehlý počítač (každý počítač, který chcete zálohovat, včetně zálohovacího serveru, musí mít nainstalovaný rdiff-backup.

Pro zálohu odlehlého počítače na lokální, spusťtě na lokálním počítači (tedy 192.168.0.1): Povšimněte si dvojitých dvojteček ::

# mkdir /media/sdb1/rdiff-backups/192.168.0.2/root
# rdiff-backup --exclude '/tmp/*' --exclude '/proc/*' --exclude '/sys/*' --exclude '/media/*/*' 192.168.0.2::/ /media/sdb1/rdiff-backups/192.168.0.2/root

Teď, pokud chcete obnovit adresář na odlehlém počítači, spusťte obnovu buď na lokálním počítači nebo odlehlém.

Toto je způsob, jak byste obnovili adresář /usr/local/ganes na odlehlém počítači, spuštěním z odlehlého počítače:

# rdiff-backup -r now 192.168.0.1::/media/sdb1/rdiff-backups/192.168.0.1/root/usr/local/games /usr/local/games

Toto je způsob, jak byste obnobili adresář /usr/local/games na odlehlém počítači, spuštěním z lokálního počítače:

# rdiff-backup -r now /media/sdb1/rdiff-backups/192.168.0.1/root/usr/local/games 192.168.0.2::/usr/local/games

Použijte stejnou formu syntaxe při obnovování kořenového diskového oddílu z live-cd (kde bylo nabootováno na odlehlý počítač pomocí live-cd ... viz. výše).

Automatické zálohy:

Pokud provádíte zálohy jiných počítačů na váš lokální počítači, tak první věc, kterou byste měli udělat, je zapnout ssh přihlášení bez hesla pomocí klíčů ssh. Zde mluvíme o ssh přihlášeních jako root bez hesla. To může být zúženo jen na provádění rdiff-backup, ale to je nad rámec tohoto tématu. Odkažte se prosím na Konfiguraci SSH Budeme zde uvažovat kompletní důvěru a nastavíme nejjednodušší způsob, jak dosáhnout bezheselných přihlášení.

Z lokálního počítače proveďte následující:

# [ -f /root/.ssh/id_rsa ] || ssh-keygen -t rsa -f /root/.ssh/id_rsa

A stiskněte enter dvakrát pro prázdné heslo:

# cat /root/.ssh/id_rsa.pub | ssh 192.168.0.2 'mkdir -p /root/.ssh;\
> cat - >>/root/.ssh/authorized_keys2'

Bude požádáni o heslo root.

Nyní se můžete připojit pomocí ssh k odlehlému počítači jako root, aniž byste museli zadávat heslo, a rdiff-backup může být zautomatizován.

Posléze vytvořte skript bashe, který obsahuje všechny příkazy rdiff-backup. Náš skript bashe by mohl vypadat třeba takto:

#!/bin/bash
RDIFF=/usr/bin/rdiff-backup
echo
echo "=======Zálohuji 192.168.0.1 root======="
${RDIFF} --ssh-no-compression --exclude '/tmp/*' --exclude '/proc/*' --exclude '/sys/*' --exclude '/media/*/*' / /media/sdb1/rdiff-backups/192.168.0.1/root
echo "(a vymazat inkrementy starší jak 1 měsíc)"
${RDIFF} --remove-older-than 1M --force /media/sdb1/rdiff-backups/192.168.0.1/root
echo
echo "=======Zálohuji 192.168.0.1 přípojný bod sda5======="
${RDIFF} --ssh-no-compression --exclude /media/sda5/myjunk /media/sda5 /media/sdb1/rdiff-backups/192.168.0.1/sda5
echo "(a vymazat inkrementy starší jak 1 měsíc)"
${RDIFF} --remove-older-than 1M --force /media/sdb1/rdiff-backups/192.168.0.1/sda5
echo
echo "=======Zálohuji 192.168.0.2 root======="
${RDIFF} --ssh-no-compression --exclude '/tmp/*' --exclude '/proc/*' --exclude '/sys/*' --exclude '/media/*/*' --exclude '/mnt/*/*' 192.168.0.2::/media/sdb1/rdiff-backups/192.168.0.2/root
echo "(a vymazat inkrementy starší jak 1 měsíc)"
${RDIFF} --remove-older-than 1M --force /media/sdb1/rdiff-backups/192.168.0.2/root

Nyní můžete tento skript pojmenovat "myrdiff-backups.bash" a umístit ho do /usr/local/bin na vašem lokálním (zálohovací server) stroji a učiňte ho spustitelným. Skript spustěte a ujistěte se, že funguje.

A nakonec můžete docílit toho, aby je cron volal každou noc v osm hodin. Následující řádek v crontabu roota by se o to měl postarat. Spusťte:

# crontab -e
a vložte následující řádek
0 20 * * * /usr/local/bin/myrdiff-backups.bash
Obsah naposledy revidován 14/08/2010 0100 UTC