Jeg har en bærbar PC med kun 2 Gb disk. Det kan hurtigt blive for lidt, og under Linux er der så mulighed for at have kompression i standard-flisystemet ext2. Dette giver for et standard-filsystem som RedHat 5.0 i fuld installation, en besparelse på ca 50 %, eller sagt på en anden måde: man kan have ca dobbelt så meget på harddisken.
Komprimeringen virker som en udvidelse til standard ext2-filsystemet. Man behøver ikke at lave sit ext2-filsystem om, reformattere el. lign., og kompressionen kan virke på enkelte filer, på et katalog eller på et træ af kataloger. Alt, man behøver er at installere et kernepatch og nogle utilities.
Jeg har kørt med det i ca 2 måneder, og haft en del nedbrud
af andre årsager, uden at have tabt en eneste fil af betydning. Andre
melder ligeledes om problemfri drift.
To ting skal gøres:
1. installer kernepatch fra http://www.dkuug.dk/keld/e2compr-pre0.3.5-patch-2.0.gz.uu i /usr/src - installer patch:
cd /usr/src
uudecode <path>/e2compr-pre0.3.5-patch-2.0.gz.uu
linux/scripts/patch-kernel
Derefter generer ny kerne på sædvanlig måde, evt også nye moduler.
cd /usr/src/linux
make menuconfig
Her stilles bl.a. spørgsmål om hvordan kompressionen skal virke. Jeg vil anbefale at man installerer de fulde faciliteter såsom komprimer indirekte blokke, 32 blooke i cluster; man kan så senere finde ud af om man vil bruge dem eller ej.
make zImage
make modules
make modules_install
cp arch/i386/boot/zImage /boot/zImage
lilo
(Eller hvor man nu har sin kerne installeret).
2. Installer utilities: fsck, fsck.ext2, chattr, lsattr, e2compress,
e2ratio. Disse findes i filen http://www.dkuug.dk/keld/2compr-971220.tar.gz.uu
Så download denne fil og pak den ud, installer (check lige
Makefile først):
uudecode -o - e2compr-971220.tar.gz.uu | tar xvzf -
cd e2compr-971220/prebuilt
make install
Hvorhenne data ligger er beskrevet for hver fil i dens inode. For hver diskblok (normalt af størrelsen 1 kilobyte i ext2-filsystemet) gives en addresse på disken hvor data ligger. Der laves så kompression på et antal diskblokke, fx 32 diskblokke ad gangen, og den plads der spares bliver noteret som diskblokke, som ikke er allokerede. Internt i kernen er blokkene allokerede ukomprimerede; kompression og dekompression sker hhv. når en fil lukkes endeligt og ved indlæsning fra disken.
Der sker ikke kompression hvis kernen på udskrivningstidspunktet finder ud af at der ikke spares diskplads ved kompressionen. Det kan være fordi filen er lille og alt alligevel kan være på den første diskblok, eller at filen i forvejen er komprimeret (fx en .gz fil).
Designet af dette er således rimeligt sikkert, det bygger på
det mest udbredte filsystem til Linux,
nemlig ext2 filsystemet, og det virker på filniveau, så
en enkelt fejl vil ikke påvirke hele filsystemet. Man skal
dog passe på med at boote en ny (eller gammel) kerne
uden filkompression på et system med kompression, det kan give problemer
med nyligt dannede filer, som skulle være komprimerede, men ikke
er det. Det kan anbefales at filer, der skal bruges ved opstart, fx i /etc,
/bin og /sbin ikke komprimeres - en kerne uden kompression vil da kunne
komme i luften..
"lsattr" udskriver attributter for filer. Den version jeg har brugt
kunne kun gøre det for alle filer i et katalog. "du" giver
den reele plads brugt, ligesom "s" option på "ls" giver det
relle antal blokke brugt (mens størrelsen ikke ændres ved
kompression)..
Pladsmæssigt er der typisk kun 5 - 10 procents forskel på
at have en .gz fil og og have en fil komprimeret af kernen. Man kan
typisk spare 50 % plads på et helt filsystem (idet nogen filer er
komprimerede i forvejen), og mere på udvalgte kataloger, fx HOWTO
filerne sparedes der ca 60 % på og kernens filer sparedes der ca
65 % på.