Portál AbcLinuxu, 12. prosince 2025 05:55
Můj nick je lzap. Já, lzap, objevil lzop. Program lzop komprimuje. Já nikoli. Tímto bych rád předešel dalším diskuzím: já nekomprimuji. A rychle už vůbec ne.
Utilitka lzop je ale pekelně rychlá - koprimuje 3-5x rychleji, než gzip -1, ovšem dosahuje o asi 10-15% nižšího komprimačního poměru. V časopise Linux FORMAT vyšel bezvadný článek na toto téma, a já se jal program lzop prozkoumávat: emerge lzo lzop.
Když jsem proniknul do tajů knihovny lzo, zjistil jsem, že se jedná o blokový komprimační program, který napsal autor programu UPX - také docela rychlého a hodně, hodně moc přenositelného komprimátoru binárek. Docela mě to zaujalo a pokusil jsem se neúspěšně najít nějaký souborový systém, který by on-line komprimoval.
Některé mé adresáře (nesnáším "složky", zní to jak "vložky") obsahují totiž velmi mnoho textových souborů. Takový komprimovaný filesystém by se hodil. Určitě nějaký existuje (diskutujte!), ale myslím, že žádný z nich nebude podporovat lzo.
Jeden podvečer jsem věnoval kódování v jazyce C (velmi dlouho jsem vzpomínal na dereference pointerů a jiné záležitosti, které jsou mi u Javy cizí). Kromě toho, že jsem zjistil, že plugin Eclipse-CDT je úplně super a vůbec se nemusím nořit do tajů programů Autoconf/Automake, jsem musel konstatovat, že pomocí FUSE (Filesystem In Userspace) takovou utilitku asi nenapíšu.
Problém je ten, že FUSE funguje příliš nizkoúrovňově - implementuje funkce open, read a write. Ačkoli by nebyl problém vytvořit si vlastní cache pro čtení (blokový algoritmus lzo to navíc velmi usnadňuje) a pohlídat si vlákna, zápis by byl velmi neefektivní. Navíc, velikost komprimačních bloků by nebyla vždy stejná, jako bloky, kterými čte program a každý přístup bych musel "odskočit" na začátek souboru a zjist velikost bloku a zda je vůbec lzopem komprimován.
Aby to nebyl zas tak "neúspěšný" zápis, rozhodl jsem se alespoň publikovat svůj zálohovací příkaz. Se lzopem je zase o něco rychlejší:
tar --use-compress-program=lzop -cv ~ /etc | \ mkisofs -stream-media-size 333000 | \ cdrecord dev=/dev/hdc -fs=32m -dao tsize=333000s -
Existuje vůbec FS s podporou komprimace? Používáte komprimované adresáře? A vůbec, kolik sekund má 700MB CD? 
Tiskni
Sdílej:
Pokud bys tedy ten filesystem do FUSE udělal tak, aby mohla jeho velikost růst s tím jak do něj budeš věci kopírovat (prostě abys nemusel mít na disku soubor jedné pevně dané velikosti mountovaný přes loop, ale soubor který by se dynamicky zvětšoval/zmenšoval podle toho co by v něm bylo). Podobně co sem tak četl pod FUSE funguje EncFS. Tak na něj kdyžtak koukni, jak tam je to řešeno
A pokud chceš použít lzo kompresi, doporučuji využívat přímo onu knihovnu a né lzop utilitu.
Jinak SquashFS snad bude někdy přijatý přímo do oficiálního kernelu, vím že nějaké diskuze o jeho začlenění na LKML proběhly, jak to s tím ale v současnosti konkrétně vypadá netuším... co se týče jeho rychlosti, tak sem četl že je o dost rychlejší než třeba gzip komprimované ISO (pomocí mkzisofs), takže sem předpokládal že používá asi nějakou jinou kompresi než gzip. Ale možná je ta jeho rychlsotí výhoda v něčem jiném...
Ohledně té vaší poznámky k EncFS - znamená to tedy, že tenhle váš LZO userspace filesystem nebude umožňovat onu dynamickou velikost souboru v kterém je uložen? Je to principiálně nemožné nebo jen moc složité na implementaci?
Co se týče toho ukládání souborů ve /var/lib/lzo - na tom se mi nelíbí to, že je to system-wide adresář. To opravdu není moc dobré řešení, jak z bezpečnostního hlediska tak z hlediska možné přenositelnosti souborů. Ty zkomprimované soubory by se určitě měly ukládat v uživatelově domovském adresáři. Např. tak, že by zadal 'lzofsmount /home/mikos/dokumenty' a ono by to onen adresář dokumenty zkomprimovalo (všechny jednotlivé nezkomprimované soubory v něm) a každý nový soubor který bys tam vytvoři/nakopíroval v době, kdy je to přimountované, by byl transparentně komprimován (a samozřejmě pak i zpětně dekomprimován).
Btw. v čem je to LZO verze 2 jiný projekt? Já koukal na domovské stránky autora LZO a tam je právě ke stažení už ta verze 2.01, stará verze 1 je tam ještě v adresáři LZO-v1. Z toho sem pochopil že LZO 2 je zjevně mnohem novější a lepší než LZO 1, ale tu verzi 1 tam nechal z důvodu že je to zpětně nekompatibilní či tak něco. Ale jsou to jen mé spekulace, nějak sem se tomu že bych to prostudoval moc nevěnoval, tak mě kdyžtak opravte
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.