Hlavní navigace

Šifrované inkrementální zálohy s Duplicity

Ondřej Caletka 31. 10. 2011

Říká se, že lidé se dělí na ty, co zálohují a na ty, kteří ještě nepřišli o data. Patříte-li do druhé skupiny, může vám pomoci nástroj duplicity. Ten dokáže výrazně zjednodušit celý proces zálohování. Ačkoli používá stejné jádro jako známější rdiff-backup, může se Duplicity pochlubit několika zajímavými vlastnostmi.

Pythonovský skript Duplicity slouží ke snadnému vytváření a obnovování inkrementálních záloh, které dokáže i šifrovat. Navíc v maximální možné míře šetří objem přenesených dat. K tomu používá dobře známý protokol programu rsync, konkrétně implementovaný v knihovně librsync. V tomto ohledu je přístup Duplicity stejný jako jeho mladšího bratra, programu rdiff-backup, o kterém jsme již na Rootovi psali.

Co je však rozdílné, je přístup k úložišti zálohy. Duplicity dokáže uložit zálohu na jakékoli úložiště, přičemž ze strany úložiště není třeba žádná kooperace. Protože zálohy mohou být šifrovány a podepisovány, není problém přenášet je po síti třeba obstarožním protokolem FTP. Jste-li příznivci cloudových řešení, nabízí Duplicity přímou podporu pro ukládání do služby Amazon S3.

Jak to funguje

Protokol rsync ke své činnosti potřebuje kontrolní součty a hashe jednotlivých částí souborů. Při spuštění rsync nejprve zdrojový i cílový soubor analyzuje, spočítá kontrolní součty jednotlivých částí souborů, následně vyhodnotí, které části je potřeba přenést a tyto přenese. Pokud jde o přenos přes síť, je třeba aby přenos probíhal vlastním protokolem rsync. Pak si klient a server vymění pouze nezbytné minimum dat. Naproti tomu pokud rsync spustíme lokálně a necháme jej přenášet například soubor z NFS svazku na lokální disk, k žádné úspoře přenosové kapacity nedojde. Rsync bude muset celý soubor z NFS svazku přečíst, aby bylo možné vůbec stanovit, které části se liší od lokálního souboru.

Stejným problémem trpí i rdiff-backup. Duplicity jej však obchází tak, že během vytváření zálohy zapisuje „stranou“ také spočtené kontrolní součty jednotlivých bloků. Soubor s těmito metadaty je relativně malý a tak kromě úložiště zůstává i na zálohovaném stroji. Při vytváření inkrementální zálohy již není třeba přečíst celý obsah úplné zálohy, spočtené kontrolní součty se porovnávají s dříve vypočítanými hodnotami. Mimochodem, stejný princip předem vypočtených kontrolních součtů využívá i program zsync, pomocí kterého můžete například výrazně urychlit stahování nových verzí Ubuntu.

Jak to spustit

Pokud jste někdy používali rdiff-backup, budete ve volbách pro výběr souborů k záloze jako doma. Základní syntaxe programu je:

$ duplicity [akce] [volby] <zdroj> <cíl>

Platí pravidlo, že na místě zdroje a cíle se cesta k úložišti záloh udává ve formátu URL, zatímco cesta k souborům, které mají být zálohovány, se udává přímo. Chceme-li například zálohovat adresář /home do adresáře /zaloha, použijeme následující příkaz:

$ duplicity /home file:///backup

Parametr akce je nepovinný. Duplicity samo určí z pořadí argumentů, zda je požadována záloha nebo obnovení, stejně tak automaticky podle obsahu úložiště určí, zda se má provést úplná nebo inkrementální záloha.

Bez dalšího nastavování Duplicity zálohy šifruje pomocí GnuPG symetrickou šifrou s heslem, na které se zeptá po spuštění. Pro neinteraktivní spuštění je možné heslo uložit před spuštěním programu do proměnné PASSPHRASE. To ukazuje následující složitější příkaz, zároveň s příkladem, jak ukládat na vzdálený server prostřednictvím SFTP protokolu a přihlášení speciálním SSH klíčem:

export PASSPHRASE='MojeSifrovanaZaloha'
duplicity --verbosity 5 --include-globbing-filelist filelist.txt \
  --ssh-options="-oIdentityFile=duplicityscpkey_rsa -oIdentitiesOnly=yes" \
  / scp://uploader@server.example.com//home/backup

V tomto případě zálohujeme celý kořenový adresář s výjimkami, popsanými v textovém souboru filelist.txt:

- /proc
- /sys
- /dev
- /tmp
- /var/tmp
+ /var/cache
- **/.cache

Na pořadí záznamů v souboru záleží, při nalezení shody se další řádky neporovnávají. Jednoduchá hvězdička nahrazuje sekvenci libovolných znaků mimo lomítka, dvě hvězdičky nahrazují libovolnou sekvenci znaků.

Jak vypadá záloha

Po provedení zálohy se na cílovém úložišti vytvoří několik souborů. Vlastní zálohovaná data se ukládají v souborech s příponou difftar.gpg, což je šifrovaný tar-archiv. Tento formát neobsahuje žádný index, při každém požadavku na získání byť jediného souboru je třeba přečíst celý archiv od začátku. Tento problém řeší Duplicity tak, že po dosažení určité velikosti (standardně 25 MB) soubor s archivem ukončí a pokračuje novým souborem. Index, obsahující informaci který soubor je ve kterém archivu, je uložen do souboru s příponou manifest.gpg, což je šifrovaný textový soubor:

$ gpg -d duplicity-inc.20111029T163109Z.to.20111029T163140Z.manifest.gpg
Hostname pc.example.com
Localdir /
Volume 1:
    StartingPath   .
    EndingPath     newfile3 3
    Hash SHA1 264dbe702e1f3d8f037d24ec2f2a4faba039f9b6
Volume 2:
    StartingPath   newfile3 4
    EndingPath     newfile4
    Hash SHA1 d6a640f491ef717a99a13bcba7a2255727ee2b27

V tomto případě byly přidány do zálohované oblasti čtyři soubory newfile1  – newfile4, Duplicity vygenerovalo dva tar archivy. Kromě archivů se zálohovanými daty a popřípadě přírůstky Duplicity vygeneruje ještě archiv s příponou sigtar.gpg. Tyto archivy obsahují vypočítané kontrolní součty jednotlivých částí zálohovaných souborů. Spolu s manifestem zůstávají uloženy i zálohovaném počítači, standardně v cestě ~/.cache/duplicity/. Pokud je však smažete, nic se neděje – při dalším použití Duplicity se obnoví z úložiště.

Další práce se zálohami

Nastavíme-li pravidelné zálohování, bude objem zaplněného prostoru v úložišti jen přibývat. Přehled o zálohách v úložišti získáme příkazem  collection-status:

$ duplicity collection-status file:///backup
 Type of backup set:                            Time:      Num volumes:
                Full         Sat Oct 29 18:02:51 2011                 1
         Incremental         Sat Oct 29 18:05:11 2011                 1
         Incremental         Sat Oct 29 18:20:55 2011                 1
         Incremental         Sat Oct 29 18:21:56 2011                 2
         Incremental         Sat Oct 29 18:31:40 2011                 2

Obnovení některé zálohy docílíme jednoduše prohozením pořadí argumentů. Duplicity z bezpečnostních důvodů odmítne obnovovat zálohu do neprázdného adresáře. Chceme-li obnovit zálohu z konkrétního data, můžeme – opět obdobně jako u rdiff-backup – pomocí přepínače -t určit okamžik, ke kterému si přejeme zálohu obnovit:

$ duplicity -t 2011-10-29T18:21:00+02:00 file:///backup ./restore

Aby bylo možné po čase staré zálohy smazat, je třeba vytvářet úplné zálohy častěji, než jen poprvé. Program si hlídá závislosti inkrementálních záloh a odmítne vymazat ty zálohy, které jsou nutné k obnovení novějších. Častější vytváření úplných záloh je také bezpečnější, neboť snižuje počet souborů, které jsou třeba k obnovení poslední verze. Vytvoření úplné zálohy programu vnutíme klíčovým slovem  full.

Odstranění záloh starších než např. dva týdny dosáhneme následujícím příkazem. Bez volby --force program pouze vypíše seznam záloh k vymazání.

$ duplicity remove-older-than 2W --force file:///backup

Šifrování a podepisování

Kromě šifrování záloh symetrickou šifrou je také možné použít šifrování asymetrické, nebo šifrování vypnout, není-li potřeba. Pomocí přepínačů --encrypt-key a --sign-key je možné také nastavit různé asymetrické klíče pro podepisování a pro šifrování záloh. K čemu to může být dobré? Pro zašifrování zálohy stačí veřejná část klíče, teprve k podpisu je třeba privátní klíč. Pokud použijeme pro každou činnost jiný klíč, není třeba, aby zálohovaný stroj vůbec vlastnil privátní část šifrovacího klíče. Ta může být bezpečně uložena třeba v trezoru a použita pouze v případě, kdy bude třeba zálohy obnovit.

Vygenerování šifrovacích a podepisovacích klíčů je nad rámec tohoto článku, zájemcům doporučuji buď starší seriál GnuPG: Komunikace po Internetu bezpečně, nebo velmi podrobný článek Unattended, Encrypted, Incremental Network Backups

Závěr

K zálohování používám již delší dobu program rdiff-backup. Protože zálohy ukládám na linuxový server, je přenos efektivní a nemám důvod nic měnit. Pokud bych ale měl někdy v budoucnu ukládat zálohy na USB disk, popřípadě domácí NAS připojený přes NFS/CIFS, určitě použiji Duplicity.

Co používáte pro zálohování vy? Podělte se s ostatními v diskuzi pod článkem!

Našli jste v článku chybu?

4. 11. 2011 8:56

Nemusí jít ani o stovky giga. Když zalohuji na Amazon S3 trvá to i dva dny.

1. 11. 2011 19:02

Šifrovaný je celý TAR archiv, takže se není možné dostat k názvům souborů. Jinak samotné soubory se šifrovanými archivy mají tvar např:

duplicity-full.20111025T211016Z.vol1.difftar.gpg
Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Root.cz: Pinebook: linuxový notebook za 89 dolarů

Pinebook: linuxový notebook za 89 dolarů

DigiZone.cz: Sony KD-55XD8005 s Android 6.0

Sony KD-55XD8005 s Android 6.0

DigiZone.cz: ČRa DVB-T2 ověřeno: Hisense a Sencor

ČRa DVB-T2 ověřeno: Hisense a Sencor

Vitalia.cz: 9 největších mýtů o mase

9 největších mýtů o mase

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

120na80.cz: Jak oddálit Alzheimera?

Jak oddálit Alzheimera?

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

DigiZone.cz: NG natáčí v Praze seriál o Einsteinovi

NG natáčí v Praze seriál o Einsteinovi

120na80.cz: Horní cesty dýchací. Zkuste fytofarmaka

Horní cesty dýchací. Zkuste fytofarmaka

Měšec.cz: Jak levně odeslat balík přímo z domu?

Jak levně odeslat balík přímo z domu?

Vitalia.cz: Jmenuje se Janina a žije bez cukru

Jmenuje se Janina a žije bez cukru

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Podnikatel.cz: Udávání kvůli EET začalo

Udávání kvůli EET začalo

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte