Č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.