Les systèmes de fichiers étendus (Ext, Ext2, Ext3)

Le système de fichiers étendus (ExtFS), le second système de fichiers étendus (Ext2FS) et le troisième système de fichiers étendus (Ext3FS) furent conçus et développés pour Linux par Rémy Card, Laboratoire MASI--Institut Blaise Pascal, , Theodore Ts'o, Massachussets Institute of Technology, et Stephen Tweedie, University of Edinburgh,

Le système de fichiers étendu (ExtFS)

C'est un ancien système de fichiers utilisé dans les premiers systèmes Linux.

Le deuxième système de fichiers (Ext2FS)

Le deuxième système de fichiers est probablement le système de fichiers le plus largement répandu dans la communauté Linux. Il fournit une sémantique Unix standard et des fonctionnalités avancées. Qui plus est, grâce aux optimisations incluses dans le code du noyau, il est robuste et offre d'excellentes performances.

Puisque Ext2FS fut conçu de manière évolutive, il prévoit l'ajout de nouvelles capacités. Certaines personnes sont en train de développer des extensions au système actuel : listes de contrôle d'accès se conformant à la sémantique Posix, undelete, et compression de fichier à la volée.

Ext2FS fut d'abord développé et intégré au noyau Linux et est maintenant activement porté sur d'autres systèmes d'exploitation. Un serveur Ext2FS tournant sur le système GNU Hurd a été développé. Des gens sont aussi en train de travailler sur un portage de Ext2FS pour le serveur LITES, tournant sur le micro-noyau Mach et sur le système d'exploitation VSTa. Dernier point, mais non des moindres, Ext2FS est une partie importante du système d'exploitation Masix, actuellement en cours de développement par l'un des auteurs.

Motivations

Le second système de fichiers étendu fut conçu et implémenté pour résoudre certains problèmes présents dans le premier système de fichiers étendu. Notre but était de fournir un système de fichiers puissant, qui utilise la sémantique des fichiers Unix et offre des fonctionnalités avancées.

Bien sûr, nous voulions que Ext2FS aie d'excellentes performances. Nous voulions aussi un système de fichiers très robuste dans le but de réduire les risques de perte de données lors d'usage intensif. Finalement, et non des moindres, Ext2FS a dû prévoir de la place pour les extensions, permettant ainsi aux utilisateurs de bénéficier de nouvelles fonctionnalités sans avoir à reformater leur système de fichiers.

Les fonctionnalités standard d'Ext2FS

Ext2FS supporte les types de fichiers standards Unix suivants : fichiers réguliers, répertoires, fichiers périphériques spéciaux et liens symboliques.

Ext2FS est capable de gérer les systèmes de fichiers créés sur de très grandes partitions. Tandis que le code originel du noyau restreint sa taille maximale à 2 Go, les travaux récents dans la couche VFS ont repoussé cette limite à 4 TB. Ainsi, il est maintenant possible d'utiliser de gros disques sans avoir besoin de créer de nombreuses partitions.

Ext2FS gère les noms de fichiers longs. Il utilise des entrées de répertoire de taille variable. La taille maximale d'un nom de fichier est de 255 caractères. Cette limite peut être étendue à 1012 si nécessaire.

Ext2FS réserve certains blocs pour le super utilisateur (root). Normalement, 5% des blocs sont réservés. Cela permet à l'administrateur de rattraper facilement des situations où un processus utilisateur remplit le système de fichiers.

Les fonctionnalités ``avancées'' d'Ext2FS

En plus des fonctionnalités Unix standard, Ext2FS supporte certaines extensions qui ne sont généralement pas présentes dans les systèmes de fichiers Unix.

Les attributs de fichiers autorisent les utilisateurs à modifier le comportement du noyau quand il agit sur un ensemble de fichiers. On peut ainsi modifier les attributs d'un fichier ou d'un répertoire. Dans ce dernier cas, les nouveaux fichiers créés dans ce répertoire héritent de ces attributs.

La sémantique BSD ou Système V Version 4 peut être sélectionnée au montage. Une option de mount autorise les administrateurs à choisir la sémantique de la création de fichier. Sur un système de fichiers monté avec la sémantique BSD, les fichiers sont créés avec le même identifiant de groupe (gid) que leur répertoire courant. La sémantique des Systèmes V est un peu plus complexe : si un répertoire a le « bit setgid » positionné, les nouveaux fichiers héritent de l'identifiant de groupe du répertoire et les sous-répertoires de l'identifiant de groupe et du « bit setgid » ; dans les autres cas, fichiers et sous-répertoires sont créés avec le premier identifiant de groupe du processus appelant.

Les mises à jour synchronisées du type BSD peuvent être utilisées avec Ext2FS. Une option de montage permet à l'administrateur d'imposer l'écriture synchrone des metadata (i-noeuds, bloc de champs de bits, blocs indirect et bloc répertoires) le disque quand elles sont modifiées. Cela peut être utile pour maintenir une cohérence stricte des metadata mais cela conduit à de faibles performances. En réalité, cette fonctionnalité n'est pas, normalement utilisée car en plus de la perte de performance associée à l'utilisation de mise à jour synchrone des metadatas, elle peut causer des corruptions dans les données des utilisateurs qui ne seront pas signalé par le contrôleur de système de fichiers (fsck).

Ext2FS permet à l'administrateur de choisir la taille des blocs logiques lors de la création du système de fichier. La taille des blocs peut généralement être de 1024, 2048 ou 4096 octets. L'utilisation de blocs de grande taille peut accélérer les E/S car imposant moins de requêtes d'E/S, et par là même moins de déplacement des têtes de disque sont nécessaires pour accéder à un fichier. D'un autre côté de gros blocs font perdre plus d'espace disque : en moyenne, le dernier bloc alloué à un fichier est seulement à moitié utilisé. Plus les blocs seront gros, plus l'espace sera gaspillé dans le dernier bloc de chaque fichier. De plus, la plupart des avantages des blocs de grande taille sont obtenus par les techniques de pré-allocation du système de fichiers Ext2.

Ext2FS implémente des liens symboliques rapides. Un lien symbolique rapide n'utilise aucun bloc de donnée sur le système de fichiers. Le nom de la cible n'est pas enregistré dans un bloc de donnée mais dans l'i-noeud lui-même. Cette politique peut économiser de l'espace disque (il n'est pas nécessaire d'allouer des blocs de données) et améliore la performance des opérations sur les liens (il n'y a pas besoin de lire un bloc de données quand on accède à un tel lien). Bien sûr, l'espace disque disponible dans l'i-noeud est limité donc tous les liens ne peuvent pas être implémentés comme des liens symboliques rapides. La taille maximale du nom de la cible pour un lien symbolique rapide est de 60 caractères. Nous prévoyons d'étendre ce modèle aux petits fichiers dans un proche avenir.

Ext2FS garde la trace de l'état du système de fichiers. Un champ spécial dans le superbloc est utilisé par le code du noyau pour indiquer l'état du système de fichiers. Quand un système de fichiers est monté en mode lecture/écriture, son état est considéré comme non propre (« Not Clean »). Quand il est démonté ou remonté en mode lecture seule, son état redevient propre (« Clean »). Au démarrage, le vérificateur du système de fichiers utilise cette information pour décider si le système de fichiers doit être vérifié. Le code du noyau peut aussi enregistrer des erreurs dans ce champ. Quand une incohérence est détectée par le code du noyau, le système de fichiers est marqué comme contenant des erreurs (« Erroneous »). Le vérificateur de système de fichiers teste cela pour forcer la vérification du système de fichiers sans se préoccuper de son état apparemment propre.

Toujours éviter la vérification du système de fichiers peut parfois être dangereux. Ext2FS fournit donc deux manières de forcer la vérification à intervalles réguliers. Un compteur de montage est maintenu dans le « superbloc ». Chaque fois que le système de fichiers est monté en mode lecture/écriture, ce compteur est incrémenté. Quand il atteint la valeur maximale (elle aussi enregistrée dans le « superbloc »), le vérificateur de système de fichiers force la vérification même si le système de fichiers est dans un état propre. Les champs date de la dernière vérification et intervalle maximal de vérification sont aussi maintenu dans le « superbloc ». Ces deux champs autorisent l'administrateur à requérir des vérifications périodiques. Quand l'intervalle maximal de vérification est atteint, le vérificateur ignore l'état du système de fichier et force sa vérification.

Un attribut autorise un utilisateur à demander une suppression sécurisée des fichiers. Quand un tel fichier est effacé, des données aléatoires sont écrites dans le bloc disque précédemment alloué à ce fichier. Cela empêche des personnes malintentionnées d'avoir accès au contenu précédent du fichier en utilisant un éditeur de disque.

Pour finir, de nouveaux types de fichiers inspirés par le système de fichiers 4.4BSD ont récemment été ajoutés à Ext2FS. Les fichiers immuables peuvent seulement être lus : personne ne peut y écrire ou les effacer. Cela peut être utilisé pour protéger des fichiers de configurations sensibles. Les fichiers « ajout-seul » (« Append-only ») peuvent être ouverts en mode écriture mais les données sont toujours ajoutées à la fin du fichier. Comme les fichiers immuables, ils ne peuvent pas être effacés ou renommés. Cela est surtout utile pour les fichiers de journalisation (« log ») qui ne peuvent que grandir.

La structure physique

La structure physique du système de fichiers Ext2 fut très fortement influencée par l'agencement du système de fichiers BSD. Un système de fichiers est composé de groupes de blocs. Les groupes de blocs sont analogues aux groupes de cylindres du FFS BSD. Néanmoins, les groupes de blocs ne sont pas attachés à l'agencement physique des blocs sur le disque, puisque les disques modernes sont optimisés pour les accès séquentiels et pour cacher leur géométrie physique au système d'exploitation.

Secteur d'amorceGroupe de blocs 1Groupe de blocs 2...Groupe de blocs n

Chaque groupe de blocs contient une copie redondante des informations de contrôles cruciales du système de fichiers (les super blocs et les descripteurs de système de fichiers). Il contient aussi une partie du système de fichiers (une bitmap pour les gestion des blocs, une bitmap pour les i-noeuds, une partie de la table des i-noeuds, et des blocs de données). La structure d'un groupe de blocs est représentée par ce schéma :

Super blocDescripteur du SFBitmap des blocsBitmap des i-noeudsTable des i-noeudsBlocs de données

Utiliser un groupe de bloc est un gros avantage en terme de fiabilité, comme les structures sont copiées dans chaque groupe de blocs, il est plus facile de récupérer un système de fichiers dont le super bloc a été corrompu. Cette structure aide aussi à obtenir de bonnes performances. En réduisant la distance entre la table des i-noeuds et les blocs de données, il est possible de réduire le chemin parcouru par les têtes de lecture des disques durs pendant les E/S sur les fichiers.

Sous Ext2FS, les répertoires sont gérés comme une liste chaînée dont la longueur des entrées est variable. Chaque entrée contient le numéro d'i-noeud, la taille de l'entrée, le nom et la longueur du fichier. En utilisant une longueur d'entrée variable, il est possible d'utiliser des noms de fichiers longs sans perdre de l'espace disque dans les répertoires.

L'optimisation des performances

Sous Linux, le code du noyau relatif à Ext2FS contient beaucoup d'optimisations, ce qui tend à améliorer la vitesse des E/S pendant la lecture et l'écriture de fichiers.

Ext2FS tire parti de la gestion des tampons antémémoires en effectuant des lectures anticipées : quand un bloc doit être lu, le code noyau requiert l'E/S sur plusieurs blocs contigus. De cette manière, il essaie de s'assurer que le bloc suivant à lire est déjà chargé dans le tampon d'antémémoire. Les pré-lectures sont normalement effectuées pendant les lectures séquentielles sur un fichier et Ext2FS l'étend aux lectures de répertoires, soit les lectures explicites (appel readdir(2)) ou les implicites (voir le fichier namei.c.)

Les allocations sont aussi optimisées dans Ext2FS. Les groupes de blocs sont utilisés pour rassembler les i-noeuds et les données reliées : le code noyau essaie toujours d'allouer des blocs de données pour un fichier dans le même groupe que son i-noeud. Ceci a pour but de réduire le déplacement des têtes de lecture quand le noyau lit un i-noeud et ses blocs de données.

Lors de l'écriture de données dans un fichier, Ext2FS pré-alloue jusqu'à 8 blocs adjacents pendant l'allocation d'un nouveau bloc. L'efficacité de la pré-allocation est d'environ 75%, même sur les systèmes de fichiers pleins. Cette pré-allocation permet d'atteindre de bonnes performances en écriture avec une forte charge. Elle permet aussi que des blocs contigus soient alloués aux fichiers, accélérant ainsi les prochaines lectures séquentielles.

Ces deux optimisations de l'allocation ont pour effet de permettre un bon positionnement des :

  • fichiers reliés au travers des groupes de blocs

  • blocs reliés au travers du regroupement par 8 bits des blocs d'allocation

Le troisième système de fichiers (Ext3FS)

Ext3FS supporte les mêmes fonctionnalités qu'Ext2FS, mais inclut en plus la journalisation. Vous pouvez télécharger une pré-version depuis ftp://ftp.uk.linux.org/pub/linux/sct/fs/jfs/.

La compression transparente pour Ext2FS - E2compr -

Implémente la commande chattr +c pour le système de fichiers Ext2FS. Le logiciel consiste en un patch pour le noyau Linux et diverses versions de plusieurs logiciels (principalement e2fsprogs ie. e2fsck et compagnie). Bien qu'un certain nombre de personnes l'aient utilisé pendant des années, CE LOGICIEL EST TOUJOURS EN COURS DE DEVELOPPEMENT ET N'EST PAS PRÊT POUR LES UTILISATEURS FINAUX.

Accéder à Ext2FS depuis DOS (outils Ext2FS)

Une collection de programmes DOS qui vous permettent de lire un système de fichiers Linux Ext2FS depuis DOS.

Accéder àExt2 depuis DOS, Windows 9x/NT et autres Unix (LTools)

Les LTOOLS sont à DOS / Windows 3.x / Windows 9x / Windows NT ou les UNIX autres que Linux, ce que les MTOOLS sont à Linux. Vous pouvez accéder (lire, écrire, modifier) vos fichiers Linux quand vous utilisez un des autres systèmes d'exploitation. Le noyau des LTOOLS est un ensemble de programmes en ligne de commande. Un programme JAVA servant d'interface graphique autonome est aussi disponible. Alternativement, vous pouvez utiliser votre navigateur web standard comme interface graphique. Les LTOOLS ne vous fournissent pas que l'accès à vos fichiers Linux sur votre machine mais aussi un accès distant aux fichiers sur d'autres machines.

Accéder Ext2 depuis OS/2

EXT2-OS2 est un paquetage qui autorise OS/2 à accéder de manière transparente aux partitions Ext2FS formatées pour Linux comme si elles étaient des lettres de lecteur OS/2 standard. Le but ultime de ce paquetage est d'être capable d'utiliser le système de fichier Ext2FS en remplacement de FAT ou HPFS. Pour le moment, la seule fonctionnalité manquante pour y parvenir est le support des attributs étendus d'OS/2.

Accéder Ext2 depuis Windows 95/98 (FSDEXT2)

Accéder Ext2 depuis Windows 95 (Explore2fs)

Application non-système (i.e. pas un pilote) qui peut lire et écrire sur le second système de fichiers étendu, Ext2FS. Support des disques durs et des media amovibles, y compris le Zip et la disquette. Utilise une interface utilisateur semblable à l'explorateur Windows pour vous montrer les fichiers et leurs détails. Supporte le Drag & Drop, les menus contextuels, etc... Ecrit au départ pour Windows NT, mais supporte partiellement Windows 95. Les disques durs de grande taille[1] peuvent poser des problèmes.

Accéder Ext2 depuis Windows NT (ext2fsnt)

Accéder à Ext2 depuis BeOS

Ce pilote permet à BeOS de monter le système de fichiers Linux Ext2FS. L'auteur considère que le version actuellement diffusée est plutôt stable. les gens l'utilisent depuis un moment, sans rapporter de bogues.

L'auteur travaille maintenant pour Be Inc., vous ne verrez donc plus son support pour les systèmes de fichiers Ext2FS et NTFS mis à jour sur son site web. Les pilotes seront intégrés dans les prochaines diffusions de BeOS.

Accéder à Ext2 depuis MacOS (MountX)

Pilote MacOS qui permet de monter le système de fichier Ext2FS (Linux et MkLinux) sur un Macintosh.

Accéder à Ext2 depuis MiNT

Ceci est un pilote pour le système de fichier Ext2FS complètement fonctionnel pour FreeMiNT. Il peut lire et écrire la version actuelle de Ext2FS telle qu'implémentée sous Linux par exemple. La taille de la partition n'est pas limité et la taille des secteurs logiques peut être de 1024, 2048 ou 4096 octets. La seule restriction est que la taille physique des secteurs soit inférieure ou égale à la taille logique des secteurs. La taille des blocs peut être configurée si vous initialisez la partition avec mke2fs.

Le défragmenteur pour Ext2FS

Défragmente votre système de fichier Ext2FS. Nécessite la mise à jour de la librairie glibc.

Le retailleur pour Ext2FS

Modifie la taille de systèmes de fichiers Ext2FS.

Ext2end

Pour utiliser avec LVM. Constitué de deux utilitaires, ext2endable qui réorganise un système de fichier Ext2FS vide pour lui permettre d'être étendu, et de ext2end qui étend un système de fichiers Ext2FS non monté. Si ext2endable n'a pas été utilisé lors de la création du système de fichiers, ext2end sera seulement capable de l'étendre au prochain multiple de 256 Mo.

Réparer/analyser/créer Ext2 avec E2fsprogs

Le paquetage ext2fsprogs contient les utilitaires essentiels du système de fichers Ext2FS qui consiste en e2fsck, mke2fs, debugfs, dumpe2fs, tune2fs, et la plupart des autres utilitaires clef du système de fichiers Ext2FS.

L'éditeur de système de fichier ext2 : Ext2ed

ext2ed est un éditeur de disque pour le second système de fichiers étendu. Il vous montrera la structure du système de fichiers Ext2FS de manière agréable et intuitive, vous laissant facilement « voyager » entre elles et faire les modifications nécessaires.

L'éditeur de système de fichiers Linux : lde

Il vous permet de voir certains systèmes de fichiers supportés par Linux, L'édition des blocs hexadécimaux et des i-noeuds est maintenant supportée et vous pouvez l'utiliser pour récupérer un fichier effacé sur une autre partition avec un petit peu de travail. Supporte Ext2FS, minix, et xiafs. Inclus LaTeX Introduction to the Minix fs. Vous devez patcher les sources pour compiler sur les noyaux 2.2.x et 2.3.x car il manque les fichiers d'entête pour Xia dans le noyau.

Les utilitaires de restauration pour Ext2FS

Ceci est un patch pour le noyau 2.0.30 qui ajoute des capacités de restauration en utilisant l'attribut undeletable fournis par l'Ext2FS. Ce patch inclut les pages de manuel, le daemon de restauration et les utilitaires. Vérifiez notre page web pour les dernières et meilleurs versions.

Notes

[1]

NdRT : i.e. de taille supérieure à 8 Go