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

Linux E X P R E S, Správa linuxového serveru: Zálohování pomocí Duplicity

Správa linuxového serveru: Zálohování pomocí Duplicity

debain_notext.png

V minulém díle jsem vám představil zálohovací nástroj rdiff-backup. Zajímavou alternativou k tomuto nástroji představuje program Duplicity, který představím v tomto díle.


Úvod

Na rozdíl od rdiff-backup není u Duplicity dostupná poslední záloha v „otevřené“ podobě, kde by stačilo prosté překopírování souborů z úložiště zpět. Jiný způsob práce umožňuje tomuto nástroji nabídnout poněkud jiné spektrum funkcí jako například komprimaci či šifrování záloh pomocí GnuPG, nebo třeba v případě vzdáleného zálohování absenci nutnosti mít Duplicity i na cílovém počítači. Stejně jako rdiff-backup využívá i Duplicity přenosové pásmo efektivně a přenáší na vzdálený počítač pouze změny. Duplicity však může stejně jako rdiff-backup pracovat lokálně, tedy zálohovat v rámci jednoho počítače, a zvládá jak plnou, tak rozdílovou zálohu.

Jednoduchá nešifrovaná záloha

Duplicity ve výchozím nastavení rovnou šifruje, tudíž pokud chcete jen jednoduchou, nešifrovanou zálohu, musíte šifrování explicitně zakázat. Cíl zálohy je nutné specifikovat pomocí URL včetně použitého protokolu – pro místní zálohu se používá protokol file:

duplicity --no-encryption /home/co file:///backup/kam

Duplicity prozkoumá cíl a sám zjistí, jestli má provést plnou nebo rozdílovou zálohu. Po dokončení práce vypíše Duplicity statistiku o proběhlé záloze, která vypadá takto:

--------------[ Backup Statistics ]--------------
StartTime 1281416525.29 (Tue Aug 10 07:02:05 2010)
EndTime 1281416528.38 (Tue Aug 10 07:02:08 2010)
ElapsedTime 3.08 (3.08 seconds)
SourceFiles 1617
SourceFileSize 694597580 (662 MB)
NewFiles 0
NewFileSize 0 (0 bytes)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 0
RawDeltaSize 0 (0 bytes)
TotalDestinationSizeChange 3438 (3.36 KB)
Errors 0
-------------------------------------------------

Vzdálené zálohování a šifrování záloh

Duplicity umožňuje zálohovat vzdáleně pomocí celé řady protokolů, počínaje klasickým unixovým ssh/scp přes rsync, ftp, WebDAV až po Amazon S3. Vzdálené zálohování prostřednictvím protokolu SCP vypadá takto:

duplicity --no-encryption /home/co scp://uzivatel@server/backup/kam

U vzdáleného zálohování je však vhodné šifrovat. Díky tomu je možné bez obav zálohovat na servery, které nemáte pod kontrolou, popřípadě na jiné své servery, kde díky šifrování víte, že i kdyby došlo k jejich kompromitaci, vlastní zálohy nebudou případnému útočníkovi bez znalosti klíče k ničemu. Zálohování se šifrováním je jednodušší než zálohování bez šifrování, stačí jej nezakazovat:

duplicity /home/co scp://uzivatel@server/backup/kam

Pokud si vyzkoušíte výše uvedený příkaz, zjistíte, že po vás Duplicity bude chtít heslo – implicitně se totiž k šifrování používá symetrická šifra s klíčem v podobě obyčejného hesla. Pro běžné použití je to asi postačující, ale pro pravidelné automatické zálohování (např. pomocí cronu) to není to pravé ořechové. Pokud vám stačí symetrická šifra, ale nechcete heslo pokaždé zadávat, můžete heslo umístit do proměnné prostředí PASSPHRASE takto:

PASSPHRASE="moje_dlouhe_tajne_a_ne_moc_bezpecne_heslo"
duplicity /home/co scp://uzivatel@server/backup/kam

Šifrování pomocí PGP/GPG klíče

Spíše než symetrickou šifru s heslem bývá lepší použít PGP/GPG klíč. Jeho ID můžete specifikovat jako parametr volbě --encrypt-key a použít jej místo obyčejného hesla:

duplicity --encrypt-key CAC193E6 /home/co scp://uzivatel@server/backup/kam

Jedna věc, která možná není úplně patrná a může se vám za jistých okolností hodit, je skutečnost, že klíčů můžete použít více najednou (poté můžete zálohu dešifrovat kterýmkoliv z nich):

duplicity --encrypt-key CAC193E6 --encrypt-key ACC91E63 /home/co scp://uzivatel@server/backup/kam

Ačkoliv při prvním provedení výše uvedených příkazů nebude Duplicity vyžadovat žádné heslo, při pokusu vytvořit rozdílovou zálohu opakováním stejného příkazu se vás Duplicity začne ptát na heslo k soukromému klíči. Je to dáno tím, že šifrováno je opravdu všechno, včetně seznamu zálohovaných souborů, který ovšem v rámci rozdílové zálohy Duplicity potřebuje, aby zjistil rozdíly od poslední zálohy. Pokud nechcete heslo zadávat ručně, můžete použít proměnnou prostředí PASSPHRASE, jak je naznačeno výše:

PASSPHRASE="moje_dlouhe_tajne_a_ne_moc_bezpecne_heslo"
duplicity --encrypt-key CAC193E6 /home/co scp://uzivatel@server/backup/kam

Vyloučení položek z adresáře k zálohování

V řadě situací budete chtít zálohovat z příslušných adresářů pouze určité soubory, ale ne úplně všechny (některé soubory či adresáře je vhodné vyloučit už z principu jako /dev, /proc, /sys, atd.). Za tímto účelem obsahuje Duplicity volbu --exclude, kterou můžete použít opakovaně k vyloučení libovolného množství položek:

duplicity --exclude /home/co/vyradit --exclude /home/co/dev /home/co scp://uzivatel@server/backup/kam

V příkladu výše došlo k vyřazení adresářů /home/co/vyradit a /home/co/dev. Existuje však i volba --include, která slouží k opaku – začlenění adresáře či souboru pro zálohování, i když je jinde specifikován k vyřazení (pokud je např. vyřazen nadřazený adresář). Tuto možnost demonstruje následující příkaz, kde dojde k zálohování adresářů /home a /etc z kořenového adresáře:

duplicity --include /home --include /etc --exclude '**' / scp://uzivatel@server/backup/kam

Obnova dat

Stejně jako v případě rdiff-backup postačí i v případě Duplicity přehodit pořadí adresářů a dojde k obnově dat z poslední úspěšně provedené zálohy:

duplicity --encrypt-key CAC193E6 scp://uzivatel@server/zaloha/ /home/obnoveno

Všimněte si, že je třeba explicitně specifikovat klíč k obnově dat. Pokud byste ho neuvedli, Duplicity by předpokládal použití symetrického klíče a vyzval vás k zadání symetrického hesla. Přirozeně, obnova probíhá pomocí soukromého klíče, ke kterému budete muset heslo zadat.

Tento příklad obnovil aktuální data k datu poslední zálohy, což ovšem ne vždy využijete. Někdy budete potřebovat obnovit data k některému dřívějšímu datu. To je možné provést taktéž, a sice pomocí volby -t a jejího parametru v podobě časového údaje. Čas můžete specifikovat buď absolutně (např. 2010-09-15), nebo relativně (např. 30D k obnově zálohy staré třicet dní). Obnova týden staré zálohy by vypadala takto:

duplicity --encrypt-key CAC193E6 -t 7D scp://uzivatel@server/zaloha/ /home/obnoveno

Výše uvedené příklady obnoví veškerá data, tzn. všechny zálohované soubory a adresáře. Pokud však chcete obnovit jediný soubor nebo adresář, toto chování se vám nebude zamlouvat a budete hledat způsob, jak obnovit pouze to, co potřebujete. K tomu slouží volba --file-to-restore:

duplicity --file-to-restore etc/apache2 -t 7D scp://uzivatel@server/zaloha/ /home/obnoveno

Výše uvedený příkaz obnoví sedm dní starý obsah adresáře etc/apache2 do /home/obnoveno.

Plná záloha na povel a údržba úložiště se zálohami

Duplicity sám volí typ zálohy analýzou obsahu cílového úložiště. Pokud je úložiště prázdné, provede se plná záloha, v opačném případě se provede rozdílová. Jednou za určitou dobu je však vhodné provést plnou zálohu a staré zálohy pak smazat. Abyste provedli plnou zálohu do existujícího úložiště, použijte parametr full:

duplicity --encrypt-key CAC193E6 full /home/co scp://uzivatel@server/backup/kam

Tím zajistíte, že se provede plná záloha bez ohledu na stav úložiště. Pokud víte, že chcete provést plnou zálohu vždy jednou za určitý časový interval, nemusíte postupovat výše naznačeným způsobem, můžete využít volby --full-if-older-than s parametrem v podobě určení času a nechat Duplicity, ať sám rozhodne, kdy provést plnou zálohu:

duplicity --encrypt-key CAC193E6 --full-if-older-than 7D /home/co scp://uzivatel@server/backup/kam

Výše uvedený příkaz provede plnou zálohu, pokud byla poslední plná záloha provedena před více než týdnem. Je jasné, že všechny rozdílové zálohy se váží k poslední provedené plné záloze. Chcete-li úložiště pro zálohování očistit od starých záloh, můžete odmazat některou z dřívějších plných záloh spolu se všemi rozdílovými, které na ní závisí. Abyste to mohli udělat, musíte nejprve vytvořit více plných záloh způsobem naznačeným výše. Jakmile budete mít více plných záloh s určitým časovým odstupem, můžete dřívější zálohy vymazat pomocí voleb remove-older-than či remove-all-but-n-full. První z uvedených voleb smaže všechny zálohy starší udaného času (samozřejmě nedojde k smazání žádné plné zálohy, na které závisí rozdílové zálohy provedené po specifikované době):

duplicity remove-older-than 30D scp://uzivatel@server/backup/kam

Výše uvedený příkaz smaže plné zálohy starší než třicet dní spolu s na ně navázanými rozdílovými, pokud ovšem tyto rozdílové zálohy nebyly pořízeny v průběhu posledních třiceti dní. Pokud jste tedy vytvořili poslední plnou zálohu před 31 dny, smažou se plné zálohy provedené před 31 dny, ale už ne ta, na které závisí rozdílové zálohy mladší třiceti dní.

Volba remove-all-but-n-full pracuje malinko jinak - ta bere jako parametr číslo odpovídající počtu plných záloh (s navázanými rozdílovými), které chcete zachovat. Pokud tedy zadáte jako parametr pro tuto volbu číslo tři, budou ponechány tři poslední plné zálohy (samozřejmě s na ně navázanými rozdílovými), ostatní budou vymazány.

Nahoru

Příspěvky

Správa linuxového serveru: Zálohování pomocí Duplicity
lzap 7. 12. 2010, 22:43:13
Odpovědět  Odkaz 
Pěkné. A jak ty zašifrované soubory v cíli vypadají? Je to nějaký tarball, nebo soubory mají stejné názvy? Škoda že Duplicity neumí i komprimovat (resp. jsem nikde neviděl takovou informaci).
Miroslav Hrončok Re:Správa linuxového serveru: Zálohování pomocí Duplicity
Miro Hrončok 8. 12. 2010, 06:10:21
Odpovědět  Odkaz 
> Jiný způsob práce umožňuje tomuto nástroji nabídnout poněkud jiné spektrum funkcí jako například *komprimaci* či šifrování záloh pomocí GnuPG...
:P
Re:Správa linuxového serveru: Zálohování pomocí Duplicity
Michal Dočekal 16. 12. 2010, 08:12:18
Odpovědět  Odkaz 
Jsou to archívy souborů plus nějaké řídící soubory s názvy, které nemají nic společného s vlastními daty, vypadají třeba takto: "duplicity-full.20101212T102710Z.vol80.difftar.gpg". Z toho lze vyčíst typ zálohy (full či inc), čas proběhnutí zálohy, číslo archívu (velikost pro dělení se dá specifikovat). Také tu jsou soubory s přídomkem manifest se seznamem zálohovaných souborů, samozřejmě jsou také šifrované, pokud šifrování nevypnete. Kompresi Duplicity samozřejmě umí, měl jsem to možná zdůraznit trošku více.
Re:Re:Správa linuxového serveru: Zálohování pomocí Duplicity
Charlie 16. 02. 2011, 16:19:11
Odpovědět  Odkaz 
Já osobně jsem tedy možnost komprimace neviděl a nemohu přesnou syntaxi nikde najít. Můžete případně někdo poradit?
Správa linuxového serveru: Zálohování pomocí Duplicity
filip 8. 12. 2010, 13:43:22
Odpovědět  Odkaz 
Jeste doplnim, ze existuje DUPLICATI, coz ma byt prepis duplicity pod .NET.
Zkousel jsem to a vypada, ze funguje dobre a hezky se integruje do Windows.
Re:Správa linuxového serveru: Zálohování pomocí Duplicity
Michal Dočekal 16. 12. 2010, 08:14:49
Odpovědět  Odkaz 
Děkuji za doplnění, ještě v této souvislosti zmíním deja-dup, velmi jednoduchý frontend k Duplicity.
Správa linuxového serveru: Zálohování pomocí Duplicity
Arch4ngel 11. 12. 2010, 20:28:23
Odpovědět  Odkaz 
Děkuji za článek, zrovna jsem řešil šifrované zálohování a tohle mi padlo do noty, navíc se používá jako zálohování u Zentyal serveru, který dost využívám a můžu říct že obnova po havárii funguje na jedničku (jen nezapomenout heslo :o) ...).
Jen pro ryzí bezpečnost bych doplnil, že po použití proměnné PASSPHRASE je dobré dát na konec skriptu : unset PASSPHRASE
Správa linuxového serveru: Zálohování pomocí Duplicity
KLFMANiK 17. 12. 2010, 08:26:23
Odpovědět  Odkaz 
existuje pri duplicity moznost ako manualne sprisnit kontrolu suborov nielen podla velkosti a casu poslednej zmeny suboru, ale aj podla nejakeho kontrolneho suctu?

priklad: mam 2 rovnake adresare, ale jeden subor zamerne zmenim tak, ze pri rovnakej velkosti je iny obsah, ale pomocou touch nastavim presne taky isty cas ... ani rsync to pri standartnej kontrole nezisti, ale pomocou volby --checksum to rsync zisti (viac info man rsync, -c --checksum)

ako nieco take docielit pri zalohovani pomocou duplicity bez toho, aby som si robil "medzikopiu" zalohovanych suborov pomocou rsync --checksum ???
Správa linuxového serveru: Zálohování pomocí Duplicity
li737 30. 04. 2012, 00:50:15
Odpovědět  Odkaz 
Dobrý den! Je možné pomocí Duplicity zálohovat také data z jiných serverů? Tj. Zdroj dat je na jiném serveru než Duplicity a k tomu se váže druhá otázka je možné mít tento zdroj dat připojený přes sambu? Tj. Je možné takto zálohovat windows počítače jinam? Děkuji za připadnou odpověď.
Správa linuxového serveru: Zálohování pomocí Duplicity
honza 14. 02. 2013, 11:03:10
Odpovědět  Odkaz 
Narazil jsem na problém když vytvořím zalohy na stejný PC který zalohuju tak je v OK, ale když vytvařím zálohy na server se stejnym systememm Ubuntu 12... tak vše jde v pořádku dokud nechcu smazat staré zálohy. Mám vytvořenou full + incre, a když dam vytvořit novou full a smazat předchozí remove-all-but-n-full tak se neodstraní ty komprimované soubory pouze ty textove (omlouvám se za nepřesnosti nemám to momentálně dostupné tak nevím ty nazvy souboru) Výsledkem je že velikost zálohy neustále narusta.
Nevíté čím to muže byt? Práva?

Snad někdo odpoví i u staršího článku. Děkuji

Odpovědět

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