Č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
Jan Brašna #1
Jsi masochista. Matfyzáky na tebe! … ;)
Shaman #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.
zimmi #3
Tohle je na mě moc…
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.
Huggi #5
a nebude nejaky porovnani o kolik je ve vysledku ta komprimace lepsi..jestli to za ty slozitosti stoji ;)
satyr_ik #6
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
Vasek #7
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).
radek #8
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í…
radek #9
#7 Vasku,
tark #10
No, vzhledem k tomu, že jsem si to právě předělal na RAR, tak se mi to měnit nechce 😁
Pavel #11
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…
satyr_ik #12
#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.
Vasek #13
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.
Vasek #14
Ten prispevek vyse byla reakce na #9 radek, nejak se to neoznacilo.
Zdeněk Košťál #15
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
tark #16
#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… 🙂
pepak #17
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).
Petr Dvořák #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.
Lukoko #19
Já se těším na todle: https://www.apple.com/macos/ventura/
lední brtník #20
#15 Zdeňku Košťále, nebo https://www.slunecnice.cz/sw/zipbackup/
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:
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.
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.
petv2 #23
NO jestli bych se na to radši ne...... :)
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 :)
David Grudl #25
Soutěž komprimačních programů
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í:
7z.exe a -t7z -mx7 -ms=100f10m -v4480m -xr!*.tmp -xr!*.bak z:\petr.vorisek.7z e:\user_data\petr.vorisek
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é… ??
David Grudl #27
#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.
SiseL #28
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.
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.
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.
David Grudl #31
#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.
Tento článek byl uzavřen. Už není možné k němu přidávat komentáře.