34.2. Les principaux systèmes de fichiers sous Linux

Contrairement à il y a deux ou trois ans, on ne choisit plus un système de fichiers pour Linux en quelques secondes (Ext2 ou ReiserFS ?). Les noyaux à partir de la version 2.4 proposent une grande variété de systèmes de fichiers. Vous trouverez ci-après une vue d'ensemble des grands principes de fonctionnement de ces systèmes de fichiers et les avantages qu'ils offrent.

Il est très important de considérer qu'il ne peut pas y avoir un système de fichiers qui convienne le mieux à tous les types d'applications. Chaque système de fichiers a ses points forts et ses faiblesses, qu'il faut prendre en compte. Quoi qu'il en soit, même le système de fichiers le plus sophistiqué ne peut pas remplacer une stratégie de sauvegarde raisonnable.

Les termes « intégrité des données » et « cohérence des données », lorsque utilisés dans ce chapitre, ne font pas référence à la cohérence des données de l'espace utilisateur (les données que votre application écrit sur ses fichiers). C'est l'application elle-même qui doit assurer la cohérence de ces données.

[Important]Configurer les systèmes de fichiers

Sauf indication contraire dans ce chapitre, toutes les étapes requises pour configurer ou changer des partitions et des systèmes de fichiers peuvent avoir lieu à l'aide du module de YaST.

34.2.1. ReiserFS

Officiellement, une des fonctionnalités phares de la version 2.4 du noyau, ReiserFS était disponible sous forme de correctif de noyau pour les noyaux SUSE 2.2.x depuis la version 6.4 de SUSE Linux. ReiserFS a été conçu par Hans Reiser et l'équipe de développement Namesys. ReiserFS a prouvé qu'il était une puissante alternative à l'ancien Ext2. Ses principaux atouts sont : une meilleure gestion de l'espace disque, de meilleures performances d'accès aux disques et une restauration plus rapide après une panne.

Les points forts de ReiserFS, de manière plus détaillée, sont :

Une meilleure gestion de l'espace disque

Dans ReiserFS, toutes les données sont organisées dans une structure dénommée arbre équilibré B*. Cette structure arborescente contribue à une meilleure gestion de l'espace disque car des petits fichiers peuvent être enregistrés directement dans les feuilles de l'arbre B* au lieu de l'être à d'autres endroits en se contentent de tenir à jour un pointeur sur l'emplacement réel du disque. En plus de cela, le stockage n'est pas alloué en blocs de 1 ou de 4 ko, mais en portions de la taille exacte nécessaire. Un autre avantage se situe dans l'allocation dynamique des inodes. Ce comportement confère au système de fichiers une plus grande flexibilité par rapport aux systèmes de fichiers classiques, comme Ext2, dans lesquels il faut spécifier la densité d'inodes au moment où l'on crée le système de fichiers.

Meilleures performances d'accès aux disques

Pour de petits fichiers, les données des fichiers et les informations (inodes) « stat_data » sont souvent enregistrées les unes à côté des autres. Elles peuvent être lues en une seule opération d'E/S sur disque, ce qui signifie qu'un seul accès au disque suffit pour récupérer toutes les informations nécessaires.

Restauration rapide après une panne

Le fait d'utiliser un fichier journal pour garder la trace de changements récents de métadonnées ramène la vérification d'un système de fichiers à quelques secondes, même pour de très gros systèmes de fichiers.

Fiabilité via journalisation des données

ReiserFS prend également en charge la journalisation des données et les modes de données de la même façon que les concepts traités dans la Section 34.2.3, « Ext3 ». Le mode par défaut est data=ordered qui assure l'intégrité des données et des métadonnées à la fois, mais n'utilise la journalisation que pour les métadonnées.

34.2.2. Ext2

Les origines d'Ext2 remontent au début de l'histoire de Linux. Son prédécesseur, l'Extended File System, a été mis en œuvre en avril 1992 et intégré à Linux 0.96c. L'Extended File System a subi un certain nombre de modifications, pour devenir pendant des années le système de fichiers le plus connu sous Linux sous le nom d'Ext2. Avec l'avènement des systèmes de fichiers journalisés et leurs temps de restauration étonnamment courts, Ext2 a perdu de son importance.

Un bref résumé des points forts d'Ext2 pourrait faire comprendre pourquoi il a été — et dans une certaine mesure est encore — le système de fichiers sous Linux favori de nombreux utilisateurs de ce système d'exploitation.

Stabilité

Étant véritablement un « vénérable vieillard », Ext2 a subi de nombreuses améliorations et a fait l'objet de tests très complets. Cela peut expliquer pourquoi le public le considère souvent « solide comme un roc ». Après une panne de système, quand le système de fichiers ne peut pas être démonté proprement, e2fsck commence à analyser les données du système de fichiers. Les métadonnées sont remises dans un état cohérent, les fichiers ou les blocs de données en attente sont écrits dans un répertoire prévu à cet effet (nommé lost+found). Contrairement aux systèmes de fichiers journalisés, e2fsck analyse le système de fichiers entier et non simplement les fragments de métadonnées qui viennent d'être modifiés. L'opération prend sensiblement plus de temps que la vérification d'un système de fichiers journalisé. Selon la taille du système de fichiers, cette procédure peut prendre une demi-heure, voire plus. Par conséquent, il n'est pas souhaitable de choisir Ext2 pour un serveur qui a besoin d'être toujours disponible. Toutefois, puisque Ext2 ne tient pas de journal à jour et utilise sensiblement moins de mémoire, il est parfois plus rapide que d'autres systèmes de fichiers.

Mise à niveau aisée

Le code d'Ext2 constitue la base solide qui a permis à Ext3 de devenir un système de fichiers de nouvelle génération très apprécié. Sa fiabilité et sa stabilité ont été habilement combinées avec les avantages d'un système de fichiers journalisé.

34.2.3. Ext3

Ext3 a été conçu par Stephen Tweedie. Contrairement à tous les autres systèmes de fichiers de nouvelle génération, Ext3 ne suit pas un principe de conception complètement nouveau. Il est basé sur Ext2. Ces deux systèmes de fichiers sont très intimement liés entre eux. Un système de fichiers Ext3 peut très facilement être construitpar-dessus un système de fichiers Ext2. La plus grande différence entre Ext2 et Ext3 est qu'Ext3 permet la journalisation. En résumé, Ext3 offre trois avantages majeurs :

Mises à niveau aisées et extrêmement fiables à partir d'Ext2

Comme Ext3 est basé sur le code d'Ext2 et partage son format de disque ainsi que son format de métadonnées, les mises à niveau d'Ext2 vers Ext3 sont extrêmement faciles. Contrairement aux transitions vers d'autres systèmes de fichiers journalisés, tels que ReiserFS, JFS ou XFS, qui peuvent être assez fastidieuses (faires des sauvegardes du système de fichiers entier et le recréer à partir de zéro), une transition vers Ext3 n'est qu'une question de minutes. Elle est également très sûre, car recréer un système de fichiers entier à partir de zéro pourrait ne pas fonctionner parfaitement. Si l'on considère le nombre de systèmes Ext2 existants qui sont dans l'attente d'une mise à niveau vers un système de fichiers journalisé, vous pouvez aisément comprendre pourquoi Ext3 pourrait être important pour de nombreux administrateurs système. Rétrograder Ext3 en Ext2 est tout aussi facile que de mettre à niveau Ext2 en Ext3. Il suffit de démonter proprement le système de fichiers Ext3 et de le remonter en tant que système de fichiers Ext2.

Fiabilité et performance

D'autres systèmes de fichiers journalisés suivent la méthode qui consiste à journaliser les « métadonnées seulement ». Cela signifie que vos métadonnées sont toujours maintenues dans un état cohérent, mais que la même chose ne peut pas être automatiquement garantie pour les données du système de fichiers elles-mêmes. Ext3 est conçu pour prendre soin à la fois des métadonnées et des données. Le degré d'« attention » peut être adapté à vos préférences personnelles. Le fait d'activer Ext3 dans le mode data=journal offre une sécurité maximale (intégrité des données), mais peut ralentir le système car les métadonnées ainsi que les données sont consignées dans le fichier journal. Une approche relativement nouvelle consiste à utiliser le mode data=ordered, qui garantit à la fois l'intégrité des données et des métadonnées, mais qui n'utilise la journalisation que pour les métadonnées. Le pilote du système de fichiers rassemble tous les blocs de données qui correspondent à une mise à jour de métadonnées. Ces blocs de données écrits sur le disque avant que les métadonnées ne soient mises à jour. En conséquence, la cohérence est obtenue pour les métadonnées et les données, sans sacrifier la performance. Une troisième option à utiliser est data=writeback, qui permet d'écrire des données dans le système de fichiers principal, une fois ses métadonnées validées dans le fichier journal. Cette option est souvent considérée comme la meilleure en termes de performance. Elle peut cependant permettre à d'anciennes données de réapparaître dans des fichiers après une panne et une restauration, alors que la cohérence interne du système de fichiers interne est conservée. À moins que vous n'ayez spécifié une autre option, Ext3 est lancé avec le paramètre par défaut data=ordered.

34.2.4. Convertir un système de fichiers Ext2 en Ext3

La conversion d'un système de fichiers Ext2 en Ext3 comprend deux étapes séparées :

Créer le fichier journal

Connectez-vous en tant que root et lancez tune2fs -j. Cette commande crée un journal Ext3 avec les paramètres par défaut. Pour décider vous-même de la taille qu'il devra avoir et sur quel disque il devra résider, lancez tune2fs -J à la place, avec les options de journal souhaitées size= et device=. D'autres informations sur le programme tune2fs se trouvent dans sa page de manuel, (tune2fs(8)).

Préciser le type de système de fichiers dans /etc/fstab

Pour vous assurer que le système de fichiers Ext3 est reconnu en tant que tel, ouvrez le fichier /etc/fstab et modifiez le type de système de fichiers indiqué pour la partition correspondante, de ext2 en ext3. Le changement entre en vigueur au prochain réamorçage.

Utiliser Ext3 pour le répertoire racine

Pour amorcer un système de fichiers racine configuré en tant que partition Ext3, intégrez les modules ext3 et jbd dans le initrd. Pour ce faire, modifiez le fichier /etc/sysconfig/kernel pour insérer les deux modules dans la ligne INITRD_MODULES, puis exécutez la commande mkinitrd.

34.2.5. Reiser4

Juste après la sortie du noyau 2.6, un nouveau membre a rejoint la famille des système de journalisation : Reiser4. Reiser4 est complètement différent de son prédecesseur ReiserFS (version 3.6). Il introduit le concept de plugins pour mettre au point les fonctionnalités du système de fichiers et un concept de sécurité à granularité plus fine.

Concept de sécurité à granularité fine

Lors de la conception de Reiser4, ses développeurs ont mis l'accent sur l'implémentation des fonctionnalités liées à la sécurité. Reiser4 contient donc un jeu de plugins spécialisés dans la sécurité. Le plus important introduit le concept d'« éléments » de fichier. À l'heure actuelle, les contrôles d'accès aux fichiers sont définis par fichier. Si un grand fichier contient des informations concernant plusieurs utilisateurs, groupes ou applications, les droits d'accès doivent être particulièrement imprécis pour inclure toutes les parties impliquées. Avec Reiser4, vous pouvez diviser ces fichiers en portions plus petites (les « éléments »). Les droits d'accès peuvent alors être attribués séparément pour chaque utilisateur permettant une gestion plus précise de la sécurité des fichiers. /etc/passwd en est un exemple parfait. Actuellement, seul root peut lire et modifier le fichier tandis que les autres utilisateurs que root n'ont qu'un accès en lecture à ce fichier. En utilisant le concept d'éléments de Reiser4, vous pouvez diviser le fichier en un jeu d'éléments (un élément par utilisateur) et permettre aux utilisateurs ou applications de modifier leurs propres données sans accéder aux données des autres utilisateurs. Ce concept permet une plus grande sécurité et une plus grande flexibilité à la fois.

Extensibilité avec les plugins

De nombreuses fonctions de système de fichiers et de fonctions externes utilisés normalement par un système de fichiers sont implémentées en tant que plugins dans Reiser4. Ces plugins peuvent être facilement ajoutés au système de base. Il n'est plus nécessaire de recompiler le noyau ou de reformater le disque dur pour ajouter des nouvelles fonctionnalités à votre système de fichiers.

Meilleure structure du système de fichiers grâce à l'affectation différée

Comme XFS, Reiser4 prend en charge l'affectation différée. Voir la Section 34.2.7, « XFS ». L'utilisation de l'affectation différée même pour les métadonnées peut résulter en une meilleure structure.

34.2.6. JFS

JFS, le Journaling File System, a été développé par IBM. La première version bêta du portage de JFS sous Linux a été mis à la disposition de la communauté Linux au cours de l'été 2000. La version 1.0.0 a été publiée en 2001. JFS est conçu pour répondre aux besoins des environnements serveur haut débit où les performances sont le but ultime. Étant un système de fichiers 64 bits complet, JFS prend en charge à la fois les partitions et les fichiers volumineux, ce qui constitue une autre raison de l'utiliser dans des environnements serveur.

Un examen plus détaillé de JFS montre pourquoi ce système de fichiers pourrait se révéler être un bon choix pour votre serveur Linux :

Journalisation efficace

JFS suit une approche « métadonnées seulement ». Au lieu d'une vérification complète, seuls sont vérifiés les changements de métadonnées générés par une activité récente du système de fichiers, ce qui économise énormément de temps lors de la restauration. Des opérations simultanées nécessitant de multiples enregistrements simultanés dans le fichier journal peuvent être combinées en une validation groupée, réduisant ainsi considérablement les baisses de performances du système de fichiers dues à de nombreuses opérations d'écriture.

Organisation efficace des répertoires

JFS reste fidèle à deux organisations différentes de répertoires. Pour de petits répertoires, il permet d'enregistrer directement le contenu du répertoire dans son inode. Pour des répertoires plus volumineux, il utilise des arbres B+, qui facilitent considérablement la gestion des répertoires.

Meilleure gestion de l'espace grâce à l'allocation dynamique des inodes

Avec Ext2, vous devez définir la densité des inodes à l'avance (l'espace occupé par les informations de gestion), ce qui restreint le nombre maximal de fichiers ou de répertoires de votre système de fichiers. JFS vous évite ces préoccupations—il alloue dynamiquement l'espace des inodes et le libère quand il n'est plus nécessaire.

34.2.7. XFS

Conçu à l'origine conçu comme le système de fichiers pour son système d'exploitation IRIX, SGI a démarré le développement de XFS au début des années 1990. L'idée derrière XFS était de créer un système de fichiers journalisé 64 bits très performant pour répondre aux défis actuels en matière d'informatique extrême. XFS est un très bon outil pour le maniement de fichiers volumineux et se comporte très bien sur du matériel de pointe. Toutefois, XFS présente un inconvénient. Comme ReiserFS, XFS accorde une grande attention à l'intégrité des métadonnées, mais moins à celle des données.

Un rapide examen des fonctionnalités clés de XFS explique pourquoi il pourrait s'avérer un concurrent de poids pour d'autres système de fichiers journalisés dans l'informatique à hautes performances.

Grande capacité à monter en charge grâce à l'utilisation de groupes d'allocation

Au moment de la création d'un système de fichiers XFS, le périphérique bloc à la base du système de fichiers est divisé en huit régions linéaires, voire plus, de taille égale. Ceux-ci sont appelés groupes d'allocation. Chaque groupe d'allocation gère ses propres inodes et l'espace disque libre. En pratique, on peut considérer les groupes d'allocation comme des systèmes de fichiers dans un système de fichiers. Comme les groupes d'allocation sont plutôt indépendants les uns par rapport aux autres, plusieurs d'entre eux peuvent être traités simultanément par le noyau. Cette fonctionnalité est la clé de l'excellente capacité à monter en charge de XFS. Naturellement, le principe de groupes d'allocation indépendants convient aux exigences des systèmes multiprocesseurs.

Performances élevées grâce à une gestion efficace de l'espace disque

L'espace libre et les inodes sont gérés par les arbres B+ à l'intérieur des groupes d'allocation. Le fait d'utiliser des arbres B+ contribue considérablement aux performances et à la capacité de montée en charge de XFS. XFS utilise l'affectation différée. XFS gère l'affectation en divisant le processus en deux. Une transaction en attente est stockée dans la mémoire vive et le volume approprié d'espace est réservé. XFS ne décide pas encore de l'endroit exact (c'est-à-dire les blocs du système de fichiers) où les données devront être stockées. Cette décision est repoussée jusqu'au dernier moment possible. Certaines données temporaires ayant une durée de vie courte peuvent ne jamais être enregistrées sur le disque, car elles risquent d'être obsolètes au moment où XFS décide de l'endroit où les enregistrer. Ainsi, XFS augmente les performances en écriture et réduit la fragmentation du système de fichiers. Comme l'allocation différée entraîne des événements d'écriture moins fréquents que dans d'autres systèmes de fichiers, il est probable que la perte de données après une panne survenant au cours d'un processus d'écriture soit plus grave.

Préallocation pour éviter la fragmentation du système de fichiers

Avant d'écrire les données sur le système de fichiers, XFS réserve (préalloue) l'espace libre nécessaire pour un fichier. La fragmentation du système de fichiers est ainsi considérablement réduite. Les performances sont améliorées, car le contenu d'un fichier n'est pas réparti sur la totalité du système de fichiers.