Une discussion de haut niveau sur les concepts de systèmes de fichiers Linux

Cet article est destiné à être une discussion de très haut niveau sur les concepts de systèmes de fichiers Linux. Il n’est pas destiné à être une description de bas niveau de la façon dont un type de système de fichiers particulier, tel que EXT4, fonctionne, ni à être un tutoriel de commandes de système de fichiers.

Tout ordinateur à usage général a besoin de stocker des données de différents types sur un disque dur (HDD) ou un équivalent, tel qu’une clé USB. Il y a plusieurs raisons à cela. Premièrement, la RAM perd son contenu lorsque l’ordinateur est éteint. Il existe des types de RAM non volatiles qui peuvent conserver les données qui y sont stockées après la coupure de l’alimentation (comme la RAM flash qui est utilisée dans les clés USB et les lecteurs à état solide), mais la RAM flash est beaucoup plus chère que la RAM standard et volatile comme la DDR3 et d’autres types similaires.

La deuxième raison pour laquelle les données doivent être stockées sur des disques durs est que même la RAM standard reste plus chère que l’espace disque. Les coûts de la RAM et des disques ont tous deux baissé rapidement, mais la RAM reste en tête en termes de coût par octet. Un calcul rapide du coût par octet, basé sur le coût de 16 Go de RAM par rapport à un disque dur de 2 To, montre que la RAM est environ 71 fois plus chère par unité que le disque dur. Un coût typique pour la RAM est d’environ 0,0000000043743750 $ par octet aujourd’hui.

Pour une note historique rapide pour mettre les coûts actuels de la RAM en perspective, au tout début de l’informatique, un type de mémoire était basé sur des points sur un écran CRT. C’était très cher, à environ 1,00 $ par bit !

Définitions

Vous pouvez entendre les gens parler de systèmes de fichiers de plusieurs façons différentes et déroutantes. Le mot lui-même peut avoir plusieurs significations, et vous pouvez avoir à discerner la signification correcte à partir du contexte d’une discussion ou d’un document.

Je vais tenter de définir les différentes significations du mot « système de fichiers » en me basant sur la façon dont j’ai observé son utilisation dans différentes circonstances. Notez que tout en essayant de vous conformer aux significations standard « officielles », mon intention est de définir le terme en fonction de ses divers usages. Ces significations seront explorées plus en détail dans les sections suivantes de cet article.

  1. L’ensemble de la structure de répertoires de Linux en commençant par le répertoire racine supérieur (/).
  2. Un type spécifique de format de stockage de données, tel que EXT3, EXT4, BTRFS, XFS, et ainsi de suite. Linux prend en charge près de 100 types de systèmes de fichiers, dont certains très anciens ainsi que certains des plus récents. Chacun de ces types de systèmes de fichiers utilise ses propres structures de métadonnées pour définir la façon dont les données sont stockées et accessibles.
  3. Partition ou volume logique formaté avec un type spécifique de système de fichiers qui peut être monté sur un point de montage spécifié sur un système de fichiers Linux.

Fonctions de base du système de fichiers

Le stockage sur disque est une nécessité qui apporte avec elle quelques détails intéressants et incontournables. De toute évidence, un système de fichiers est conçu pour fournir de l’espace pour le stockage non volatile des données ; c’est sa fonction ultime. Cependant, il y a beaucoup d’autres fonctions importantes qui découlent de cette exigence.

Tous les systèmes de fichiers doivent fournir un espace de noms, c’est-à-dire une méthodologie de nommage et d’organisation. Celle-ci définit la manière dont un fichier peut être nommé, en particulier la longueur d’un nom de fichier et le sous-ensemble de caractères qui peuvent être utilisés pour les noms de fichiers parmi l’ensemble des caractères disponibles. Elle définit également la structure logique des données sur un disque, comme l’utilisation de répertoires pour organiser les fichiers au lieu de simplement les regrouper en un seul et énorme conglomérat de fichiers.

Une fois l’espace de noms défini, une structure de métadonnées est nécessaire pour fournir la base logique de cet espace de noms. Cela comprend les structures de données nécessaires pour prendre en charge une structure de répertoire hiérarchique ; les structures permettant de déterminer quels blocs d’espace sur le disque sont utilisés et lesquels sont disponibles ; les structures permettant de maintenir les noms des fichiers et des répertoires ; les informations sur les fichiers telles que leur taille et les heures de création, de modification ou de dernier accès ; et le ou les emplacements des données appartenant au fichier sur le disque. D’autres métadonnées sont utilisées pour stocker des informations de haut niveau sur les subdivisions du disque, telles que les volumes logiques et les partitions. Ces métadonnées de plus haut niveau et les structures qu’elles représentent contiennent les informations décrivant le système de fichiers stocké sur le disque ou la partition, mais elles sont distinctes et indépendantes des métadonnées du système de fichiers.

Les systèmes de fichiers nécessitent également une interface de programmation d’applications (API) qui permet d’accéder aux appels de fonctions système qui manipulent les objets du système de fichiers comme les fichiers et les répertoires. Les API fournissent des tâches telles que la création, le déplacement et la suppression de fichiers. Elles fournissent également des algorithmes qui déterminent des éléments tels que l’emplacement d’un fichier sur un système de fichiers. Ces algorithmes peuvent tenir compte d’objectifs tels que la vitesse ou la minimisation de la fragmentation du disque.

Les systèmes de fichiers modernes fournissent également un modèle de sécurité, qui est un schéma pour définir les droits d’accès aux fichiers et aux répertoires. Le modèle de sécurité du système de fichiers Linux permet de s’assurer que les utilisateurs n’ont accès qu’à leurs propres fichiers et non à ceux des autres ou du système d’exploitation lui-même.

Le dernier élément constitutif est le logiciel nécessaire pour mettre en œuvre toutes ces fonctions. Linux utilise une implémentation logicielle en deux parties comme moyen d’améliorer l’efficacité du système et du programmeur.


Figure 1 : L’implémentation logicielle du système de fichiers en deux parties de Linux.

La première partie de cette implémentation en deux parties est le système de fichiers virtuel de Linux. Ce système de fichiers virtuel fournit un ensemble unique de commandes pour le noyau, et les développeurs, pour accéder à tous les types de systèmes de fichiers. Le logiciel du système de fichiers virtuel appelle le pilote de périphérique spécifique nécessaire pour s’interfacer avec les différents types de systèmes de fichiers. Les pilotes de périphériques spécifiques aux systèmes de fichiers constituent la deuxième partie de l’implémentation. Le pilote de périphérique interprète l’ensemble standard de commandes de système de fichiers en commandes spécifiques au type de système de fichiers sur la partition ou le volume logique.

Structure de répertoire

En tant que Vierge habituellement très organisée, j’aime que les choses soient stockées dans des groupes plus petits et organisés plutôt que dans un grand seau. L’utilisation de répertoires m’aide à pouvoir stocker et ensuite localiser les fichiers que je veux quand je les cherche. Les répertoires sont également connus sous le nom de dossiers parce qu’ils peuvent être considérés comme des dossiers dans lesquels les fichiers sont conservés dans une sorte d’analogie de bureau physique.

Dans Linux et de nombreux autres systèmes d’exploitation, les répertoires peuvent être structurés dans une hiérarchie arborescente. La structure des répertoires de Linux est bien définie et documentée dans le standard de hiérarchie du système de fichiers Linux (FHS). La référence à ces répertoires lors de l’accès à ceux-ci est accomplie en utilisant les noms de répertoires séquentiellement plus profonds reliés par des barres obliques (/), tels que /var/log et /var/spool/mail. C’est ce qu’on appelle des chemins d’accès.

Le tableau suivant fournit une très brève liste des répertoires Linux de premier niveau standard, bien connus et définis, ainsi que leurs objectifs.

Directory Description
/ (système de fichiers racine) Le système de fichiers racine est le répertoire de premier niveau du système de fichiers. Il doit contenir tous les fichiers nécessaires au démarrage du système Linux avant que les autres systèmes de fichiers ne soient montés. Il doit inclure tous les exécutables et bibliothèques nécessaires au démarrage des autres systèmes de fichiers. Après le démarrage du système, tous les autres systèmes de fichiers sont montés sur des points de montage standard, bien définis, en tant que sous-répertoires du système de fichiers racine.
/bin Le répertoire /bin contient les fichiers exécutables de l’utilisateur.
/boot Contenant le chargeur de démarrage statique et les fichiers exécutables et de configuration du noyau nécessaires pour démarrer un ordinateur Linux.
/dev Ce répertoire contient les fichiers de périphériques pour chaque périphérique matériel attaché au système. Il ne s’agit pas de pilotes de périphériques, mais plutôt de fichiers qui représentent chaque périphérique de l’ordinateur et facilitent l’accès à ces périphériques.
/etc Ce répertoire contient les fichiers de configuration du système local pour l’ordinateur hôte.
/home Répertoire d’accueil de stockage des fichiers utilisateur. Chaque utilisateur dispose d’un sous-répertoire dans /home.
/lib Contenant des fichiers de bibliothèque partagée qui sont nécessaires pour démarrer le système.
/media Endroit pour monter des périphériques de médias amovibles externes tels que des clés USB qui peuvent être connectées à l’hôte.
/mnt Un point de montage temporaire pour les systèmes de fichiers réguliers (comme dans pas les médias amovibles) qui peut être utilisé pendant que l’administrateur répare ou travaille sur un système de fichiers.
/opt Les fichiers optionnels tels que les programmes d’application fournis par le fournisseur doivent être situés ici.
/root Ce n’est pas le système de fichiers racine (/). C’est le répertoire personnel de l’utilisateur root.
/sbin Fichiers binaires du système. Ce sont des exécutables utilisés pour l’administration du système.
/tmp Répertoire temporaire. Utilisé par le système d’exploitation et de nombreux programmes pour stocker des fichiers temporaires. Les utilisateurs peuvent également y stocker des fichiers temporairement. Notez que les fichiers stockés ici peuvent être supprimés à tout moment sans préavis.
/usr Il s’agit de fichiers partageables, en lecture seule, y compris les binaires et les bibliothèques exécutables, les fichiers man et d’autres types de documentation.
/var Les fichiers de données variables sont stockés ici. Cela peut inclure des choses comme des fichiers journaux, MySQL, et d’autres fichiers de base de données, des fichiers de données de serveur web, des boîtes de réception de courrier électronique, et bien plus encore.

Tableau 1 : Le niveau supérieur de la hiérarchie du système de fichiers Linux.

Les répertoires et leurs sous-répertoires indiqués dans le tableau 1, ainsi que leurs sous-répertoires, qui ont un fond sarcelle sont considérés comme une partie intégrante du système de fichiers racine. En d’autres termes, ils ne peuvent pas être créés en tant que système de fichiers distinct et montés au démarrage. C’est parce qu’ils (spécifiquement, leur contenu) doivent être présents au moment du démarrage pour que le système puisse démarrer correctement.

Les répertoires /media et /mnt font partie du système de fichiers racine, mais ils ne doivent jamais contenir de données. Ce sont plutôt de simples points de montage temporaires.

Les répertoires restants, ceux qui n’ont pas de couleur de fond dans le tableau 1 n’ont pas besoin d’être présents pendant la séquence de démarrage, mais seront montés plus tard, pendant la séquence de démarrage qui prépare l’hôte à effectuer un travail utile.

Ne manquez pas de vous référer à la page web officielle de Linux Filesystem Hierarchy Standard (FHS) pour obtenir des détails sur chacun de ces répertoires et leurs nombreux sous-répertoires. Wikipedia a également une bonne description du FHS. Cette norme doit être suivie le plus fidèlement possible pour assurer la cohérence opérationnelle et fonctionnelle. Indépendamment des types de systèmes de fichiers utilisés sur un hôte, cette structure de répertoire hiérarchique est la même.

Structure de répertoire unifiée de Linux

Dans certains systèmes d’exploitation PC non Linux, s’il y a plusieurs disques durs physiques ou plusieurs partitions, chaque disque ou partition se voit attribuer une lettre de lecteur. Il est nécessaire de savoir sur quel disque dur se trouve un fichier ou un programme, par exemple C : ou D :. Il suffit ensuite d’entrer la lettre de lecteur sous forme de commande, D :, par exemple, pour passer au lecteur D :, puis d’utiliser la commande cd pour passer au répertoire correct afin de localiser le fichier souhaité. Chaque disque dur possède sa propre arborescence de répertoires distincte et complète.

Le système de fichiers Linux unifie tous les disques durs physiques et les partitions en une seule structure de répertoires. Tout commence au sommet – le répertoire racine (/). Tous les autres répertoires et leurs sous-répertoires sont situés sous le répertoire racine unique de Linux. Cela signifie qu’il n’y a qu’une seule et unique arborescence de répertoires dans laquelle rechercher des fichiers et des programmes.

Cela ne peut fonctionner que parce qu’un système de fichiers, tel que /home, /tmp, /var, /opt, ou /usr peut être créé sur des disques durs physiques distincts, une partition différente, ou un volume logique différent du système de fichiers / (racine), puis être monté sur un point de montage (répertoire) en tant que partie de l’arborescence du système de fichiers racine. Même les lecteurs amovibles tels qu’une clé USB ou un disque dur externe USB ou ESATA seront montés sur le système de fichiers racine et deviendront une partie intégrante de cette arborescence de répertoires.

Une bonne raison de faire cela est apparente lors d’une mise à niveau d’une version d’une distribution Linux à une autre, ou en passant d’une distribution à une autre. En général, et en dehors de tout utilitaire de mise à niveau comme dnf-upgrade dans Fedora, il est sage de reformater occasionnellement le(s) disque(s) dur(s) contenant le système d’exploitation lors d’une mise à niveau afin d’éliminer positivement tout cruft qui s’est accumulé au fil du temps. Si /home fait partie du système de fichiers racine, il sera également reformaté et devra alors être restauré à partir d’une sauvegarde. En ayant /home comme un système de fichiers séparé, il sera connu du programme d’installation comme un système de fichiers séparé et son formatage pourra être évité. Cela peut également s’appliquer à /var où sont stockées la base de données, les boîtes aux lettres électroniques, le site web et d’autres données variables de l’utilisateur et du système.

Il existe d’autres raisons pour maintenir certaines parties de l’arborescence des répertoires de Linux comme des systèmes de fichiers séparés. Par exemple, il y a longtemps, lorsque je n’étais pas encore conscient des problèmes potentiels entourant le fait d’avoir tous les répertoires Linux requis dans le cadre du système de fichiers / (racine), j’ai réussi à remplir mon répertoire personnel avec un grand nombre de très gros fichiers. Comme ni le répertoire /home ni le répertoire /tmp n’étaient des systèmes de fichiers distincts mais simplement des sous-répertoires du système de fichiers racine, tout le système de fichiers racine s’est rempli. Il n’y avait plus de place pour que le système d’exploitation puisse créer des fichiers temporaires ou développer les fichiers de données existants. Au début, les programmes d’application ont commencé à se plaindre qu’il n’y avait pas de place pour enregistrer les fichiers, puis le système d’exploitation lui-même a commencé à se comporter de façon très étrange. Le démarrage en mode mono-utilisateur et l’effacement des fichiers incriminés dans mon répertoire personnel m’ont permis de redémarrer. J’ai ensuite réinstallé Linux en utilisant une configuration multi-système de fichiers assez standard et j’ai pu empêcher des crashs complets du système de se produire à nouveau.

J’ai eu une fois une situation où un hôte Linux continuait à fonctionner, mais empêchait l’utilisateur de se connecter en utilisant le bureau GUI. J’ai pu me connecter à l’aide de l’interface de ligne de commande (CLI) localement en utilisant l’une des consoles virtuelles, et à distance en utilisant SSH. Le problème était que le système de fichiers /tmp était plein et que certains fichiers temporaires requis par le bureau GUI ne pouvaient pas être créés au moment de la connexion. Étant donné que la connexion CLI n’exigeait pas la création de fichiers dans /tmp, le manque d’espace à cet endroit ne m’a pas empêché de me connecter à l’aide de la CLI. Dans ce cas, le répertoire /tmp était un système de fichiers distinct et il y avait beaucoup d’espace disponible dans le groupe de volumes dont le volume logique /tmp faisait partie. J’ai simplement étendu le volume logique /tmp à une taille qui correspondait à ma nouvelle compréhension de l’espace nécessaire pour les fichiers temporaires sur cet hôte et le problème était résolu. Notez que cette solution n’a pas nécessité de redémarrage, et dès que le système de fichiers /tmp a été agrandi, l’utilisateur a pu se connecter au bureau.

Une autre situation s’est produite alors que je travaillais comme administrateur de laboratoire dans une grande entreprise technologique. L’un de nos développeurs avait installé une application dans le mauvais emplacement (/var). L’application plantait parce que le système de fichiers /var était plein et que les fichiers journaux, qui sont stockés dans /var/log sur ce système de fichiers, ne pouvaient pas être enrichis de nouveaux messages en raison du manque d’espace. Cependant, le système est resté opérationnel car les systèmes de fichiers critiques / (root) et /tmp n’étaient pas remplis. La suppression de l’application incriminée et sa réinstallation dans le système de fichiers /opt ont résolu ce problème.

Types de systèmes de fichiers

Linux prend en charge la lecture d’une centaine de types de partitions ; il ne peut créer et écrire que sur quelques-uns d’entre eux. Mais il est possible – et très courant – de monter des systèmes de fichiers de différents types sur le même système de fichiers racine. Dans ce contexte, nous parlons de systèmes de fichiers en termes de structures et de métadonnées nécessaires pour stocker et gérer les données utilisateur sur une partition d’un disque dur ou un volume logique. La liste complète des types de partition de système de fichiers reconnus par la commande fdisk de Linux est fournie ici, afin que vous puissiez avoir une idée du haut degré de compatibilité de Linux avec de très nombreux types de systèmes.

 0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris 1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT- 2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT- 3 XENIX usr 3c PartitionMagic 84 OS/2 hidden or c6 DRDOS/sec (FAT- 4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx 5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data 6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / . 7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility 8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt 9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi ea Rufus alignment e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD eb BeOS fs f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ee GPT10 OPUS 55 EZ-Drive a7 NeXTSTEP ef EFI (FAT-12/16/11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f0 Linux/PA-RISC b12 Compaq diagnost 5c Priam Edisk a9 NetBSD f1 SpeedStor14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f4 SpeedStor16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ f2 DOS secondary17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fb VMware VMFS18 AST SmartSleep 65 Novell Netware b8 BSDI swap fc VMware VMKCORE1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fd Linux raid auto1c Hidden W95 FAT3 75 PC/IX bc Acronis FAT32 L fe LANstep1e Hidden W95 FAT1 80 Old Minix be Solaris boot ff BBT

Le principal objectif de la prise en charge de la capacité à lire autant de types de partition est de permettre la compatibilité et au moins une certaine interopérabilité avec les systèmes de fichiers d’autres systèmes informatiques. Les choix disponibles lors de la création d’un nouveau système de fichiers avec Fedora sont présentés dans la liste suivante.

  • btrfs
  • cramfs
  • ext2
  • ext3
  • ext4
  • fat
  • gfs2
  • hfsplus
  • minix
  • .

  • msdos
  • ntfs
  • reiserfs
  • vfat
  • xfs

D’autres distributions prennent en charge la création de différents types de systèmes de fichiers. Par exemple, CentOS 6 ne prend en charge que la création des systèmes de fichiers mis en évidence en gras dans la liste ci-dessus.

Montage

Le terme « monter » un système de fichiers dans Linux fait référence aux premiers jours de l’informatique, lorsqu’un paquet de bandes ou de disques amovibles devait être physiquement monté sur un périphérique de lecteur approprié. Après avoir été placé physiquement sur le lecteur, le système de fichiers sur le pack de disques serait monté logiquement par le système d’exploitation pour rendre le contenu disponible pour l’accès par le SE, les programmes d’application et les utilisateurs.

Un point de montage est simplement un répertoire, comme n’importe quel autre, qui est créé comme partie du système de fichiers racine. Ainsi, par exemple, le système de fichiers home est monté sur le répertoire /home. Les systèmes de fichiers peuvent être montés à des points de montage sur d’autres systèmes de fichiers non racine, mais cela est moins courant.

Le système de fichiers racine de Linux est monté sur le répertoire racine (/) très tôt dans la séquence de démarrage. Les autres systèmes de fichiers sont montés plus tard, par les programmes de démarrage de Linux, soit rc sous SystemV ou par systemd dans les versions plus récentes de Linux. Le montage des systèmes de fichiers pendant le processus de démarrage est géré par le fichier de configuration /etc/fstab. Un moyen facile de s’en souvenir est que fstab signifie « table de système de fichiers », et c’est une liste de systèmes de fichiers qui doivent être montés, leurs points de montage désignés, et toutes les options qui pourraient être nécessaires pour des systèmes de fichiers spécifiques.

Les systèmes de fichiers sont montés sur un répertoire/point de montage existant en utilisant la commande mount. En général, tout répertoire utilisé comme point de montage doit être vide et ne pas contenir d’autres fichiers. Linux n’empêchera pas les utilisateurs de monter un système de fichiers sur un autre qui est déjà là ou sur un répertoire qui contient des fichiers. Si vous montez un système de fichiers sur un répertoire ou un système de fichiers existant, le contenu original sera caché et seul le contenu du système de fichiers nouvellement monté sera visible.

Conclusion

J’espère qu’une partie de la confusion possible autour du terme système de fichiers a été éclaircie par cet article. Il m’a fallu beaucoup de temps et un mentor très utile pour vraiment comprendre et apprécier la complexité, l’élégance et la fonctionnalité du système de fichiers Linux dans toutes ses significations.

Si vous avez des questions, veuillez les ajouter aux commentaires ci-dessous et j’essaierai d’y répondre.

Le mois prochain

Un autre concept important est que pour Linux, tout est un fichier. Ce concept a quelques applications pratiques intéressantes et importantes pour les utilisateurs et les administrateurs système. La raison pour laquelle je mentionne ceci est que vous pourriez vouloir lire mon article « Tout est un fichier » avant l’article que je prévois pour le mois prochain sur le répertoire /dev.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.