|
Kompresja ext2
Autor: Artur Prokopiuk 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 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 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 . katalogi nie są skompresowane, a więc do boju:
[root@opto95 /usr/src]# chattr -R -V +c -m gzip3 . 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:
Powodzenia i niech Moc będzie z Tobą! ---- |
|