Na navigaci | Klávesové zkratky

Jak na zálohování ještě jednou

Čtěte! Tento článek obsahuje termíty a vulgární slovo! Když jsem včera popisoval zálohování WinRARem, vyhecoval mě v komentářích Pepak vyzkoušet 7-zip. Ten je narozdíl od WinRARu zdarma (LGPL) a disponuje ještě účinnější kompresí. Autoři obou aplikací jsou Rusové, což čistě subjektivně vnímám jako určitou záruku kvality.

Troška takzvané terminologie

Nejprve si ale vysvětlíme dva odporné termíty:

Inkrementální neboli přírůstkové zálohování: (incremental) vytvoří se kompletní záloha a poté se zálohují jen soubory nové či změněné od předchozí zálohy (plné či inkrementální). Tady se výborně uplatní archive bit, který indikuje změnu souboru.

Rozdílové zálohování: (differential) opět se vytvoří kompletní záloha a poté se zálohují jen změněné soubory od prvotní plné zálohy. Změnu lze detekovat podle data modifikace souboru nebo (lépe) porovnáním s primárním archívem.

Inkrementální zálohy obecně vedou k menším archívům. Obnovování je náročnější, musíme totiž postupně projít všechny přírůstkové archívy. V případě rozdílového zálohování stačí zkontrolovat nejvýše dva archívy (rozdílový, a není-li v něm soubor obsažen, tak primární).

Inkrementální zálohování je doménou WinRARu, naopak 7-zip je velmi zdatný přeborník v zálohování rozdílovém.

7-zip

Program 7-zip rozumí celé řadě kompresních metod. Aby byla jeho účinnost vyšší, než v případě WinRARu, je potřeba tvořit nativní archívy 7z a použít co největší slovník (v paměti si ukousne kapacitu asi 11× větší, než je velikost slovníku). Silná komprimace není z nejrychlejších, ale to u nočního zálohování vůbec nevadí.

7-zip zvládá šifru AES s délkou klíče 256 bit (WinRARu 128 bit). Naopak neumí archívy zabezpečit proti poškození, což lze suplovat programem PAR2. Pokud jde o spolehlivost, byl bych opatrný a každý archív raději zkontroloval příkazem 7z.exe t backup.7z.

Jak jsem zmiňoval, 7-zip má výbornou podporu pro rozdílové zálohování. Při komprimování stačí uvést cestu k plnému archívu, přikázat, aby tento soubor nemodifikoval, a výstup směřovat do nového souboru. A teď pozor: pro jakoukoliv situaci typu soubor na disku je novější než v archívu, soubor je smazán apod. lze přesně definovat akci, která se má vykonat: buď soubor ignorovat, zkopírovat z původního archívu (bez rekomprese), nově zkomprimovat nebo do archívu vložit s příznakem smazaný.

Zvláště ta poslední možnost je naprosto úžasná. Při dekomprimaci pak dochází k mazání takto označených souborů. To WinRAR neumí. A zde vidím rozhodující kritérium při volbě mezi 7-zip a WinRARem. Ano, 7-zip je pro zálohování lepší.

Příkazová řádka

Ale žádný spánek na vavřínech. Teď se dostaneme k neslabším momentům 7-zip. Asi dvě hodiny jsem bojoval s tím, že program archivuje adresáře, které nechci:

7z.exe a -r backup.7z c:\test\

Compressing test
Compressing test\readme.txt
Compressing photos\test
Compressing photos\test\DSC_1168.JPG
...

Než jsem pochopil, že Igor Pavlov vymyslel natolik nestandardní chování parametru -r, že jsem ho v noci dlouze proklínal.

Takže, s parametry se musí tuze opatrně. Začněme vytvořením prvotního plného archívu:

7z.exe a -mx9 -ms=100f -ptajneheslo -mhe=on -xr!*.tmp -xr!*.bak -i@list.txt \\zalozni_server\zaloha2006-08-08
  • a vytvoří nový archív
  • -r prohledávání podadresářů – nesmí se použít!
  • -mx9 nejúčinější kompresní metoda
  • -ms=100f vytváří „solid groups“ po sto souborech
  • -pHESLO zapne šifrování AES
  • -mhe=on šifruje i názvy souborů, nejen obsah
  • -v4480m vytváří archívy o velikosti 4480MB, které se vejdou na DVD (nepoužívám, nefunguje pak rozdílové zálohování)
  • -xr!*.tmp tyto soubory vynechá
  • -i@list.txt odkazuje soubor se seznamem adresářů k archivaci

Bohužel, není možné archivátor přimět, aby soubory ukládal s plnou cestou. Tedy při uvedení větví D:\Data D:\Zaloha\Data má tendenci v kořenu archívu vytvořit jediný adresář Data a končí to chybou. Našel jsem částečné řešení použitím hvězdičky v cestě alespoň jednoho adresáře (u něhož nehrozí kolize), ale 7-zip předtím proskenuje celý disk, což šíleně dlouho trvá a je doprovázeno hláškou o nedostupnosti D:\System Volume Information\. Ivane!

Takže seznam adresářů v souboru list.txt by mohl vypadat:

D:\Web*\
D:\Posta\
D:\Databaze\

Jak vytvořit rozdílový archív:

7z.exe u -mx9 -ms=100f -ptajneheslo -mhe=on -xr!*.tmp -xr!*.bak -i@list.txt -u- -up0q3x2z0!\\zalozni_server\diff2006-08-08 \\zalozni_server\zaloha2006-08-08

Všimněte si, že jako výstupní soubor je uveden původní plný archív. Ten je poté uzamčen:

  • -u- zakáže modifikovat výstupní soubor
  • -up0q3x2z0![filename] definuje jiný výstupný soubor, do kterého uloží jen změněné nebo smazané (sic!) soubory.

Tak a to je vše.

Komentáře

  1. Jan Brašna http://www.janbrasna.com #1

    Jsi masochista. Matfyzáky na tebe! … ;)

    před 11 lety
  2. Shaman http://www.adaptic.cz #2

    Che, chvíli jsem si myslel, že ono vulgární slovo je chyba při sazbě, než mi to docvaklo… Asi je to tím, že tato slova moc často nepoužívám, šetřím si je na horší časy.

    před 11 lety
  3. zimmi http://www.zimmi.cz #3

    avatar

    Tohle je na mě moc…

    před 11 lety
  4. radek #4

    Já jsem přestal používat 7z právě kvůli výši zmíněným zmatkům s cestama – navíc s každou novou verzí se to chovalo jinak.
    Na fóru Igor ujišťuje, že tohle chování je zcela standardní ;)
    Dále byl problém s přírůstkovým zálohováním a volbou -v, kdy pokus o zálohu cca 20GB dat končil občas tím, že původní archiv smazal.
    On si totiž při rozdílovém zálohování udělá kopii plného archivu a na něm teprve zjišťuje rozdíl, alespoň tak se mi to jevilo.

    Prozatím jsem přešel na Cobian.

    před 11 lety
  5. Huggi http://rhizopus.net #5

    a nebude nejaky porovnani o kolik je ve vysledku ta komprimace lepsi..jestli to za ty slozitosti stoji ;)

    před 11 lety | reagoval [17] pepak
  6. satyr_ik #6

    avatar

    Už som to písal do komentárov k predchádzajúcemu článku, ale keďže dgx môže znova strašiť s tými ohavnými parametrami, môžem aj ja. Keď vidím zápis podobný tomuto:„7z.exe a -mx9 -ms=100f -ptajneheslo -mhe=on -v4480m -xr!*.tmp -xr!*.bak…“ robí sa mi zle. Myslím, že pre človeka, ktorý sa vyzná v takom niečom by naprogramovanie 10 buttonov nemusel byť zásadný problém. Určite menší ako mňa naučiť sa jazyk MATRIXu

    před 11 lety | reagoval [17] pepak
  7. Vasek #7

    avatar

    Ciste nahodou, neresil nekdo problem zalohovani z linuxu na windows? Zakaznik chce kazdy mesic vypalit kompletni zalohu dat z jednoho adresare na linux masine (cca 20GB), tak by me bodnul nejaky poradny system na backupy. Ted to mam resene tak, ze tam mam inkrementalni TAR, ale musim to pak na windows rozbalit, palit rucne a trefovat se na velikost dvd (na dvd chce vyslovne cele soubory, ne rary, aby sel vytahnout kdykoliv libovolny soubor).

    před 11 lety | reagoval [9] radek [21] David
  8. radek #8

    1. Jenom kvůli kompresi to za to nestojí (zkuste si v 7z zapakovat třeba tak 5GB dat/10tis souborů na max kompresi…)
    2. Určitě to není složitější než Rar, parametrů je v 7z asi tak třetina oproti Raru.
    3. Jestli to někdo řeší jenom pro zapakování jednoho souboru, aby ho poslal mailem, tak pro něj příkazová řádka není ta pravá.

    Pokud ale hledáte řešení na přehlednou archivaci dat ze sítě, tak to už smysl má.

    4)
    to Satirik: 7-zip má grafické rozhraní…

    před 11 lety | reagoval [12] satyr_ik
  9. radek #9

    #7 Vasku,

    1. Cobian, v módu bez komprese
    2. xcopy apod.
    3. problém bude rozdělení nezkomprimovaného adresáře na DVD. Určitě by na to šel udělat prográmek, kterej by to inteligentně roztřídil, ale lepší řešení by byly samostatné archivy (co DVD, to spustitelný archiv).
    před 11 lety | reagoval [14] Vasek
  10. tark http://fotoblog.blacksuns.net #10

    avatar

    No, vzhledem k tomu, že jsem si to právě předělal na RAR, tak se mi to měnit nechce :-D

    před 11 lety | reagoval [17] pepak
  11. Pavel http://www.lasakovi.com/pavel/ #11

    avatar

    ale od té doby jsme na něj přešel ,je to tak měsíc :) a jsme tomu rád

    Před měsícem tu byla možnost winrar ziskat gratis. Sice starší verzi, bez možnosti aktualizace…

    před 11 lety
  12. satyr_ik #12

    avatar

    #8 radku, Aha, díky, nevedel som. Totiž kým HejTi napísal rovno a dobre že nie veľkými písmenami, že Cobian je user friendly, dgx 7-zip v mojich očiach hneď potopil tými atribútmi v príkazovom riadku. Ale keďže Cobian som si už vyskúšal, nastavil a som spokojný, 7-zip zatiaľ neriešim.

    před 11 lety
  13. Vasek #13

    avatar

    Prave to rozdelovani je na celym procesu nejotravnejsi. To manualni udelani inkrementalni zalohy a rozbaleni je jeste ok, ale rozdelovat 20GB a tisice souboru rucne na dvd a palit je strasne :(. Idealni by byl zalohovaci program, ktery obstara cely proces vcetne vypaleni dat, ale zatim jsem takovy nevygooglil.

    před 11 lety
  14. Vasek #14

    avatar

    Ten prispevek vyse byla reakce na #9 radek, nejak se to neoznacilo.

    před 11 lety
  15. Zdeněk Košťál #15

    avatar

    Velice dobré články, určitě se budou někdy hodit. Třeba se někdy zblázním a pochopím to. Ono sice není těžké si tohle opsat, jenže takovéto spouštění každý týden asi není to pravé. (Navíc když se něco posere, tady řešení asi nenajdu.) Neznáte něco alespoň trochu user-friendly? Jde mi jen o zálohování pár stovek MB (maximálně nějaké projekty). A kvůli tomu se mi teda nechce dělat takovéhle prasárny anebo to dělat ručně. Zdržuje to. Tou první větou v minulém článku jsem si uvědomil, že na disku mám hodně věcí, o které bych nechtěl přijít, ale pak se mrknu tady na ty přehuštěné řádky téměř nesrozumitelného kódu a točí se mi hlava. Takže jestli někdo z vás kápne na něco trošku jednoduššího, kde by jen stačilo zmáčknout tlačíkou a kochat se tím, co se děje za oknem, napište to sem. Dík

  16. tark http://fotoblog.blacksuns.net #16

    avatar

    #15 Zdeňku Košťále, Zdeňku, s těmihle „nesrozumitelnými“ řádky děláš jednou, vím, každý není technicky založený, ale uděláš to jednou, uložíš do .bat souboru (v zásadě seznam příkazů co udělat v command lajně – alias ms dos). potom jen zmáčkneš tlačítko a automaticky se to zazálohuje. a pokud to chceš zautomatizovat, máme tu Naplánované úlohy ve Windows – stačí nastavit… :-)

    před 11 lety
  17. pepak #17

    avatar

    Myslim, ze 7-Zipu muzes verit – pouzivam ho minimalne 5 let a za tu dobu nebyl jediny problem.

    Co se tyce tech celych cest, resim to tim, ze napred skocim do rootu dotycneho disku a pak dam zazalohovat relativni cestu:

    PUSHD D:\
    7Z a -r Z:\Archiv.7z Dokumenty* Weby* Blbosti*
    POPD

    Urcite nemuzu doporucit -mx9, ktera uz neprinasi zadne velke zlepseni v kompresi, ale zato je podstatne pomalejsi. Uplne staci nechat parametry defaultni a jen nastavit co nejvetsi kompresni slovnik (-md=128m)

    #5 Huggi, Jak kdy, nekdy je lepsi RAR, nekdy je lepsi 7-Zip. Typicky se 7-Zip pohybuje rekneme na 90–105% velikosti RARu, v prumeru na mych datech ma nejakych 5% prevahu. Ovsem jeho schopnost pouzivat velke kompresni slovniky skvele pomaha, pokud skladujes vic verzi tehoz souboru – pak dosahuje 7-Zip klidne desetkrat mensich souboru nez RAR.

    #6 satyr_iku, 7-Zip pochopitelne ma i okenni prostredi. Ovsem to se da jen velmi problematicky ovladat bez zasahu cloveka. Proto ty krypticke parametry na prikazove radce, aby se to dalo pohodlne skriptovat…

    #10 tarku, To mam vyresene tak, ze muj zalohovaci BATak ma na zacatku definici kompresniho programu:

    set backup_compress=7z a -mmt=on -md=32m -r -sfx7z.sfx -scsdos -t7z

    A volani pak delam pres to:

    %backup_compress% archiv.7z d:\data*

    Prechod na jiny komprimak by byl zalezitosti chvilky (kdybych vyskrtl to diferencialni zalohovani, samozrejme).

    před 11 lety
  18. Petr Dvořák http://dvorak.tisnof.cz #18

    #15 Zdeňku Košťále, Už to tu bylo několikrát zmiňováno, zkus mrknout na Cobian Backup. Ten user-friendly rozhodně je.

    před 11 lety
  19. Lukoko http://lukoko.name #19

    avatar

    Já se těším na todle: http://www.apple.com/…machine.html

    před 11 lety
  20. lední brtník #20

    před 11 lety
  21. David #21

    #7 Vasku, Na zálohování z linuxu do windows nebo obecně v linuxu je nejlepší rdiff-backup.
    Tenhle program je vlastně vylepšením rsyncu. Rsync je schopen synchronizovat obsah dvou adresářů tak, že přenese pouze rozdíly. To by nebylo nic tak úžasného, ale on to dokáže i v rámci jednoho souboru. Je to možné dělat i po síti pomocí ssh, takže traffic zůstává minimální a je to bleskově rychlé, pokud zrovna nedojde k velkým změnám.
    Rdiff-backup jde ještě dál. Nejenže umí synchronizovat cíl se zdrojem, ale také udržuje zpětné rozdílové informace (zkomprimované). V praxi to vypadá tak, že máte na disku k dispozici aktuální kopii a pomocí vhodně parametrizovaného příkazu rdiff-backup můžete získat stav jakéhokoli podstromu nebo souboru přesně v té podobě jak vypadal např. 14.6.2006 nebo před týdnem.

    Pokud cíl leží na Windows je možné použít dva způsoby:

    1. Připojit zapisovatelný Windows share jako CIFS nebo SMBFS file system a na ten provádět zálohování.
    2. Nainstalovat na Windows cygwin prostředí, spustit ssh server a nainstalovat rdiff-backup popř. rsync.

    Aby byl rsync potažmo rdiff-backup schopen pracovat po síti musí být na druhé straně nainstalován a spustitelný přes ssh.

    před 11 lety | reagoval [22] Andrew
  22. Andrew #22

    #21 Davide, Přesně tak, rdiff-backup můžu jenom doporučit. Dříve jsem používal duplicity, ale s rdiff-backup se to nedá srovnat. Na zálohovacím serveru mám přímo přístupnou aktuální verzi souboru a bokem komprimované změny.
    Jediná nevýhoda je, že je příkazová řádka-only. Na druhou stranu, chvíli strávíte vymýšlením příkazu a zbytek života ho už jenom používáte :) Jenom nevím, jak je to s šifrováním zálohy – tak, jak to používám já, to na zálohovacím serveru udržuje soubory přesně tak, jak jsou, tzn. žádná komprese, žádné šifrování. Duplicity obojí umí, ale u mě vyhrálo to, že s rdiff-backup mám v záloze k okamžitě k dispozici poslední verzi souboru.

    před 11 lety
  23. petv2 #23

    NO jestli bych se na to radši ne...... :)

    před 11 lety
  24. pa3k #24

    Úplne vpoho vystačím s dennou inkrementálnou zálohou a mesačným kompletom. V archívoch sa až tak moc hrabať nepotrebujem, stačí mi v prípade straty dát čo najrýchlejšie rozbaliť posledný „komplet“ a všetky novšie prírastkové archívy. Zatiaľ som obnovu dát zo záloh nepotreboval ani raz. Klop, klop.

    7 zip, ktorý popisuješ v článku vyzerá super, ale takéto možnosti využije asi len malé percento binárnych schyzofrenikov :)

    před 11 lety
  25. David Grudl http://davidgrudl.com #25

    avatar
    před 11 lety
  26. Karel #26

    Taky jsem se nechal zlákat hotovým návodem a vypadá to, že konečně začnu pravidelně zálohovat. Díky dgx! Narazil jsem ale na jeden problém, třeba mi ho pomůžete vyřešit.

    Pokud používám dělení archivu na několik částí (např. pomocí přepínače -v4480m) 7zip přidá ke jménu jednotlivých archivů příponu s pořadovým číslem souboru. Až sem je všechno v pořádku.

    Pokud ale chci k takto vytvořené záloze vytvořit rozdílový archív mám problém – jak odkazovat na základní archiv?

    Abych byl konkrétní:

    • základní archiv: 7z.exe a -t7z -mx7 -ms=100f10m -v4480m -xr!*.tmp -xr!*.bak z:\petr.vorisek.7z e:\user_data\petr.vorisek
    • rozdílový archiv: 7z.exe u -t7z -mx7 -ms=100f10m -v4480m -xr!*.tmp -xr!*.bak -u- -up0q3x2z0!z:\petr.vorisek.diff.2006-18-08.7z -ms=off z:\petr.vorisek.7z.001 e:\user_data\petr.vorisek

    A právě v rozdílovém archivu je problém – dostanu se k hlášce „System error: not implemented“. Pokud z názvu základního archivu uberu pořadové číslo .001, dojde k vytvoření nové kompletní zálohy.

    Možná, že jsem četl dokumentaci lajdácky a řešení je zjevné… ??

    před 11 lety | reagoval [27] David Grudl
  27. David Grudl http://davidgrudl.com #27

    avatar

    #26 Karle, popravdě řečeno nevím, když jsem viděl, jak 7zip řeší přidávání přípon, tak jsem rozdělování úplně vypnul.

    před 11 lety
  28. SiseL #28

    avatar

    Páni, a čo tzv. „stealth mode“, zálohovanie súborov počas ich používania systémom (win)?
    Osobne som prinúteny backup notebooku robiť počas času práce, napríklad .pst by mohlo robiť šarapatu, nakoľko outlook si na ňom „drží lock“.
    Ďakujem za info.

    před 11 lety
  29. majo #29

    Můžu mít ještě dotaz na provádění typu zálohy a jak je to s mazáním archivního příznaku u 7-zip. V článku se píše že 7-zip je výnikajíci pro provádění rozdílového zálohování za pomoci porovnání s plným archívem.
    Měl jsem zato že plná záloha mi zruší archivní bit a při změně nějakého souboru se archivní bit u tohoto souboru opět nastaví. A teď pokud zálohuju inkrementálně, každá inkrem. záloha opět vymaže archivní bity. Pokud zálohuju diferenciálně, archivní bit se nemění a tudíž diferenc. záloha mi zazálohuje vždy jen ty soubory u kterých je arch. bit nastaven a nemusí se nic porovnávat s plnou zálohou.

    před 11 lety | reagoval [31] David Grudl
  30. majo #30

    Tak jsem to asi pochopil. 7-zip je geniální v tom, že do archivu dokáže vložit příznak o smazaném souboru a při obnově ho pak smaže. Tato geniální vlastnost vrátí stav souborů do bodu poslední zálohy, což bych jsem neměl pokud bych zálohoval standardní metódou, ale přitom bych už měl nějaké soubory smazané, které by ovšem na plné záloze byli. Inkrementální obnova by mi je nesmazala.

    před 11 lety
  31. David Grudl http://davidgrudl.com #31

    avatar

    #29 majo, ano, tak to funguje. Jenže má to malý háček. Podle archivního bitu nelze poznat, že nějaký soubor či adresář byl smazán. Případně přejmenován. Tedy když potom takovou zálohu obnovíte, budete mít v adresáři i všechny již záměrně smazané soubory, přejmenované soubory i s původním názvem atd.

    Tohle právě řeší 7zip. Umí zjišťuje rozdíl na základě porovnání (nejspíš času a velikosti) s plným archívem, a tak poznat i smazané soubory. Do diferenciální zálohy si je poznamená s příznakem Smazat. Archivní bit se pak nemusí vůbec používat.

    před 11 lety

Tento článek byl uzavřen. Už není možné k němu přidávat komentáře.