Hlavní navigace

Připojte archiv jako běžný disk

23. 7. 2010
Doba čtení: 4 minuty

Sdílet

Pokud potřebujete zálohovat například logovací soubory, e-maily nebo jiné dobře zkomprimovatelné soubory a nejlíp ještě všechno zautomatizovat, dokáže být program ArchiveMount velmi dobrým pomocníkem. Umí totiž připojit mnoho archivů jako běžný disk a zpřístupnit vám tak pohodlné čtení i zápis.

ArchiveMount sice nemá žádnou domovskou stránku, ale jeho zdrojové kódy si můžete stáhnout na cybernoia.de. Momentálně se nachází ve verzi 0.6.1, která se objevila přibližně před měsícem. Zdrojový kód není nějak složitý a má kolem 2500 řádek. Jedná se vlastně o rozhraní mezi libfuse a libarchive.

Libarchive je knihovna, která se pod jedno rozhraní snaží spojit hned několik kompresních formátů, takže krom klasického taru můžete ve svých programech pracovat třeba s formáty zip, xar, mtree a krom jiného je podporován i formát ISO9660, tedy můžete s ním připojit i iso obraz nějakého CD. Kompletní seznam najdete na stránkách projektu. To co tedy podporuje libarchive podporuje i ArchiveMount. Některé formáty jsou dostupné jen pro čtení, další jen pro zápis.

Libfuse komunikuje s jádrem a umožňuje napsat souborový systém pracující na úrovni uživatele, tedy kdy kód souborového systému běží jako kterýkoli jiný program. Společně s FUSE se začaly objevovat různé zajímavé použití, jako třeba mountování vzdálených SFTP a FTP přístupů, ale i SAMBY nebo Gmailu. S nadsázkou můžeme říct, že s FUSE můžeme připojit do adresářové struktury cokoli, kde je alespoň náznak nějaké struktury. A takto pracuje i program ArchiveMount.

Instalace

Bohužel v Ubuntu 10.04 a předpokládám že i v Debianu není ArchiveMount v repositářích, takže se budeme muset pustit do kompilace.

Jelikož zdrojový kód není nějak komplikovaný, není potřeba ani moc závislostí, pokud máte v počítači běžné balíčky pro kompilaci, bude vám chybět pravděpodobně jen libfuse a libarchive resp. jejich vývojové varianty. V distribucích s deb balíčky stačí, když použijete:

sudo apt-get install libarchive-dev libfuse-dev build-essential 

Teď je čas stáhnout zdrojové kódy. Jak jsem již psal, momentálně se ArchiveMount nachází ve verzi 0.6.1, ale určitě se přesvědčte, že máte tu nejnovější. Na kompilaci nepotřebujete práva roota a postačí vám k tomu váš uživatel. Nejprve si vytvoříme nějaké místo pro zdrojové kódy a pak je sem stáhneme a rozbalíme:

$ cd ~
$ mkdir src
$ cd src
$ wget http://www.cybernoia.de/software/archivemount/archivemount-0.6.1.tar.gz
$ tar xf archivemount-0.6.1.tar.gz
$ cd archivemount-0.6.1 

V rozbaleném adresáři najdete vše, co budete potřebovat. Teď stačí spustit magickou dvojici:

$ ./configure
$ make 

Pokud vám ještě chybí nějaká závislost, configure si o ní řekne a stačí ji doinstalovat. Make už by mělo proběhnout bez problémů. Teď je čas se rozhodnout, jestli výslednou binárku chcete začlenit do svého systému nebo ji jen nahrát do nějakého místa ve vašem adresáři a namířit tam proměnnou PATH, ve které jsou uložené cesty, kde systém hledá spustitelné soubory. Osobně preferuji druhou možnost, ale pokud chcete mít ArchiveMount uvnitř vašeho systému, použijte:

$ sudo make install 

V opačném případě si vytvořte nějaký adresář, já mám nejraději ~/bin, a do něj binárku nakopírujte:

$ mkdir ~/bin
$ cp archivemount ~/bin/ 

Nakonec ještě upravíme proměnnou PATH v ~/.bashrc:

$ echo export PATH="$PATH:~/bin" >> ~/.bashrc 

Teď když je všechno připravené, můžeme jít otestovat, co všechno ArchiveMount umí.

První připojený archiv

Po spuštění:

$ archivemount -h
[...]
archivemount options:
    -o readonly            disable write support
    -o nobackup            remove archive file backups
[...] 

Dostaneme vcelku vyčerpávající nápovědu, ale pouze tři řádky se týkají samotného ArchiveMount, všechno ostatní souvisí se FUSE. Pokud hodláte používat ArchiveMount každý den, určitě se vám bude hodit vypnutí záložního souboru, který se vytvoří z původního archivu před připojením.

Pro otestování si vytvoříme testovací adresář, v něm vytvoříme prázdný archiv a připojíme ho:

$ cd
$ mkdir test
$ cd test
$ tar cjf test.tar.bz2 .
$ mkdir point
$ archivemount -o nobackup test.tar.bz2 point/ 

Archiv je připojený v adresáři ~/test/point a můžete s nim normálně pracovat, jako by to byl jakýkoli jiný adresář.

Co váš určitě zajímá nejvíc, je výkon.

Výkon

Pro testování výkonu jsem se rozhodl použít nástroj iozone, který byste měli mít v repositáři ve své distribuci. Ten nabízí velmi široké možnosti nastavení a otestujete s ním prakticky jakýkoli souborový systém po všech stránkách. Na výsledcích běžného souborového systému bez ArchiveMount se podepisovala hodně cache, takže hodnoty několikanásobně převýšily výsledky ArchiveMount, který musel navíc používat relativně náročnou bzip2 kompresi. Testování probíhalo na pěti souborech o velikosti přibližně 100 MB do nichž zapisovalo 5 procesů.

Bez ArchivMount S ArchiveMount
První zápis 59536,65 6919,174
Další zápis 248731,006 7266,804
První čtení 517894,124 98000,654
Další čtení 678499,418 101320,888
Čtení pozadu 567389,244 37242,068
Čtení v krocích 548323,218 85659,184
Náhodné čtení 574909,194 52820,984
Náhodné čtení/zápis 406066,538 17239,934
Náhodné zápis 289027,532 7227,64
Zápis uprostřed 62522,204 6916,824
Čtení uprostřed 145536,448 93349,464

Hodnoty jsou uvedeny v kB/sec.

skoleni

Lepší představu než z tabulky si určitě uděláte z grafu:

Závěr

ArchivMount je jednoduchý program, který vám usnadní práci se složitějšími archivy ve vašich skriptech. Nejrychlejším souborovým systémem se asi nestane, ale na lámání rekordů není navržen. Pro běžnou práci je výkon dostačující. Testy byly prováděny na tbz2 archivu, což se na výkonu podepsalo také.

Autor článku

Adam Štrauch je redaktorem serveru Root.cz a svobodný software nasazuje jak na desktopech tak i na routerech a serverech. Ve svém volném čase se stará o komunitní síť, ve které je již přes 100 členů.