[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

e2compr [résumé]



(* je renvois le message, un pbm a eu lieu lors du premier envoi *)

Jean-Philippe Georget wrote:
> [...]
> 
> Peux-tu faire une synthèse des infos nécessaires à l'utilisation de la
> compression à la volée avec ext2 ?
Ce que j'ai fait se résume comme suit
1) Se procurer le patch  e2compr-0.4.39-patch-2.2.18.bz2

2) Patcher les sources du noyau 2.2.18. Personnelement, j'utilise des
sources issus de sources (!) diverses, en l'occurrence venant de Linux
magazine je crois.

3) Le patch a des bugs en deux endroits

a) La constante
>>
char inflate_copyright[] = " inflate 1.0.4 Copyright 1995-1996 Mark
Adler"
<<
dans le fichier /usr/src/linux/drivers/net/zlib.c est en conflit avec
>>
const char inflate_copyright[] = " inflate 1.1.3 Copyright 1995-1998
Mark Adler ";
<< 
dans /usr/src/linux/fs/ext2/gzip/inftrees.c

J'ai changé cela en

/* rajout de _gzip pour éviter deux variables identiques
   dans le fichier ./drivers/net/zlib.c */
const char inflate_copyright_gzip[] =
 " inflate 1.1.3 Copyright 1995-1998 Mark Adler ";

Puis
b) Dans <linux>/fs/nfsd/vfs.c patché:
Il y a une erreur de type dans les appels des fonctions up et down lors
de la compilation des modules. J'ai patché le fichier vfs.c par
-------------------
francois@portable:/usr/src/linux/fs/nfsd$ diff vfs.c vfs.c~
363,364c363
< /* erreur à mon avis */
<                       down(&inode->i_sem);
---
>                       down(inode->i_sem);
368c367
<                       up(&inode->i_sem);
---
>                       up(inode->i_sem);
1145,1146c1144
< /* erreur à mon avis */
<       down(&inode->i_sem);
---
>       down(inode->i_sem);
1159c1157
<       up(&inode->i_sem);
---
>       up(inode->i_sem);
francois@portable:/usr/src/linux/fs/nfsd$

Là la compilation se passe bien.

3) Chargement des utilitaires: Je ne sais plus si j'ai bêtement chargé
le module e2fsprog de chez Debian où si j'ai compilé les programmes à
partir des sources. Les paquets sont
e2fsprogs-e2c_1.18.9-1_i386.deb et e2cfsprogs_1.18.9.orig.tar.gz

4) Installation du noyau et des modules (méthode usuelle)

5) Et là, jouissance du système:
Pour comprimer (compresser ?, il y a eu un débat là dessus?) un fichier
faire
chattr +c <fichier>
Le fichier est comprimé mais cela est transparent à l'utilisation. Pour
voir l'efficacité du procéde, e2ratio est très bien.
Un chattr +c <Repertoire> fait que tout fichier crée dans ce repertoire
sera comprimé.
Exemple:
francois@portable:~$ mkdir gre
francois@portable:~$ cd gre
francois@portable:~/gre$ cp ../nsmail/Inbox .
francois@portable:~/gre$ ls -l
total 651
-rw-------    1 francois francois   661601 mar 22 21:33 Inbox
francois@portable:~/gre$ lsattr
-----------  - -      Inbox
francois@portable:~/gre$ e2ratio
652     652     100.0%  .
francois@portable:~/gre$ chattr Inbox
Must use '-b', '-m', '-v', =, - or +
francois@portable:~/gre$ chattr +c Inbox
francois@portable:~/gre$ ls -l
total 343
-rw-------    1 francois francois   661601 mar 22 21:33 Inbox
francois@portable:~/gre$ e2ratio
652     344      52.8%  .
francois@portable:~/gre$ lsattr
--c----B--- 32 gzip8  Inbox
francois@portable:~/gre$ cp Inbox Inboxbis
francois@portable:~/gre$ ls -l
total 994
-rw-------    1 francois francois   661601 mar 22 21:33 Inbox
-rw-------    1 francois francois   661601 mar 22 21:35 Inboxbis
francois@portable:~/gre$ lsattr
--c----B--- 32 gzip8  Inbox
-----------  - -      Inboxbis
francois@portable:~/gre$ e2ratio
1303    995      76.4%  .
francois@portable:~/gre$ chattr -c Inbox
francois@portable:~/gre$ e2ratio
1303    1303    100.0%  .
francois@portable:~/gre$
francois@portable:~/gre$ cd ..
francois@portable:~$ chattr +c gre
francois@portable:~$ cd gre
francois@portable:~/gre$ cp Inbox Inboxter
francois@portable:~/gre$ lsattr
-----------  - -      Inbox
-----------  - -      Inboxbis
--c----B--- 32 gzip8  Inboxter
francois@portable:~/gre$ e2ratio /usr/src/linux/
[..]
120     59       49.2%  /usr/src/linux//Documentation/usb
3163    1343     42.5%  /usr/src/linux//Documentation
6       6       100.0%  /usr/src/linux//modules
95854   35350    36.9%  /usr/src/linux/
francois@portable:~/gre$

ATTENTION: e2fsck doit être patché, le gag suivant mais arrivé lors du
début:

1) J'installe le bazar
2) Je teste sur un fichier /tmp/test
cela fait, je ne savais pas que le disque monté sur / avait un patch sur
chaque supers blocks indiquant la présence de fichiers compressés.
Notamment, le block FFF..FF n'existe plus et indique la présence d'un
bloc de 0 dans le fichier une fois décompressé.
3) Content, je reboute sur mon vieux noyau (réflexe touche sur LILO).
Pas de bol, ma racine doit être vérifié par e2fsck... et là, batterie
d'erreurs sur un système sain...: J'utilise le e2fsck patché mais pas
avec le bon noyau...
4) J'ai pu récupéré mon système sans perte en reboutant sur le bon noyau
avec un  deuxième fsck.

Moralité: Ne pas utiliser la compression sur le disque /. En cas de
plantage, on pourra le remettre d'aplomb avec une disquette standard.
Pour remettre le disque dans son état d'origine:

chattr -R -c /*
clear-e2c /dev/hda1 (par exemple)

Voilà, cela ne concerne que la compression à la volée du système ext2.
J'en suis ravi!

François Boisson



Reply to: