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

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

Related Posts

Tambahkan Komentar Sembunyikan