7. Le système de fichiers

Dans cette section, j'emploierai l'expression « système de fichiers » pour deux notions différentes. Il y a les systèmes de fichiers installés sur des partitions de disque ou d'autres périphériques, et il y a le système de fichier tel qu'il vous est présenté par un système Linux en état de marche. Sous Linux, vous « montez » le système de fichiers d'un disque sur le système de fichiers de Linux.

Dans la section précédente, j'ai mentionné le fait que des scripts d'initialisation vérifiaient et montaient les systèmes de fichiers. Les commandes qui effectuent ces opérations sont respectivement fsck et mount.

Un disque dur n'est qu'un grand espace dans lequel vous pouvez écrire des zéros et des uns. Un système de fichiers impose une structure à tout cela, et le présente sous la forme de fichiers, à l'intérieur de sous-répertoires, à l'intérieur de répertoires … Chaque fichier est représenté par un inode, indiquant le fichier dont il s'agit, sa date de création, et où trouver son contenu. Les répertoires sont aussi représentés par des inodes, mais ceux-ci indiquent où trouver les inodes des fichiers que les répertoires contiennent. Si le système veut lire /home/greg/groslolos.jpeg, il commence par lire l'inode du répertoire racine / dans le « superbloc », puis trouve l'inode du répertoire home dans le contenu de /, puis trouve l'inode du répertoire greg dans le contenu de home, et enfin l'inode de groslolos.jpeg qui lui dira quels blocs du disque il doit lire.

Si nous ajoutons des données à la fin d'un fichier, il peut arriver que les données soient écrites avant que l'inode ne soit mis à jour (indiquant que le nouveau bloc appartient désormais au fichier), ou vice-versa. Si le courant est coupé à cet instant précis, le système de fichiers sera cassé. C'est ce genre de chose que fsck essaie de détecter et de réparer.

La commande mount prend le système de fichiers d'un périphérique, et l'ajoute à la hiérarchie de fichiers de votre système. En général le noyau monte son système de fichiers racine en lecture seule. La commande mount est ensuite utilisée pour le remonter en lecture-écriture après que fsck aie vérifié que tout est en ordre.

Linux prend aussi en charge d'autres types de systèmes de fichiers : msdos, vfat, minix, et cætera. Les détails d'un système de fichiers spécifique sont masqués par le système de fichier virtuel (Virtual File System - VFS), qui est une couche d'abstraction. Je ne rentrerai pas dans ces détails. Il existe une discussion sur ce sujet dans « Le noyau Linux » (voir la section aller plus loin - le noyau Linux pour l'url).

Un type de système de fichiers complètement différent est monté sur /proc. C'est une véritable projection de ce qui se passe dans le noyau. On y trouve un répertoire pour chaque processus existant sur le système, dont le nom correspond au numéro dudit processus. Il existe aussi des fichiers comme interrupts et meminfo qui donnent des informations sur l'utilisation du matériel. Vous pouvez découvrir énormément de choses en explorant /proc.

7.1. Configuration

Il est possible d'indiquer à mke2fs, la commande de création des système de fichiers ext2, des paramètres définissant la taille des blocs, le nombre d'inodes, et cætera. Voir la page de manuel de mke2fs pour plus de détails.

Ce qui doit être monté sur votre système de fichiers est contrôlé par le fichier /etc/fstab, qui a lui aussi sa page de manuel.

7.2. Exercices

Fabriquez un tout petit système de fichiers, et visualisez-le avec un éditeur hexadécimal. Identifiez les inodes, les superblocs, et le contenu des fichiers.

Je crois qu'il existe des outils qui vous donnent une vue graphique d'un système de fichiers. Trouvez-en un, essayez-le, et envoyez moi l'url par courrier électronique (en anglais) avec vos commentaires !

Explorez le code du système de fichiers ext2 dans le noyau.

7.3. Aller plus loin