Version 0.4.2, 23 novembre 2001
1. Introduction
2. Support noyau et programmes requis
3. Création d'un système de fichiers ext3
4. Passage entre ext2 et ext3
5. Utilisation avancée
6. Documentation
7. Remerciements
Les systèmes de fichiers journalisés sont en passe de se banaliser sous Linux de nos jours. Les plus connus actuellement sont: reiserfs qui est intégré au noyau depuis 2.4.1; jfs développé par IBM; xfs, système de fichiers originaire de SGI, porté sous Linux par leurs soins; et enfin, ext3 dont nous allons décrire rapidement l'utilisation ici.
L'avantage d'un système de fichiers journalisé est de maintenir en permanence la cohérence des métadonnées [1]. Au reboot après un crash du système (problème matériel, bug du noyau etc), au lieu d'un long et pénible fsck avec ext2, le système va relire le journal, examiner les transactions non terminées, et remettre un système de fichiers sain en quelques secondes. En revanche, la journalisation offre peu de garantie quant au contenu des fichiers eux-même. Si vous étiez en train de modifier un fichier au moment du crash, vous ne pouvez pas toujours récupérer le fichier dans son état avant la modification (et encore moins la version modifiée), tout au moins avec les systèmes de fichiers comme reiserfs, jfs et xfs. Par contre, ext3 est plus sûr de ce côté (en mode par défaut, data=ordered, voir section 5). Pour une description technique des systèmes de fichiers journalisés, nous renvoyons le lecteur aux documents cités dans la section 6.
Ext3 est écrit au départ par Stephen Tweedie. La première version 0.0.1 date de septembre 1999. Depuis, il en est à la version 0.0.7a pour le noyau 2.2.19. Il n'y a pas de développement futur prévu pour les noyaux 2.2 à part les corrections de bugs. En effet, grâce à une nouvelle équipe de hackers, ext3 a été porté sous noyaux 2.4, et a suivi un développement rapide et intensif. Les efforts sont concentrés sur cette branche à l'heure actuelle. Ext3 est considéré comme stable, et est intégré au noyau officiel 2.4.15.
Comparé aux autres systèmes de fichiers journalisés, un des principaux intérêts d'ext3 est sa compatibilité avec le bon vieux ext2 car grosso modo, ext3 = ext2 + journal. Cela veut dire en particulier que:
Au niveau de la performance, ext3 est un peu plus rapide que reiserfs pour des opérations sur un nombre raisonnable de fichiers. Si le nombre dépasse les centaines de milliers, ext3 tout comme ext2 ne tiennent plus la comparaison. Voir les benchmarks réalisés par la société namesys (détentrice de reiserfs). J'ai moi-même commencé des tests avec le même programme, ceux de namesys étant uniquement sur ext3 sous 2.2. Il faudra sans doute compléter avec d'autres programmes de benchmark. J'insiste sur le fait qu'il faut prendre les benchmarks pour ce qu'ils sont, c'est-à-dire qu'ils ne représentent pas ce qui se passe dans la vie réelle. En ce qui concerne la comparaison entre ext2 et ext3, il faut savoir que la journalisation a un coût qui se répercute sur la performance du système de fichiers. En clair, ext3 est généralement moins rapide qu'ext2. Il faut donc peser le pour et le contre. Vous pouvez consulter l'article de Michael K. Johnson et celui de Daniel Robbins qui décrivent précisément les avantages d'ext3. Nous y reviendrons à la section 5.Vous pouvez convertir vos partitions ext2 actuelles directement en ext3 sans perte de données. Cela est appréciable si vous ne voulez (ou ne pouvez) pas jongler avec la création de nouvelles partitions.
Si vous utilisez occasionnellement un noyau qui ne reconnaît pas ext3, il montera les partitions ext3 en ext2, et les données sur la partition seront exactement les mêmes du point de vue de l'utilisateur. À cela un bémol quand même. Il faut que la partition ext3 soit démontée proprement et que /etc/fstab soit correctement renseigné. En cas de plantage, une partition ext3 ne peut être montée qu'avec un noyau supportant ext3.
Les distributions récentes (Mandrake 8.1, RedHat 7.2, Suse 7.3) supportent ext3 "out of the box". Si ce n'est pas le cas de votre distribution, il faut s'assurer que le noyau supporte ext3, et que e2fsprogs et mount soient à jour.
Le noyau. Ext3 est officiellement inclus dans le noyau depuis 2.4.15. Auparavant, il existait dans la série -ac d'Alan Cox depuis un certain temps, et aussi sous la forme de patchs pour les noyaux officiels. Vous pouvez d'abord vérifier la présence du support d'ext3 avec les commandes grep ext3 /proc/filesystems(attention au sens des quotes `). Si vous voyez "ext3" ou "ext3.o", alors votre noyau supporte ext3. Sinon, il va falloir le patcher et recompiler. Vous pouvez obtenir les patchs pour les noyaux 2.4 récents ici, et pour les 2.2 là. La procédure de recompilation est standard à partir des sources officielles:
find /lib/modules/`uname -r` -name ext3.ocd /usr/src/linux/Pour les noyaux 2.2, il faut d'abord décompresser ext3-0.0.*.tar.gz, ensuite patcher successivement linux-2.2.x.kdb.diff et linux-2.2.x.ext3.diff avec
gzip -dc /chemin/de/ext3-2.4-*-*.patch.gz | patch -p1patch -p1 < /chemin/de/linux-2.2.x.yyy.diffEnsuite, make menuconfig ou make xconfig. Dans la section "File systems", activer le support d'ext3 ("Ext3 journalling file system support" pour 2.4 et "Enable Second extended fs development code" pour 2.2). Il est plus simple de le compiler en dur (au lieu d'être en module), surtout si vous prévoyez de mettre la partition / en ext3. Ensuite,make dep clean bzImagecopier le nouveau noyau
make modules
su
make modules_installcp arch/ARCH/boot/bzImage /boot/vmlinuz-ext3où ARCH est i386, alpha, ... suivant la famille du processeur, ajouter une entrée dans /etc/lilo.conf pour le nouveau noyau,image = /boot/vmlinuz-ext3et relancer /sbin/lilo. Si ext3 est en module, ne pas oublier mkinitrd. Pour plus de détail sur la compilation du noyau et la configuration de lilo.conf, consulter Kernel-Howto, Lilo-Howto, et taper man lilo.conf. Rebooter et c'est prêt.
label = ext3fs
root = /dev/hda1 (mettez votre partition / ici)
read-only
e2fsprogs. C'est le package qui contient mke2fs, fsck, tune2fs etc. Tous ces outils sont destinés aux systèmes de fichiers ext2 et ext3 sans distinction. Il est recommandé d'installer la version 1.25 ou supérieure (entre autres pour que fsck reconnaisse le flag auto dans /etc/fstab). Vérifiez votre version en tapant fsck [liu]:~/$ fsckPour installer la version requise, visitez le site de votre distribution, ou récupérez les sources et compilez-les vous-même. Dans le répertoire des sources (détarées et décompressés), vous tapez
fsck 1.25 (20-Sep-2001)
No devices specified to be checked!./configurePar défaut, les programmes sont installés dans /sbin. Il faut qu'ils soient dans le même répertoire que vos binaires d'origine.
make
make check
su
make install
mount. Il est recommandé d'installer la version 2.11f ou supérieure. Ceci afin que mount reconnaisse automatiquement les partitions ext3. Vérifiez votre version avec mount -V [liu]:~/$ mount -VLe programme mount se trouve dans le package util-linux. Ce package contient des programmes vitaux du système, et la configuration de ses options n'est pas d'un abord facile pour un débutant. Mais en ce qui nous concerne ici, on peut se contenter dans le répertoire des sources d'un
mount: mount-2.11hmake lib mountAinsi on n'installe que mount et quelques autres programmes du répertoire mount/. Il est important de taper cd mount/ sous peine de casser votre système en installant d'autres programmes. Si vous avez des doutes, ne touchez à rien. Après tout, ce n'est pas bien gênant de devoir taper mount -t ext3 /dev/toto /titi au lieu de mount /dev/toto /titi. Mais alors vous ne pouvez pas utiliser "auto" comme type de système de fichiers dans /etc/fstab. Voir plus bas.
cd mount/
su
make install
La création d'un système de fichiers ext3 est très simple. Dans tout ce qui suit, nous prenons l'exemple d'une partition /dev/hda5 montée en /usr/local, et nous signalerons autant que possible les particularités concernant la partition /.
Vous pouvez contrôler le résultat en tapantSur une partition neuve. Vous avez une partition flambant neuve, disons /dev/hda5, et vous souhaitez la formater en ext3. Rien de plus simple. Vous tapez (en tant que root): mke2fs -j /dev/hda5Sur une partition ext2 existante. Vous avez une partition, disons /dev/hda5, avec déjà le système de fichiers ext2 dessus. Vous pouvez la convertir en ext3 avec la commande tune2fs -j: Cette opération préserve vos données existantes. De plus, elle ne nécessite pas de démonter la partition. Taper man mke2fs et man tune2fs pour plus de détails sur les options liées au journal.[root]:~/# tune2fs -j /dev/hda5 tune2fs 1.25 (20-Sep-2001) Creating journal inode: done This filesystem will be automatically checked every 35 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
Le flag "has_journal" montre que vous avez ext3 sur la partition. Pour s'en servir sans plus tarder, il suffit maintenant de démonter la partition (si elle est déjà montée en ext2 et si ce n'est pas /) et de la remonter en ext3. Par exemple:[root]:~/# dumpe2fs -h /dev/hda5
dumpe2fs 1.25 (20-Sep-2001)
Filesystem volume name: < none >
...
Filesystem features: has_journal filetype ...
Pour la partition /, il faut rebooter.umount /dev/hda5
mount -t ext3 /dev/hda5 /usr/local
(mettre 1 à la dernière colonne s'il s'agit de la partition /). L'option "auto" permet de monter une partition ext3 si mount est de version supérieure à 2.11f. De plus, cette option a l'avantage de permettre à un noyau ne reconnaissant pas ext3 de monter la partition en ext2. Par contre, pour /, il vaut mieux mettre ext3 directement. Elle sera toujours montée en ext2 par un noyau sans le support d'ext3, et cela évite à df d'oublier d'afficher /, et surtout, il semble que l'option auto pour / pose quelque problème si ext3 est en module chargé par initrd. Pour les options de montage (à la place de defaults), voir man mount ou la section 5.Éditer fstab. Il reste à remplir correctement /etc/fstab pour que la partition soit automatiquement montée en ext3 lors des prochains montages. Le flag pour le type de partition est "auto" ou "ext3". Par exemple: /dev/hda5 /usr/local auto defaults 1 2
Monter une partition ext3 en ext2. Si, pour une raison ou autre, vous voulez monter une partition ext3 en ext2, vous avez juste à démonter la partition et la remonter en ext2. Avec l'exemple plus haut : umount /usr/localBien sûr cette opération est impossible avec la partition /. Pour monter / en ext2, il faut rebooter et rentrer l'option
mount -t ext2 /dev/hda5 /usr/localLILO: linux rootfstype=ext2au prompt de lilo (ce n'est valable qu'avec un noyau 2.4). Noter que le changement de "ext3" ou "auto" en "ext2" au niveau de /etc/fstab ne servirait à rien, car ce fichier n'est pas lu au moment où le noyau monte la partition /.
Pour revenir en ext3. Si une partition possédant les attributs d'ext3 a été montée en ext2, on la démonte, et on la remonte en ext3. Par exemple: umount /usr/localIl n'y a rien d'autre à faire. Le journal n'est pas altéré par le montage en ext2.
mount -t ext3 /dev/hda5 /usr/local
Suppression d'ext3. Taper les commandes suivantes avec l'exemple plus haut: umount /dev/hda5L'option de tune2fs est la lettre O, et non le chiffre 0. La commande fsck qui suit a pour rôle de supprime l'inode du journal. Enfin, le cas échéant, on peut supprimer le fichier ".journal" pour gagner un peu de place:
tune2fs -O ^has_journal /dev/hda5
fsck /dev/hda5
mount -t ext2 /dev/hda5 /usr/localchattr -i /usr/local/.journalPour terminer, ne pas oublier de modifier /etc/fstab en conséquence.
rm /usr/local/.journal
Peut-on se passer de fsck à intervalle régulier ? Avec ext3, fsck est programmé par défaut pour se lancer tous les 35 montages (au lieu de 20 pour ext2) et tous les 180 jours. Vous pouvez régler cet intervalle avec tune2fs -c et tune2fs -i. En tout état de cause, il est préférable de laisser tourner fsck au moins une fois de temps à autres. En effet, le système de fichiers étant toujours marqué comme "clean" si son démontage se passe correctement, en cas de problème matériel sur le disque dur ou en cas de bugs du noyau, les erreurs ne sont pas toujours détectées. Il sera probablement trop tard pour agir quand vous les découvrirez. Modes de journalisation. Ext3 dispose de trois modes de journalisation: "data=writeback"; "data=ordered"; et "data=journal". Ces modes sont activables au montage de la partition. Par défaut, ext3 est monté avec le mode "data=ordered" qui convient pour le cas général. Dans ce mode, les metadata - métadonnées [1] - sont d'abord écrites dans le journal, ensuite sur le disque après l'écriture effective des données sur le disque. Le mode writeback, où les métadonnées sont journalisées mais peuvent être écrites sur le disque avant les données elles-mêmes, est plus rapide dans certaines circonstances, tout en assurant la cohérence du système de fichiers (c'est une garantie supplémentaire par rapport à ext2). C'est aussi le mode de fonctionnement de reiserfs, jfs et xfs. Enfin, le mode "data=journal", où les données et les métadonnées sont journalisées, est plus lent car les données sont écrites deux fois, mais offre aussi plus de garantie quant à l'intégrité des fichiers. Ce mode est, semble-t-il, plus adapté aux bases de données. Le choix du mode dépend de vos besoins et des fonctions assignées à la partition concernée. Rien ne vaut un test en situation réelle. Pour utiliser un mode différent de celui par défaut, on met par exemple /dev/hda5 /usr/local auto data=writeback 1 2dans /etc/fstab. Pour un changement temporaire, on démonte la partition et on la remonte avecumount /usr/localPour la partition /, on rentre l'option
mount -o data=writeback /usr/localLILO: linux rootflags=data=writebackau boot (ou ajouter append="rootflags=data=writeback" dans lilo.conf).
Le choix des partitions. On peut envisager l'installation de plusieurs types de systèmes de fichiers en fonctions de la partition. Par exemple, ext3 pour les partitions dont l'intégrité est primordiale: /home, /var/spool/mail etc; ext2 avec option de montage ro (lecture seule) pour les partitions où l'écriture est occasionnelle: /usr, /usr/local; ext2 avec option noatime pour les partitions où les données sont transitoires /tmp, /var/tmp, répertoires de compilation etc.
Le journal. C'est l'endroit où sont stockés les logs d'activité de la journalisation. Si le journal a été créé par la commande tune2fs -j sur une partition démontée, ou par mke2fs -j sur une partition non formatée, alors il se matérialise sous la forme d'un inode invisible par le système de fichiers. Sinon, c'est un fichier caché ".journal" à la racine du système de fichiers, avec attribut "immuable" (man chattr). Si vous voulez recréer le journal sur /usr/local (par exemple si son journal est corrompu), il faut supprimer ext3 sur la partition, et recréer le journal en suivant la section 3. Une autre manière de procéder est comme suit (toujours avec l'exemple de la section 3): mount -o remount,ro /dev/hda5(démonter la partition avant tune2fs -j si on veut un inode invisible au lieu du fichier ".journal"). Cette méthode a l'avantage de pouvoir s'appliquer à la partition /, il suffit auparavant de fermer le maximum d'applications, et de passer au runlevel 1: telinit 1. Après la création du nouveau journal sur /, on revient au runlevel précédent N par un telinit N. En plus court: telinit `runlevel | cut -c 1`.
tune2fs -O ^has_journal /dev/hda5
fsck /dev/hda5
mount -o remount,rw /dev/hda5
chattr -i /usr/local/.journal; rm /usr/local/.journal
tune2fs -j /dev/hda5
Vous trouverez des explications détaillées sur l'installation et l'utilisation d'ext3 dans:
Using the ext3 filesystem in 2.4 kernels d'Andrew Morton, un des développeurs d'ext3.Des documents plus techniques sur ext3 et les systèmes de fichiers journalisés en général:
Whitepaper: Red Hat's New Journaling File System: ext3, un très bon document écrit par Michael K. Johnson. Attention, ext3 n'appartient pas à RedHat !
EXT3 File System mini-HOWTO rédigé par Rajesh Fowkar.
EXT3, Journaling Filesystem, une conférence de Stephen Tweedie en juillet 2000.
Softupdates et filesystems journalisés, un article de Thomas Pornin. Attention, ext3 ayant évolué depuis l'écriture de cet article, certaines réserves concernant ext3, notamment le fait que les données sont obligatoirement journalisées, ne sont plus de mise. Voir la section 5.
Étude sur l'évolution des systèmes de fichiers d'Yves Rougy (Alcôve).
Journalling Filesystems for Linux, Linux Gazette numéro 68, par Matteo Dell'Omodarme.
Journal File Systems, (la traduction en français ici) Linux Gazette numéro 55, par Juan I. Santos Florido.
Introducing ext3 par Daniel Robbins.
[1] Les données sont les contenus des fichiers, tandis que les métadonnées sont relatives aux structures d'un système de fichiers: emplacement des fichiers, inodes, etc.