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 (NdRel : la hiérarchie) 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 du système.
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
répresenté par un inode, indiquant le fichier dont il s'agit, la date de sa
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 repértoires contiennent. Si le système veut lire
/home/greg/bigboobs.jpeg
, il commence par lire l'inode du
répertoire racine /
dans le ``superblock'', 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 bigboobs.jpeg
qui lui dira quel bloc du disque il faut
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 (read-only). La commande mount est ensuite utilisée pour le remonter en lecture-écriture (read-write) après que fsck ait vérifié que tout soit en ordre.
Linux prend aussi en charge d'autres types de systèmes de fichiers : msdos, vfat, minix, etc. Les détails d'un système de fichiers spécifique sont masqués par le Système de Fichier Virtuel (Virtual File System ou VFS) qui est une couche d'abstraction. Je ne rentrerai pas dans ces détails. Il existe une discussion sur ce sujet dans ``Le Kernel Linux'' (voir la section Le Noyau Linux pour l'URL)
Il existe des paramètres à la commande mke2fs
, chargée de la création
d'un système de fichiers de type ext2. Ils contrôlent la taille des blocs, le
nombre d'inodes, etc. Voir la man page 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.
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 email avec vos appréciations !
Explorez le code du système de fichiers ext2 dans le noyau.
mount
fait partie du package util-linux, il y a un
lien vers celui-ci dans
téléchargements.mount
, fstab
, fsck
et mke2fs
/bin
, /sbin
, etc. C'est une bonne référence si
votre objectif est un système minimal mais complet.