Linux/Nástroje pro archivaci

Linuxové archivační nástroje jsou založeny na principu spojování více souborů do jednoho. Liší se způsobem jak to dělají a také tím, jakým způsobem zachovávají metainformace o archivovaných souborech.

Formát archívů vytvářených utilitou ar nebyl nikdy standardizován. Od historických unixových dob ar postupně vystřídal několik navzájem odlišných formátů. V současné době se používají dvě varianty - BSD a GNU

  1. na 16bitových strojích se používal formát s hlavičkou o pěti polích z nichž každé mohlo obsahovat max. 8 znaků
  2. ten nahradil formát pro 16 i 32bitové stroje s hlavičkou o šesti polích přičemž počet znaků již byl 14
  3. od BSD verze 4.0 následoval formát bezprostředně předcházející současným formátům, ovšem bez podpory dlouhých názvů (pouze 16 znaků) a mezer.
  4. Od verze BSD 4.4 se začala používat úprava, která problém dlouhých názvů a mezer vyřešila, ale souběžně vznikla GNU verze, kterou dnes používá GNU/Linux

Popis formátu

editovat

Archiv který byl vytvořen nástrojem ar začíná magickým řetězcem "!<arch>" následovaný znakem LF (Line Feed - zalomení řádku, neboli také "\n"). Zbytek archívu tvoří objekty. Každý objekt je složen z hlavičky souboru a jeho obsahu. Hlavička souboru obsahuje metainformace o souboru, které jsou v rámci unixu přenositelné (název souboru,nastavení práv, čas, velikost) a obsah souboru - je-li čitelný, je čitelný i když je v archívu.

Hlavičku tvoří šest polí různé délky , vzájemně oddělených dvouznakovým oddělovačem:

  • název souboru v ASCII (16 znaků)
  • čas poslední změny souboru (12 znaků)
  • UID vlastníka (6 znaků)
  • GID skupiny (6 znaků)
  • nastavení práv souboru (8 znaků)
  • velikost souboru (10 znaků)

Číselné hodnoty polí jsou v desítkové soustavě (decimální) s výjimkou pole s nastavením práv souboru, které je v soustavě osmičkové (oktálové). Oddělovač tvoří apostrof následovaný zalomením řádku - "`\n". Hlavička je od vlastního obsahu oddělena znakem "\012"

Vzhledem k omezení velikosti polí v hlavičce bylo třeba vyřešit problém dlouhých názvů a ve způsobu řešení tohoto problémů se formáty pro BSD a GNU rozchází.

BSD ar
to řeší tak, že místo názvu souboru uloží do pole pro název řetězec "#1/" následovaný informací o počtu znaků skutečného názvu souboru. Ten se pak "přilepí" na konec hlavičky.
GNU ar
oproti BSD řešení do pole názvu vkládá znaky "//" které signalizují že název teprve bude následovat. Skutečný název souboru se pak na začátek datové části s obsahem souboru. A to tak, že datová část začne lomítkem, následovaným decimální hodnotou offsetu (posunu) začátku vlastního obsahu, vlastním názvem, který je opět ukončen lomítkem. Archívy které tvoří GNU ar také používají sekvenci lomítka následovaného mezerou ("/ ") která uvádí index, který GNU ar používá pro rychlejší pohyb v rámci archívu.

Použití

editovat

Dnes se ar používá převážně jenom pro vytváření a aktualizaci statických knihoven, které používá linker, jako tedy je součástí balíčku binutils výjimkou je systém instalačních balíčků DEB

Příklad vytvoření statické knihovny z několika zkompilovaných souborů

ar rcs libclass.a class1.o class2.o class3.o

Při kompilaci aplikace, která závisí na třídách class1.o, class2.o a class3.o pak již není nutné přidávat zkompilované třídy jednotlivě, ale stačí pouze přidat vytvořenou statickou knihovnu:

cc main.c libclass.a

w:Ar (Unix)

Pro použití při práci s deb balíčky viz Instalační balíčky

http://rightsock.com/~kjw/Ramblings/tar_v_cpio.html

Cpio je poměrně mladá zálohovací utilita. Jeho první použitelná verze byla vydaná r. 1996 a navíc měla některá omezení Cpio je lepší než tar, protože..

  • uchovává hardlinky
  • nemá žádné omezení délky názvu souborů
  • zachovává časová razítka (timestamps)
  • a díky kombinaci s utilitou find dává ohromné možnosti filtrování vstupních dat

Jeho nevýhodou je že..

  • neukládá GID a UID ale gid a uid (tj. pouze číselnou identifikaci vlastníka a skupiny)
  • neumí dělat rozsekané archívy ( multivolume )
  • a v případě, kdy se v archivu objeví chyba jej již nelze zpátky rozbalit.
  • cpio je také platformně závislé

Popis formátu

editovat

Použití

editovat

cpio zpracovává archív podle předaného seznamu souborů k archivaci, proto na rozdíl od archivačního programu tar, kterému stačí jako parametr předat cestu k adresáři vyžaduje při tvorbě archívu spolupráci s utilitou Linux:find, která mu předává rourou seznam souborů ke zpracování. Na druhou stranu tím však získává mocný nástroj pro tvorbu sofistikovaných filtrů.

user@stroj:~$ find ./cesta -depth -print | cpio -oaV > archiv.cpio

s využitím přesměrování standardního výstupu. Se stejným efektem lze také použít parametr -O

user@stroj:~$ find ./cesta -depth -print | cpio -oaV -O archiv.cpio

Vytvářený archív lze dále předávat - opět rourou - k dalšímu zpracování komprimační aplikaci a tím dosáhnout redukované velikosti vytvořeného archívu.

user@stroj:~$ find ./cesta -depth -print | cpio -oaV | gzip -c > archiv.cpio.gz
Rozbalení cpio archívu
user@stroj:~$ cpio -imVd < archiv.cpio
user@stroj:~$ cpio -imVd -O archiv.cpio
Výpis obsahu z cpio archívu
user@stroj:~$ cpio -it < archiv.cpio
user@stroj:~$ cpio -it -O archiv.cpio
Využití archivační utility cpio ke zkopírování adresáře
user@stroj:~$ find cesta -depth -print | cpio -pamVd /cilovy/adresar

Použití cpio skrze ssh

editovat
Kopírování lokálního adresáře ./cesta na vzdálený počítač host
user@stroj:~$ find ./cesta -depth -print | cpio -oaV | ssh user@host 'cpio -imVd'
Obnovení zálohy ze vzdáleného počítače host na lokální stroj
user@stroj:~$ ssh  user@host "find cesta -depth -print | cpio -oaV" | cpio -pamVd

Pro vytvoření archívu stačí přidat přesměrování do souboru archiv.cpio:

user@stroj:~$ find ./cesta -depth -print | cpio -oaV | ssh user@host 'cpio -oaV -O archiv.cpio'

a pro jeho obnovení z něj naopak číst:

user@stroj:~$ ssh  user@host "cpio -imVd < archiv.cpio" | cpio -pamVd

cpio a rpm

editovat

cpio se používá také u instalačního systému RPM. Od RPM verze 4 je součástí instalačního balíku rpm utilita Linux:rpm2cpio která vytvoří z proudu dat vytaženého z rpm balíčku cpio archív, se ketrým lze dále skrze rouru pracovat.

Výpis obsahu z rpm balíčku

user@stroj:~$ rpm2cpio finger -0.17-9.i386.rpm | cpio -it
./usr/bin/finger
./usr/share/man/man1/finger.1.gz
...

Extrakce souboru z rpm balíčku

user@stroj:~$ rpm2cpio finger -0.17-9.i386.rpm | cpio -imVd

V případě že chcemez tohoto balíčku extrahovat pouze jeden určitý soubor, pak předáme pouze jeho cestu, získanou předchozím příkazem:

user@stroj:~$ rpm2cpio finger-0.17-9.i386.rpm | cpio -imVd ./usr/share/man/man1/finger.1.gz

Uvedené nedostatky zálohovací utility cpio měla odstranit afio, ovšem poslední vydaná verze je z 21. prosince 2003, tudíž je otázkou jak je to s jeho dalším vývojem. afio má také některá omezení z hlediska délky názvů souborů, aj. afio se od cpio liší mj. tím, že do archívů přidává navíc takzvané kontrolní soubory, díky kterým lze pak rozbalit i poškozený archiv.

Popis formátu

editovat

Použití

editovat

Archivační nástroj tar byl původně navržen jako obslužný program pro archivaci velkého množství souborů a celách adresářů na magnetickou pásku. Z toho byl také odvozen jeho název (Tape ARchiver). V linuxu se používá verze programu vyvinutá v rámci projektu GNU která obsahuje spoustu nejrůznějších voleb a modifikátorů.

První stabilní verze archivační utility tar 1.0 se objevila v červnu 1989.

  • Od verze 1.11.2 ( 26. března 1993 ) začal tar používat místo kompresní utility místo compress gzip
  • Od verze 1.13.18 ( 29. října 2000 ) podporuje bzip2 kompresi přes parametr -j
  • Od verze 1.20 ( 14. dubna 2008 ) podporuje lzma kompresi přes parametr --lzma
  • Od verze 1.22 ( 5. března 2009 ) podporuje vícevláknovou xz kompresi přes parametr -J který má stejný efekt jako --xz

Popis formátu

editovat

Tar je schopen sloučit do jednoho velkého souboru několik souborů i včetně adresářové struktury a přístupových práv. Tento archivní soubor má velikost jako součet velikostí souborů v něm obsažených, plus režie (názvy souborů apod.). Nejedná se o kompresní program jen spojuje více souborů do jednoho většího. Ke komprimaci výstupního archivu využívá externích komprimačních utilit .

Použití

editovat
tar volby [modifikátory] [seznam-souborů]

V příkazovém řádku lze použít jednu z následujících voleb, která specifikují typ operace. Každou operaci lze modifikovat pomocí tzv. modifikátorů.

--append (-r)
Po zadání volby -r se soubory uvedené v seznamu seznam-souborů zařadí na konec archivního souboru. Původní soubory zůstanou nedotčeny, proto hrozí, že v archívu bude uloženo několik duplicitních kopií jednoho souboru. Při obnově se jako aktuální extrahuje poslední kopie.
--create (-c)
Po uvedení volby -c se soubory uvedené v seznamu uloží do nového archivního souboru. Pokud soubor již soubor se stejným názvem existuje, bude nejdříve zrušen. Pokud argument seznam-souborů jméno adresáře, tar provede rekurzivní kopírování všech souborů, včetně podadresářů, z tohoto adresáře.
--extract nebo --get (-x)
Po zadání této volby program provede extrakci všech souborů z archívu. Každý existující soubor se stejným jménem bude přepsán. Pokud se neuvede argument seznam-souborů, budou budou extrahovány všechny soubory z archívu. Jestliže argument seznam-souborů obsahuje jméno adresáře, provede tar extrakci všech souborů z tohoto adresáře včetně jeho podaresářů. Tar se snaží zachovávat všechny atributy souborů. Když tar přečte tentýž soubor vícekrát, pak novější verze vždy přepíše starší.
--list (-t)
Jestliže není zadán seznam souborů seznam-souborů, zobrazí tar seznam všech souborů uložených v archívu. Když je seznam-souborů zadán, zobrazí se seznam jmen souborů z tohoto seznamu, které jsou uloženy v archívu. S touto volbou se pojí ještě volba --verbose. Při jejím užití program zobrazí podrobné informace o každém souboru v archívu.
--update (-u)
Do archivního souboru se po užití této volby přidají soubory uvedené v seznamu seznam-souborů, pokud se v archívu již nenacházejí nebo pokud jsou novější. Protože se v tomto módu musejí dělat četné kontroly, běží program poněkud pomaleji.
--help
Po zadání volby --help se zobrazí návod , jak tar používat. Dále se zobrazí seznam voleb a modifikátorů spolu s jejich popisem.

Pozn.: Nejedná se zdaleka o všechny volby. Popis se zabývá jen těmi nejčastěji používanými.

Modifikátory

editovat

Za každou volbou je možné specifikovat jeden nebo více modifikátorů. Jestliže je použit jednoznakový zástupce pro modifikátor, není třeba před něj psát pomlčku. Přesto je doporučeno pomlčky používat.

Jestliže má za modifikátorem následovat argument, pak musí být modifikátor uveden ve skupině na konci. V následujícím příkladu jsou argumenty uspořádány správně:

$ tar -cb 10 -f /dev/ftape

Další příklad správný není a způsobí chybové hlášení:

$ tar -cbf 10 /dev/ftape
tar: invalid value for blocksize

Tato chybová hláška se objeví proto, že modifikátor -b akceptuje argument, ale není uveden jako poslední ve skupině. V tom se liší starší verze programu používaných v operačních systémech Unix, kde byla takováto syntaxe povolena.

--absolute-path (-P)
Program jako implicitní uvažuje relativní nastavení cest. Tato volba zajistí, že se všechny cesty budou považovat za absolutní.
--block-size [n] (-b)
Po zadání této volby se při běhu programu zapisují bloky o velikosti n. Číslo n označuje počet bloků o velikosti 512 bajtů. Jestliže není specifikováno, bude použita implicitní hodnota 20.
--compress nebo --uncompress (-Z)
Při vytváření archívu se použije komprimace a při obnově se použije dekomprimace.
--directory directory (-C)
Před zpracováním archívu se změní pracovní adresář podle hodnoty argumentu directory.
--gzip nebo --gunzip (-z)
Po zadání této volby se bude archív během svého vytváření komprimovat a při obsluze dekomprimovat. Při dekomprimaci tar určí, zda byl archív komprimován obslužným programem compress. Pokud ano, bude k dekomprimaci použit program uncompress a ne gunzip.
--verbose (-v)
Jestliže bude tato volba zadána, bude zobrazeno jméno každého zpracovávaného souboru. Společně s volbou -t bude zobrazovat další informace, jako je vlastník souboru, práva, velikost ap.

Pozn.: Opět se nejedná o všechny možné modifikátory. Viz: $ tar --help

Popis formátu

editovat

Použití

editovat

Další zdroje

editovat