LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> Linux v příkazech - archivace a komprese

V tomto díle se seznámíme s příkazy pomocí kterých lze ukládat adresáře a soubory do archivu nebo je komprimovat.

15.9.2004 08:00 | Petr Hatina | Články autora | přečteno 79647×

Pojem archivace a komprese

Jako archivaci rozumíme uložení kopie dat na jiné místo, nejčastěji pro zálohování dat pro potřebu obnovy v případě zničení či poškození originálních dat. Používá se rovněž pro distribuci.

Kompresí pak rozumíme (pro potřeby archivace) bezztrátové zmenšení velikosti dat. Data jsou kompresním programem převedena do komprimovaného tvaru a uložena ve zvláštním souboru. Pro zpřístupnění původních dat je třeba provést opačnou operaci – dekomprimaci dat, která obnoví data do původního souboru.

Komprese dat se rovněž používá velmi často, a to jak pro archivaci, tak pro distribuci dat, výrazné zmenšení velikosti dat může být v případě distribuce přes Internet dost rozhodujícím faktorem.

Program tar

S příkazem tar se asi budete setkávat nejčastěji, používá se jako standardní archivační prostředek pro distribuci programů a zdrojových souborů v Linuxu. Kromě toho s ním úzce spolupracují běžné kompresními programy.

Tar slouží k archivaci, k uložení určených souborů do jednoho soubor archivu. Pokud je třeba kupříkladu archivovat celý adresář uživatele bu včetně podadresářů, použije se příkaz:

tar -cvf bu.tar /home/bu

V příkladu je použit parametr -c (tedy vytvoření archivu). Vzhledem k tomu, že tar je původně určen pro archivaci na pásku, je nutné při archivaci do souboru uvádět dále parametr -f jménosouboru archivu . Parametr -v způsobí vypisování informací o průběhu archivace.

Výsledkem je soubor bu.tar. Jeho obsah si můžeme vypsat příkazem

tar -tf bu.tar

Pokud chceme, aby se současně při archivace provedla i komprese programem gzip, zapneme jí parametrem -z.

tar -cvzf bu.tar.gz /home/bu

Výsledný archiv je nyní menší a má rozšířenou příponu .tar.gz, která signalizuje kompresi programem gzip.

Obdobně lze v programu tar provést kompresi pomocí bzip2, pomocí parametru -j. Výsledkem je soubor s příponou tar.bz2.

tar -cvjf bu.tar.gz /home/bu

Opačnou operaci, tj. obnovu dat z archivu do původního tvaru, provedeme s pomocí parametru -x:

tar -xvf bu.tar 

Pokud nemá archiv příponu jen tar, znamená to, že jeho obsah je komprimován. Proto při obnovení přidáme parametr který současně provede i dekomprimaci programem příslušným k uvedené příponě:

tar -xvzf bu.tar.gz  #obnova souborů komprimovaných s gzip
tar -xvzf bu.tgz     #to samé, jen je použit zkrácený tvar přípony
tar -xvjf bu.tar.bz2 #obnova souborů komprimovaných s bzip2
tar -xvZf bu.tar.Z   #to samé pro dříve užívaný compress

Tar není jen jediný program, lze jej chápat spíše jako standard (popis taru je součástí POSIX). Nejrozšířenější implementací zejména v GNU/Linux systémech je GNU tar, existují ale i jiné implementace, např. vynikající star, který kromě vyšší rychlosti obsahuje sofistikované filtry pro výběr souborů k archivaci, podporu ACL, automatickou detekci formátu, lepší podporu POSIX standardů apod.

Kompresní programy můžeme použít i samostatně, pro kompresi a dekompresi souborů.

gzip

Program gzip se pro kompresi používání nejčastěji. Výsledný soubor má příponu .gz. Komprimace souboru plan.txt se provede příkazem:

gzip plan.txt 

Výsledkem je soubor plan.txt.gz. Co je ale podstatné vědět, původní soubor byl smazán. Pokud ho chceme obnovit, použijeme parametr -d, nebo samostatný příkaz gunzip pro dekompresi souboru.

gzip -d plan.txt.gz
#nebo
gunzip plan.txt.gz

Lze provést i společnou kompresi více souborů, popřípadě s parametrem -r kterým se komprimuje celý adresář s podadresáři.

gzip *.txt #všechny soubory s příponou .txt

Z každého souboru se tímto způsobem vytvoří samostatný komprimovaný soubor s příponou .gz. Pokud chceme vytvořit jeden společný soubor, použijeme spojení s výše uvedeným příkazem tar:

tar -cvzf bu.tar.gz /home/bu          #pomocí parametru z přímo v taru
#nebo
tar cf - /home/bu | bzip2 > bu.tar.gz #propojením taru a gzipu

Užitečný je parametr -c, který přesměruje výstup gzipu do standardního výstupu, který lze pak nasměrovat do vlastního souboru. Vedlejším, ale rovněž cenným efektem je že po kompresi nedojde ke smazání původního souboru.

gzip -c plan.txt > plan.tgz 

Parametrem -l můžeme vypsat obsah komprimovaného souboru:

gzip -l plan.tgz

Velikost výsledného komprimovaného souboru lze ovlivnit pomocí parametru kompresního poměru s hodnotou -1-9 (standardně nastaveno 6). Se vzrůstající zadanou hodnotou se poněkud zmenší velikost souboru, zatímco doba komprese se může prodloužit až několikanásobně.

Se soubory komprimovanými pomocí gzip pracuje několik dalších utilit, například zcat který zobrazí obsah souboru bez rozbalení, či gzexe, který komprimuje spustitelné soubory tak, že výsledný archiv je spustitelný.

bzip2

Soubor bzip2 je novější program pro kompresi souborů. Výsledný soubor je obvykle menší než v případě gzipu, cenou je pak podstatně vyšší časová a paměťová náročnost komprese.

Výsledný soubor má příponu .bz2. Syntaxe použití je podobná jako u příkazu gzip.

bzip2 plan.txt          #komprese
bzip2 -d plan.txt.bz2   #dekomprese
bunzip2 plan.txt.bz2    #dekomprese

Při používání bzipu, a hlavně rozbalování jím komprimovaných souborů, na počítači s velmi malou kapacitou paměti je vhodné vědět o parametru -s, který způsobí, že bzip při dekompresi použije jen polovinu paměti než standardně vyžaduje ale za cenu dvojnásobné doby dekomprese. Číselný parametr -1-9 při kompresi totiž určuje velikost bloků dat v paměti po kterých je komprese prováděna, a stejná velikost paměti je požadována i při rozbalování.

Výhodou bzip2 oproti gzipu, kromě určité úspory výsledného souboru, je možnost obnovy dat i z poškozeného archivu. Díky tomu že bzip2 komprimuje data po blocích lze poškozený archiv zpracovat pomocí programu bzip2recover, který ho rozdělí na jednotlivé bloky a zapíše je do samostatných očíslovaných souborů. Ty lze pak jednoduše najednou dekomprimovat a zachránit tak data z nepoškozených bloků.

Porovnání

Pro porovnání gzip a bzip2 si ukážeme několik příkladů komprese s pomocí různých voleb na adresáři se zdrojovým kódem kernelu o celkové velikosti 174 MB.

#archivace bez komprese
#doba archivace: 20s, velikost souboru: 188190720
tar -cf linux.tar ./linux-2.6.3-4mdk

#standardní komprese s gzip
#doba komprese: 1 min 54 s, velikost souboru: 42058686
gzip -c linux.tar > linuxgzipstd.tar.gz

#maximální komprese s gzip
#doba komprese: 4 min 50s, velikost souboru: 41584712
gzip -c -9 linux.tar > linuxgzip9.tar.gz

#minimální komprese s gzip
#doba komprese: 1 min 01s, velikost souboru: 52064664
gzip -c -1 linux.tar > linuxgzip1.tar.gz

#standardní komprese s bzip2
#doba komprese: 8min 11s, velikost souboru: 33121918
bzip2 -c linux.tar > linuxbz2.tar.bz2

Jak je z porovnání vidět, komprese má velký význam, velikost archivu se zmenšila vždy na méně než čtvtrtinu, další optimalizace pomocí parametru poměru komprese však již další podstatné zmenšení nepřinesla, projevila se ale na značném prodloužení doby komprese. Při porovnání výsledků komprese je třeba také vědět, že některé programy zpracovávající data si provádějí vlastní interní kompresi dat, takže znovu provedená externí komprese již nemá významnější efekt. To se týká například některých formátů obrázků či zvuků (gif, jpg, mp3, apod.)

dump

Zatímco výše uvedené archivační a kompresní soubory pracovaly na úrovni adresářů a souborů, dump zálohuje data přímo čtením příslušného blokového zařízení. Výhodou je pak vysoká rychlost. Dump je podporován pouze pro ext2/ext3.

Archivace celé složky home se provede takto:

dump -0f archiv /home

Parametr 0 souvisí s pojmem inkrementálního zálohování. Při prvním provádění zálohy zadáme hodnotu 0 a tím se provede plná záloha všech souborů, zatímco při následujících zálohách zadáváme stále se zvyšující pořadového číslo a tím se zálohují jen soubory nově vytvořené nebo modifikované od poslední provedené archivace s nižším pořadovým číslem. To má tu výhodu že opakované archivace mohou být malé a rychlé, na druhé straně si ale musíme udržovat zálohy od pořadového čísla 0 a v případě nutnosti plné obnovy je všechny použít ve správném pořadí.

Parametrem -f se určí kam se má archiv zapsat. Kromě jména souboru lze jako cíl archivace uvést i přímo fyzická zařízení v adresáři /dev, např. /dev/st0 (páska).

Jestliže zálohujeme celé souborové systémy, hodí se parametr -u, kterým se zapíše informace o provedené archivaci do souboru /etc/dumpdates, takže si lze příště dotazem dump -w zjistit zda a které souborové systémy je potřeba zálohovat.

dump -0uf /dev/st0 /dev/hda5

restore

Pro obnovu souborů z archivu slouží opačný příkaz, restore:

restore -tf  archiv       #vypíše seznam souborů v archivu
restore -xf archiv /home  #provede obnovu

Restore umožňuje pracovat v interaktivním režimu, kdy po zadání parametru -i se zobrazí příkazová řádka příkazu restore. V ní lze procházet mezi adresáři (příkaz cd), vypisovat si je (ls), přidávat do seznamu adresářů a souborů které mají být obnoveny (add). Následně pak příkazem extract provést obnovu vybraných souborů a adresářů.

restore -if archiv
add bfu
extract
quit

Jak již bylo uvedeno výše, dump je podporován jen na ext2/ext3, nicméně existuje xfsdump pro XFS souborový systém, a pro další systém lze použít script reiserfsdump, který alespoň simuluje rozhraní dumpu pomocí taru.

Zdroje

  • man tar
  • man bzip
  • man bzip2
  • man gzip2
  • man dump
  • man restore

Verze pro tisk

pridej.cz

 

DISKUZE

Nejsou žádné diskuzní příspěvky u dané položky.



Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

14.11.2017 16:56 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt – tradičně první čtvrtek před třetím pátkem v měsíci: 16. listopadu od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

12.11.2017 11:06 /Redakce Linuxsoft.cz
PR: 4. ročník odborné IT konference na téma Datová centra pro business proběhne již ve čtvrtek 23. listopadu 2017 v konferenčním centru Vavruška, v paláci Charitas, Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00. Konference o návrhu, budování, správě a efektivním využívání datových center nabídne odpovědi na aktuální a často řešené otázky, např Jaké jsou aktuální trendy v oblasti datových center a jak je využít pro vlastní prospěch? Jak zajistit pro firmu či jinou organizaci odpovídající služby datových center? Podle jakých kritérií vybrat dodavatele služeb? Jak volit součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně spravovat datové centrum? Jak eliminovat možná rizika? apod.
Přidat komentář

13.9.2017 8:00 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt – tentokrát netradičně v pondělí: 18. září od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

3.9.2017 20:45 /Redakce Linuxsoft.cz
PR: Dne 21. září 2017 proběhne v Praze konference "Mobilní řešení pro business". Hlavní tématy konference budou: nejnovější trendy v oblasti mobilních řešení pro firmy, efektivní využití mobilních zařízení, bezpečnostní rizika a řešení pro jejich omezení, správa mobilních zařízení ve firmách a další.
Přidat komentář

15.5.2017 23:50 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt, který se bude konat ve čtvrtek 18. května od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

12.5.2017 16:42 /Honza Javorek
PyCon CZ, česká konference o programovacím jazyce Python, se po dvou úspěšných ročnících v Brně bude letos konat v Praze, a to 8. až 10. června. Na konferenci letos zavítá např. i Armin Ronacher, známý především jako autor frameworku Flask, šablon Jinja2/Twig, a dalších projektů. Těšit se můžete na přednášky o datové analytice, tvorbě webu, testování, tvorbě API, učení a mentorování programování, přednášky o rozvoji komunity, o použití Pythonu ve vědě nebo k ovládání nejrůznějších zařízení (MicroPython). Na vlastní prsty si můžete na workshopech vyzkoušet postavit Pythonem ovládaného robota, naučit se učit šestileté děti programovat, efektivně testovat nebo si v Pythonu pohrát s kartografickým materiálem. Kupujte lístky, dokud jsou.
Přidat komentář

2.5.2017 9:20 /Eva Rázgová
Putovní konference československé Drupal komunity "DrupalCamp Československo" se tentokrát koná 27. 5.2017 na VUT FIT v Brně. Můžete načerpat a vyměnit si zkušenosti z oblasti Drupalu 7 a 8, UX, SEO, managementu týmového vývoje, využití Dockeru pro Drupal a dalších. Vítáni jsou nováčci i experti. Akci pořádají Slovenská Drupal Asociácia a česká Asociace pro Drupal. Registrace na webu .
Přidat komentář

1.5.2017 20:31 /Pavel `Goldenfish' Kysilka
PR: 25.5.2017 proběhne v Praze konference na téma Firemní informační systémy. Hlavními tématy jsou: Informační systémy s vlastní inteligencí, efektivní práce s dokumenty, mobilní přístup k datům nebo využívání cloudu.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

15.12.2017 15:11 / Petit
freehold nj

15.12.2017 15:06 / Petit
nj freehold

5.12.2017 11:50 / Thomas
kitchen renovations

18.9.2017 14:37 / Rojas
high security vault

15.9.2017 7:33 / Wilson
new zealand childcare jobs

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2017) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze