Warning: Missing argument 2 for artykul(), called in /homez.143/epubzmnd/linuxpub/old/lib/druk.php on line 22 and defined in /homez.143/epubzmnd/linuxpub/old/lib/artykul.php on line 8
LinuxPub : Kompresja ext2 : Dokumentacja, Wiadomości, Pomoc, Forum, Howto, Manual, Bezpieczeństwo Fragment strony http://linuxpub.pl/. Wydrukowano:23.05.2012 03:11
Powrót Powrót 
 
Wyślij znajomemu

Kompresja ext2

Autor: Artur Prokopiuk
zmechu@poczta.onet.pl
http://bios.help.pl

Dyski twarde, ku uciesze producentów a na nieszczęście użytkowników nie są z gumy i wcześniej czy póżniej nasz nowiutki twardziel o (wydawałoby się) kosmicznej pojemności staje się zwykłym karzełkiem. Coraz to nowsze oprogramowanie pochłania coraz to dalsze obszary twardzieli, by pewnego dnia powitać nas wesołym komunikatem o braku wolnego miejsca. W szczególnie niezręcznej sytuacji są uzytkownicy notebooków, w kórych wymiana dysku na nowy nawet jeżeli nie jest operacją zbyt uciążliwą, to na pewno bardzo kosztowną. Również fascynaci ;-) demonów szybkości klasy 486DX dopieszczających Linuxowe serwery sieci osiedlowych nie raz spojrzą z trwogą na nowoczesne kiedyś napędy 540MB, na których polecenie 'df -h' zwraca z każdym coraz to mniejsze wartości. Staje się wówczas przed alternatywą: upgrade maszyny lub ... kompresja. To drugie rozwiązanie jest o tyle ciekawe, że koszt takiej operacji jest praktycznie żaden a zysk - całkiem, całkiem. Do wyboru są dwie metody - posłużenie się programami typu gzip czy tar 'pakowanie' nieużywanych danych do archiwum lub posłużenie się metodami transparentnej kompresji plików - w stylu DoubleSpace-a czy DriveSpace-a w środowiskach DOS i Windows.

Idea jest protsza niż man awk - dane zapisywane na dysk są wcześniej "w locie" kompresowane i w takiej formie lądują na twardzielu. Przy odczycie nastepuje sytuacja odwrotna - dane są dekompresowane i w wyniku tego użytkownik dostaje oryginalną zawartość. Wszystkie operacje wykonuje system operacyjny "za plecami" użytkownika - kosztem nieznacznego spowolnienia operacji zapis-odczyt zyskuje się wzrost wolnego miejsca średnio o 50%.

Linux AFAIK nie doczekał się jeszcze oficjalnego programu tego typu. Są one jednak pisane przez niezrzeszonych programistów i mimo że cały czas mają one status "experimental" (używasz na własne ryzyko) to działają bezproblemowo. Najpopularniejszym z nich jest pakiet e2compr, przezdstawiony niżej (oficjalna strona: http://www.netspace.net.au/~reiter/e2compr/.

Do zmolestowania danych na dysku niezbędne nam będą dwie rzeczy: patch na jądro z obsługą transparentnej kompresji i patch na programy do sprawdzania spójności dysku.

Krok pierwszy: ze strony http://www.netspace.net.au/~reiter/e2compr/software-04x.html pobieramy patch na jądro. Jeżeli mamy jądro o wersji 2.2.16 ściągamy plik e2compr-0.4.38-patch-2.2.14.bz2.bin, jeżeli 2.2.18 to odpowiedniejszy będzie e2compr-0.4.38-patch-2.2.18.bz2.bin itd. Następnie kopiujemy łatę do katalogu /usr/src i wydajemy polecenia:

[root@opto95 /usr/src]# mv e2compr-0.4.38-patch-2.2.18.bz2.bin e2compr-0.4.38-patch-2.2.18.bz2
[root@opto95 /usr/src]# bzip -dv e2compr-0.4.38-patch-2.2.18.bz2
[root@opto95 /usr/src]# patch -p0 < e2compr-0.4.38-patch-2.2.18

po czym powinniśmy zobaczyć serię komunikatów o patchownaiu poszczególnych plików kernela. Rzecz jasna operacja taka powinna zakończyć się bez błędów, a wszelkie problemy na tym etapie nie wróżą najlepiej - prawdopodobnie ściąglęliśmy zły plik lub nasze jędro wcześniej było modyfikowane (inne łaty, poprawki itp).

Teraz przystępujemy do kompilacji naszego jądra systemu. Poleceniem make menuconfig lub make xconfig (w środowisku XWindow) wchodzimy do menu konfiguracyjnego. Po włączeniu w sekcji Code maturity level zaznaczamy opcję Prompt for development and/or incomplete code/drivers dzięki czemu w podmenu Filesystems pojawi się nowa opcja: Ext2 file compression. Uaktywnienie jej da nam możliwość wyboru m.in. algorytmu i domyślnej metody kompresji, rozmiaru klastra i kilku dodatkowych opcji. Jeżeli posiadamy najnowsze Pentium IV możemy pokusić się o wybranie maksymalnych stopni kompresji (bzip2, klaster 32), wszystkim innym radziłbym łaskawszym okiem spojrzeć na algorytm gzip - przy gorszym stopniu pakowania danych o wiele mniej obciąża system. Teraz nie pozostaje nic innego, jak skompilować jądro, wyedytować /etc/lilo.conf i na nowym kernelu ponownie uruchomić system. Jeżeli bierzesz się za tak ambitne sprawy jak kompresja dysków, z pewnością nie raz już to robiłeś ;-)

Krok drugi: poprawka programów do testowania dysku. Co prawda system z kompresją działa już sprawnie, ale problemy mogą wystąpić przy pierwszym lepszym testowaniu poprawności systemu pliów. Programy klasy e2fsck nie potrafią bowiem poprawnie współpracować ze skompresowanymi plikami i chcąc "na siłę" je naprawić mogą narobić nam na dysku niezłego bigosu. Nalezy je więc nauczyć obsługi nowego nowych plików, czyli po linuksianemu - spatchować. Co prawda autor e2compr udostępnia zmodyfikowane źródła e2fsprogs, ale nie wiedzieć czemu nie chciały mi się one poprawnie skompilować. Na szczęście pomogło łatanie oryginalnych żródeł. Ze strony http://e2fsprogs.sourceforge.net/ pobieramy pliki żródłowe programów e2fsprogs, rozpakowujemy je i nakładamy łatę pobraną z http://www.netspace.net.au/~reiter/e2compr/e2fsprogs.html:

[root@opto95 /usr/src]# tar xvzf e2fsprogs-1.19.tar.gz
[root@opto95 /usr/src]# bzip -dv e2cfsprogs-9-patch-1.19.bz2
[root@opto95 /usr/src]# patch -p0 < e2cfsprogs-9-patch-1.19

a następnie automagicznie transferujemy się do katalogu e2fsprogs-1.19 i poleceniami ./configure; make; make install instalujemy programy. Voila, gotowe! Teraz nie pozostaje nic innego jak przystąpić do tego, co tygrysy lubią najbardziej, czyli kompresowania danych. Do tego posłużymy się poleceniem lsattr i chattr. Pierwszy z nich wyświetla atrybuty rozszerzone plików, drugi pozwala je edytować. Np:

[root@opto95 /usr/src]# lsattr .
------------ - - leafnode+-2.12
------------ - - leafnode-1.9.18
------------ - - linux
------------ - - redhat

katalogi nie są skompresowane, a więc do boju:

[root@opto95 /usr/src]# chattr -R -V +c -m gzip3 .
...
(tutaj pojawi się ciąg komunikatów o zmianach atrybutów)
...
[root@opto95 /usr/src]# lsattr .
-------c---- 32 gzip3 leafnode+-2.12
-------c---- 32 gzip3 leafnode-1.9.18
-------c---- 32 gzip3 linux
-------c---- 32 gzip3 redhat

opcja -R oznacza rekursywna zmianę atrybutów (tzn zmianie podlegają katalog i cała zawartość wgłąb), -V daje nam wgląd na postęp działania, +c informuje, iż dane chcemy kompresować, -m według jakiego algorytmu. Szczegóły magicznych zaklęć pod hasłami man lsattr i man chattr.

To w zasadzie wszystko. Można pokusić się jeszcze o zainstalowanie w systemie programów pomocniczych (Ancillary Programs) (http://www.netspace.net.au/~reiter/e2compr/software-04x.html#ancillary), czyli zestawu trzech aplikacji: e2ratio, e2bitmap i clear-e2c. Pierwsza z nich wyświetla stopień kompresji plików/katalogów, druga informuje które części (klastry) pliku są skompresowane, ostatnia usuwa atrybut kompresji z systemu plków, pozwalając tym samym na zamontowanie dysku w innym systemie, nie obsługującym kompresji. Opis instalacji i działania programów dokładnie opisany został w dokumentacji, więc życzę miłej lektury.

Na koniec kilka wolnych uwag:

  • w moim przypadku jądro 2.2.18 nie chciało skompilować się z obslugą ppp włączoną do kernela. Nie wnikałem za bardzo dlaczego, bo skompilowanie ppp do modułu załatwiło sprawę.
  • nie należy przesadzać z kompresją wszystkiego co się rusza. Pliki tekstowe (.doc, .txt, .htm) kompresują się bardzo ładnie, pliki wykonywalne (te z /bin, /usr/lib itp) wcale lub bardzo mało. Ponadto ich kompresja bardzo negatywnie odbija się na wydajności systemu.
  • z algorytmem pakowania też nie szaleć za bardzo. Dane, do kórych bedziemy sięgać dosyć często (/etc, /var/spool) wystarczy potraktować gzip3, z kolei np. /usr/src można nawet kompresować algorytmem bzip2. Kiedyś popełniłem błąd i z rozpędu spakowałem za pomocą bzip2 spool serwera news, co zaowocowało koniecznością twardego resetu komputera, bo system był tak zaabsorbowany kompresją/dekompresją danych, że nie reagował na żadne sygnały z zewnątrz.
  • należy zapomnieć o dostępie do danych skompresowanych z poziomu Windows za pomocą narzędzi klasy Explore2fs. Próba odcztyu kończy się błedem - po prostu program "nie rozumie" plików z atrybutem "+c". Podejrzewam, że również programy typu PQMagic może się wykrzaczyć, choć tego nie testowałem.

Powodzenia i niech Moc będzie z Tobą!

----
Artur Prokopiuk
zmechu@poczta.onet.pl
http://bios.help.pl


 


Do góry Do góry 
 
Powrót Powrót 
Wyślij znajomemu