Installation et utilisation du système de fichiers ext3

Qing LIU (qliu@club-internet.fr)

Version 0.4.2, 23 novembre 2001


Ce document a pour but d'aider les utilisateurs peu ou moyennement expérimentés à mettre en place un système de fichiers ext3. En dehors de quelques expériences pratiques, j'ai surtout puisé mes sources dans le document d'Andrew Morton, ainsi que dans la lecture de la mailing-list ext3-user, en espérant ne pas avoir introduit trop d'erreurs. La version la plus récente de ce document se trouve sur http://qliu.free.fr/Linux/ext3.html. Merci de m'envoyer vos critiques par email.

Sommaire

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

1. Introduction

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:

  • 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.
  • 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.

    [Sommaire]


    2. Support noyau et programmes requis

    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
    find /lib/modules/`uname -r` -name ext3.o
    (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:
    cd /usr/src/linux/
    gzip -dc /chemin/de/ext3-2.4-*-*.patch.gz | patch -p1
    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
    patch -p1 < /chemin/de/linux-2.2.x.yyy.diff
    Ensuite, 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 bzImage
    make modules
    su
    make modules_install
    copier le nouveau noyau
    cp arch/ARCH/boot/bzImage /boot/vmlinuz-ext3
    ARCH est i386, alpha, ... suivant la famille du processeur, ajouter une entrée dans /etc/lilo.conf pour le nouveau noyau,
    image = /boot/vmlinuz-ext3
    label = ext3fs
    root = /dev/hda1
    (mettez votre partition / ici)
    read-only
    et 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.
  • 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]:~/$ fsck
    fsck 1.25 (20-Sep-2001)
    No devices specified to be checked!
    Pour 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
    ./configure
    make
    make check
    su
    make install
    Par 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.

  • 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 -V
    mount: mount-2.11h
    Le 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
    make lib mount
    cd mount/
    su
    make install
    Ainsi 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.

  • [Sommaire]

    3. Création d'un système de fichiers ext3

    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 /.

  • Sur 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/hda5
  • Sur 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:
    [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.
    
    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.
  • Vous pouvez contrôler le résultat en tapant
    [root]:~/# dumpe2fs -h /dev/hda5
    dumpe2fs 1.25 (20-Sep-2001)
    Filesystem volume name: < none >
    ...
    Filesystem features: has_journal filetype ...
    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:
    umount /dev/hda5
    mount -t ext3 /dev/hda5 /usr/local
    Pour la partition /, il faut rebooter.

  • É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
    (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.

  • Quelques bugs connus. Avec le noyau 2.4.10, la création d'ext3 sur la partition / échoue sans que l'on en soit averti. Il faut donc éviter d'utiliser ce noyau avec ext3. Il a de toute façon des défauts rédhibitoires de jeunesse, à cause du changement de la gestion de la VM (mémoire virtuelle), vous pouvez vous en passer sans regret :-). Si vous avez une Suse 7.3, il faut mettre à jour leur script mk_initrd. Enfin, bug plus sérieux, à l'heure où ce document est écrit, il semble qu'ext3 ne cohabite pas encore parfaitement avec disk quota.

  • [Sommaire]

    4. Passage entre ext2 et ext3

  • 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/local
    mount -t ext2 /dev/hda5 /usr/local
    Bien sûr cette opération est impossible avec la partition /. Pour monter / en ext2, il faut rebooter et rentrer l'option
    LILO: linux rootfstype=ext2
    au 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/local
    mount -t ext3 /dev/hda5 /usr/local
    Il n'y a rien d'autre à faire. Le journal n'est pas altéré par le montage en ext2.

  • Suppression d'ext3. Taper les commandes suivantes avec l'exemple plus haut:
    umount /dev/hda5
    tune2fs -O ^has_journal /dev/hda5
    fsck /dev/hda5
    mount -t ext2 /dev/hda5 /usr/local
    L'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:
    chattr -i /usr/local/.journal
    rm /usr/local/.journal
    Pour terminer, ne pas oublier de modifier /etc/fstab en conséquence.

  • [Sommaire]

    5. Utilisation avancée

  • 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 2
    dans /etc/fstab. Pour un changement temporaire, on démonte la partition et on la remonte avec
    umount /usr/local
    mount -o data=writeback /usr/local
    Pour la partition /, on rentre l'option
    LILO: linux rootflags=data=writeback
    au 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
    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
    (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`.

  • [Sommaire]


    6. Documentation

    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.

    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.
    Des documents plus techniques sur ext3 et les systèmes de fichiers journalisés en général:
    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.

    [Sommaire]



    7. Remerciements

    Pendant la rédaction de ce document, Isabelle a relu attentivement le texte, A. Gomes-do-Vale, E. Labaume et T. Nemeth m'ont fait des suggestions pour améliorer la présentation, et V. Bernat m'a dit "Aucune [remarque], c'est très bien" (ça fait toujours plaisir :)).

    [Sommaire]


    [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.