Le système Linux d'origine utilisait un système de fichiers simple qui imitait les fonctionnalités du système de fichiers Unix. Dans ce didacticiel, nous aborderons le système de fichiers de base utilisé sous Linux.
Le système de fichiers ext
Le système de fichiers d'origine introduit avec le système d'exploitation Linux est appelé le système de fichiers étendu (ou simplement ext en abrégé). Il fournit un système de fichiers de base de type Unix pour Linux, utilisant des répertoires virtuels pour gérer les périphériques physiques et stockant les données dans des blocs de longueur fixe sur les périphériques physiques.
Le système de fichiers ext utilise un système appelé inodes pour suivre les informations sur les fichiers stockés dans le répertoire virtuel. Le système inode crée une table distincte sur chaque périphérique physique, appelée table inode, pour stocker les informations sur les fichiers. Chaque fichier stocké dans le répertoire virtuel a une entrée dans la table des inodes. La partie étendue du nom provient des données supplémentaires qu'il suit sur chaque fichier, qui se compose de :
- Le nom du fichier
- La taille du fichier
- Le propriétaire du fichier
- Le groupe auquel appartient le fichier
- Autorisations d'accès au fichier
- Pointeurs vers chaque bloc de disque contenant des données du fichier
Linux référence chaque inode dans la table des inodes à l'aide d'un numéro unique (appelé numéro d'inode), attribué par le système de fichiers lors de la création des fichiers de données. Le système de fichiers utilise le numéro d'inode pour identifier le fichier plutôt que d'avoir à utiliser le nom de fichier complet et le chemin.
Le système de fichiers ext2
Le système de fichiers ext d'origine avait quelques limitations, telles que la limitation des fichiers à seulement 2 Go. Peu de temps après l'introduction de Linux, le système de fichiers ext a été mis à niveau pour créer le deuxième système de fichiers étendu, appelé ext2. Comme vous pouvez le deviner, le système de fichiers ext2 est une extension des capacités de base du système de fichiers ext mais conserve la même structure. Le système de fichiers ext2 étend le format de table d'inodes pour suivre des informations supplémentaires sur chaque fichier du système.
La table inode ext2 ajoute les valeurs de temps créées, modifiées et du dernier accès pour les fichiers afin d'aider les administrateurs système à suivre l'accès aux fichiers sur le système. Le système de fichiers ext2 augmente également la taille de fichier maximale autorisée à 2 To (puis dans les versions ultérieures d'ext2, qui a été augmentée à 32 To) pour aider à accueillir les fichiers volumineux couramment trouvés dans les serveurs de base de données.
En plus d'étendre la table des inodes, le système de fichiers ext2 a également modifié la manière dont les fichiers sont stockés dans les blocs de données. Un problème courant avec le système de fichiers ext était que lorsqu'un fichier est écrit sur le périphérique physique, les blocs utilisés pour stocker les données ont tendance à être dispersés dans tout le périphérique (appelé fragmentation ). La fragmentation des blocs de données peut réduire les performances du système de fichiers, car la recherche du périphérique de stockage prend plus de temps pour accéder à tous les blocs d'un fichier spécifique.
Le système de fichiers ext2 aide à réduire la fragmentation en allouant des blocs de disque en groupes lorsque vous enregistrez un fichier. En regroupant les blocs de données d'un fichier, le système de fichiers n'a pas à rechercher dans tout le périphérique physique les blocs de données pour lire le fichier. Le système de fichiers ext2 était le système de fichiers par défaut utilisé dans les distributions Linux pendant de nombreuses années, mais il avait aussi ses limites. La table d'inodes, bien qu'il s'agisse d'une fonctionnalité intéressante qui permet au système de fichiers de suivre des informations supplémentaires sur les fichiers, peut causer des problèmes qui peuvent être fatals au système. Chaque fois que le système de fichiers stocke ou met à jour un fichier, il doit modifier la table des inodes avec les nouvelles informations. Le problème est que ce n'est pas toujours une action fluide.
Si quelque chose devait arriver au système informatique entre le fichier en cours de stockage et la table d'inodes en cours de mise à jour, les deux seraient désynchronisés. Le système de fichiers ext2 est connu pour être facilement corrompu en raison de pannes du système et de pannes de courant. Même si les données du fichier sont stockées correctement sur le périphérique physique, si l'entrée de la table d'inodes n'était pas terminée, le système de fichiers ext2 ne saurait même pas que le fichier existe ! Il ne fallut pas longtemps avant que les développeurs explorent une autre voie des systèmes de fichiers Linux.
Systèmes de fichiers de journalisation
Les systèmes de fichiers journalisés offrent un nouveau niveau de sécurité au système Linux. Au lieu d'écrire des données directement sur le périphérique de stockage, puis de mettre à jour la table d'inodes, les systèmes de fichiers journalisés écrivent d'abord les modifications de fichier dans un fichier temporaire (appelé le journal). Une fois les données écrites avec succès sur le périphérique de stockage et la table d'inodes, l'entrée de journal est supprimée.
Si le système tombe en panne ou subit une panne de courant avant que les données puissent être écrites sur le périphérique de stockage, le système de fichiers de journalisation lit simplement le fichier journal et traite toutes les données non validées restantes. Il existe trois méthodes différentes de journalisation couramment utilisées sous Linux, chacune avec différents niveaux de protection. Ceux-ci sont indiqués ci-dessous dans le tableau.
Méthodes du système de fichiers de journalisation :
Méthode | Description |
---|---|
Mode données | Les données d'inode et de fichier sont journalisées. Faible risque de perte de données, mais performances médiocres. |
Mode ordonné | Seules les données inode sont écrites dans le journal, mais pas supprimées tant que les données du fichier ne sont pas écrites avec succès. Bon compromis entre performance et sécurité. |
Mode de réécriture | Seules les données inode sont écrites dans le journal, aucun contrôle sur le moment où les données du fichier sont écrites. Risque plus élevé de perdre des données, mais toujours mieux que de ne pas utiliser la journalisation. |
Limites
La méthode de journalisation en mode données est de loin la plus sûre pour protéger les données, mais c'est aussi la plus lente. Toutes les données écrites sur un périphérique de stockage doivent être écrites deux fois, une fois dans le journal, puis une autre fois sur le périphérique de stockage réel. Cela peut entraîner de mauvaises performances, en particulier pour les systèmes qui écrivent beaucoup de données. Au fil des ans, quelques systèmes de fichiers de journalisation différents sont apparus sous Linux. Les sections suivantes décrivent les systèmes de fichiers de journalisation Linux populaires disponibles.
Les systèmes de fichiers de journalisation Linux étendus
Le même groupe qui a développé les systèmes de fichiers ext et ext2 dans le cadre du projet Linux a également créé des versions de journalisation des systèmes de fichiers. Ces systèmes de fichiers de journalisation sont compatibles avec le système de fichiers ext2 et il est facile de les convertir entre eux. Il existe actuellement deux systèmes de fichiers de journalisation distincts basés sur le système de fichiers ext2.
Le système de fichiers ext3
Le système de fichiers ext3 a été ajouté au noyau Linux en 2001 et, jusqu'à récemment, il était le système de fichiers par défaut utilisé par à peu près toutes les distributions Linux. Il utilise la même structure de table d'inodes que le système de fichiers ext2, mais ajoute un fichier journal à chaque périphérique de stockage pour journaliser les données écrites sur le périphérique de stockage.
Par défaut, le système de fichiers ext3 utilise la méthode de journalisation en mode ordonné, écrivant uniquement les informations d'inode dans le fichier journal, mais ne les supprimant pas tant que les blocs de données n'ont pas été écrits avec succès sur le périphérique de stockage. Vous pouvez modifier la méthode de journalisation utilisée dans le système de fichiers ext3 en mode données ou écriture différée avec une simple option de ligne de commande lors de la création du système de fichiers.
Bien que le système de fichiers ext3 ait ajouté une journalisation de base au système de fichiers Linux, il lui manquait encore quelques éléments. Par exemple, le système de fichiers ext3 ne fournit aucune récupération après une suppression accidentelle de fichiers, il n'y a pas de compression de données intégrée disponible (bien qu'il existe un correctif qui peut être installé séparément qui fournit cette fonctionnalité), et le système de fichiers ext3 ne ne prend pas en charge le cryptage des fichiers. Pour ces raisons, les développeurs du projet Linux ont choisi de continuer à travailler sur l'amélioration du système de fichiers ext3.
Le système de fichiers ext4
Le résultat de l'extension du système de fichiers ext3 était (comme vous l'avez probablement deviné) le système de fichiers ext4. Le système de fichiers ext4 a été officiellement pris en charge dans le noyau Linux en 2008 et est maintenant le système de fichiers par défaut utilisé dans les distributions Linux les plus populaires, telles que Fedora et Ubuntu.
De plus, pour prendre en charge la compression et le chiffrement, le système de fichiers ext4 prend également en charge une fonctionnalité appelée étendues. Les extensions allouent de l'espace sur un périphérique de stockage en blocs et ne stockent que l'emplacement du bloc de départ dans la table d'inodes. Cela permet d'économiser de l'espace dans la table d'inodes en n'ayant pas à répertorier tous les blocs de données utilisés pour stocker les données du fichier.
Le système de fichiers ext4 intègre également la pré-allocation de blocs. Si vous souhaitez réserver de l'espace sur un périphérique de stockage pour un fichier dont vous savez que la taille augmentera, avec le système de fichiers ext4, il est possible d'allouer tous les blocs attendus pour le fichier, pas seulement les blocs qui existent physiquement. Le système de fichiers ext4 remplit les blocs de données réservés avec des zéros et sait qu'il ne les alloue à aucun autre fichier.
Le système de fichiers reiser
En 2001, Hans Reiser a créé le premier système de fichiers de journalisation pour Linux, appelé ReiserFS. Le système de fichiers ReiserFS ne prend en charge que le mode de journalisation en écriture différée, écrivant uniquement les données de la table d'inodes dans le fichier journal. Parce qu'il écrit uniquement les données de la table d'inodes dans le journal, le système de fichiers ReiserFS est l'un des systèmes de fichiers de journalisation les plus rapides de Linux.
Deux fonctionnalités intéressantes intégrées au système de fichiers ReiserFS sont que vous pouvez redimensionner un système de fichiers existant alors qu'il est encore actif, et qu'il utilise une technique appelée tailpacking, qui place les données d'un fichier dans un espace vide dans un bloc de données d'un autre fichier. La fonction de redimensionnement du système de fichiers actif est idéale si vous devez étendre un système de fichiers déjà créé pour accueillir plus de données.
Le système de fichiers journalisé (JFS)
Peut-être l'un des plus anciens systèmes de fichiers journalisés, le Journaled File System (JFS) a été développé par IBM en 1990 pour sa version AIX d'Unix. Cependant, ce n'est qu'à sa deuxième version qu'il a été porté sur l'environnement Linux.
Remarque - Le nom IBM officiel de la deuxième version du système de fichiers JFS est JFS2, mais la plupart des systèmes Linux l'appellent simplement JFS.Le système de fichiers JFS utilise la méthode de journalisation ordonnée, stockant uniquement les données de la table d'inodes dans le journal, mais ne les supprimant pas tant que les données de fichier réelles ne sont pas écrites sur le périphérique de stockage. Cette méthode est un compromis entre la vitesse du ReiserFS et l'intégrité de la méthode de journalisation en mode données.
Le système de fichiers JFS utilise l'allocation de fichiers basée sur l'étendue, allouant un groupe de blocs pour chaque fichier écrit sur le périphérique de stockage. Cette méthode réduit la fragmentation sur le périphérique de stockage. En dehors des offres IBM Linux, le système de fichiers JFS n'est pas couramment utilisé, mais vous pouvez le rencontrer au cours de votre parcours Linux.
Le système de fichiers xfs
Le système de fichiers de journalisation XFS est encore un autre système de fichiers créé à l'origine pour un système Unix commercial qui a fait son chemin dans le monde Linux. Silicon Graphics Incorporated (SGI) a initialement créé XFS en 1994 pour son système commercial IRIX Unix. Il a été publié dans l'environnement Linux pour une utilisation courante en 2002.
Le système de fichiers XFS utilise le mode de journalisation en écriture différée, qui offre des performances élevées mais introduit un certain risque car les données réelles ne sont pas stockées dans le fichier journal. Le système de fichiers XFS permet également le redimensionnement en ligne du système de fichiers, similaire au système de fichiers ReiserFS, sauf que les systèmes de fichiers XFS peuvent uniquement être étendus et non réduits.