De l'article Anatomie du système de fichiers Linux par M. Tim Jones, j'ai lu que Linux voit tous les systèmes de fichiers du point de vue d'un ensemble commun d'objets et ces objets sont superblock, inode, dentisterie et fichier. Même si le reste du paragraphe explique ce qui précède, je n'étais pas très à l'aise avec cette explication.
Quelqu'un pourrait-il m'expliquer ces termes?
Tout d'abord, et je me rends compte que ce n'était pas l'un des termes de votre question, vous devez comprendre les métadonnées . En résumé, et volées sur Wikipedia, les métadonnées sont des données sur les données. Cela signifie que les métadonnées contiennent des informations sur un élément de données. Par exemple, si je possède une voiture, j'ai un ensemble d'informations sur la voiture mais qui ne fait pas partie de la voiture elle-même. Des informations telles que le numéro d'enregistrement, la marque, le modèle, l'année de fabrication, les informations d'assurance, etc. Toutes ces informations sont collectivement appelées les métadonnées. Dans les systèmes de fichiers Linux et UNIX, les métadonnées existent à plusieurs niveaux d'organisation, comme vous le verrez.
Le superbloc est essentiellement des métadonnées de système de fichiers et définit le type, la taille, l'état et les informations du système de fichiers sur d'autres structures de métadonnées (métadonnées de métadonnées). Le superbloc est très critique pour le système de fichiers et est donc stocké dans plusieurs copies redondantes pour chaque système de fichiers. Le superbloc est une structure de métadonnées de très haut niveau pour le système de fichiers. Par exemple, si le superbloc d'une partition,/var, est corrompu, le système de fichiers en question (/ var) ne peut pas être monté par le système d'exploitation. Généralement dans cet événement, vous devez exécuter fsck
qui sélectionnera automatiquement une copie de sauvegarde alternative du superbloc et tentera de récupérer le système de fichiers. Les copies de sauvegarde elles-mêmes sont stockées dans des groupes de blocs répartis dans le système de fichiers, les premiers étant stockés à un décalage de 1 bloc depuis le début de la partition. Ceci est important dans le cas où une récupération manuelle est nécessaire. Vous pouvez afficher des informations sur les sauvegardes de superblocs ext2/ext3/ext4 avec la commande dumpe2fs /dev/foo | grep -i superblock
ce qui est utile en cas de tentative de récupération manuelle. Supposons que la commande dumpe2fs génère la ligne Backup superblock at 163840, Group descriptors at 163841-163841
. Nous pouvons utiliser ces informations et des connaissances supplémentaires sur la structure du système de fichiers pour tenter d'utiliser cette sauvegarde de superbloc: /sbin/fsck.ext3 -b 163840 -B 1024 /dev/foo
. Veuillez noter que j'ai supposé une taille de bloc de 1024 octets pour cet exemple.
Un inode existe dans ou sur un système de fichiers et représente les métadonnées d'un fichier. Pour plus de clarté, tous les objets d'un système Linux ou UNIX sont des fichiers; fichiers, répertoires, périphériques réels, etc. Veuillez noter que, parmi les métadonnées contenues dans un inode, il n'y a pas de nom de fichier tel que les humains le pensent, cela sera important plus tard. Un inode contient essentiellement des informations sur la propriété (utilisateur, groupe), le mode d'accès (lecture, écriture, exécution des autorisations) et le type de fichier.
Un dentry est la colle qui maintient les inodes et les fichiers ensemble en reliant les numéros d'inode aux noms de fichiers. Les dentries jouent également un rôle dans la mise en cache des répertoires qui, idéalement, conserve les fichiers les plus fréquemment utilisés à portée de main pour un accès plus rapide. La traversée du système de fichiers est un autre aspect de la dentisterie car elle maintient une relation entre les répertoires et leurs fichiers.
Un fichier, en plus d'être ce à quoi les humains pensent généralement lorsqu'ils sont présentés avec la Parole, n'est vraiment qu'un bloc de données arbitraires logiquement liées. Comparativement très ennuyeux compte tenu de tout le travail effectué (ci-dessus) pour en garder une trace.
Je me rends pleinement compte que quelques phrases ne fournissent aucune explication complète de ces concepts, alors n'hésitez pas à demander des détails supplémentaires quand et où cela est nécessaire.
Fichier
Un fichier signifie simplement un tas d'octets organisés dans un certain ordre. C'est ce que les gens normaux appellent le contenu d'un fichier. Lorsque Linux ouvre un fichier, il crée également un objet fichier, qui contient des données sur l'emplacement de stockage du fichier et les processus qui l'utilisent. L'objet fichier (mais pas les données du fichier lui-même) est jeté lorsque le fichier est fermé.
Inode
Un inode (abréviation de "index node") est un ensemble d'attributs sur un fichier que Linux stocke. Il y a un inode pour chaque fichier (bien qu'avec certains systèmes de fichiers, Linux doit créer ses propres inodes car les informations sont réparties autour du système de fichiers). L'inode stocke des informations telles que le propriétaire du fichier, sa taille et qui est autorisé à l'ouvrir. Chaque inode contient également un numéro unique à la partition du système de fichiers; c'est comme un numéro de série pour le fichier décrit par cet inode.
Dentisterie
Une dentry (abréviation de "directory directory") est ce que le noyau Linux utilise pour garder une trace de la hiérarchie des fichiers dans les répertoires. Chaque dentry associe un numéro d'inode à un nom de fichier et à un répertoire parent.
Superbloc
Le superbloc est une structure de données unique dans un système de fichiers (bien qu'il existe plusieurs copies pour se prémunir contre la corruption). Le superbloc contient des métadonnées sur le système de fichiers, comme l'inode qui est le répertoire de niveau supérieur et le type de système de fichiers utilisé.
superbloc , le nœud d'index (ou inode ), l'entrée de répertoire ( ou dentry ), et enfin, l'objet du fichier fait partie de système de fichiers virtuel (VFS) ou commutateur de système de fichiers virtuel . Le but d'un VFS est de permettre aux applications clientes d'accéder à différents types de systèmes de fichiers concrets de manière uniforme.
Relations des principaux objets dans le VFS
Un Inode est une structure de données sur un système de fichiers Unix/Linux. Un inode stocke des métadonnées sur un fichier, un répertoire ou un autre objet de système de fichiers standard. Inode agit comme une interface entre les fichiers et les données. Un inode peut faire référence à un fichier ou à un répertoire ou à un lien symbolique vers un autre objet. Il contient un numéro unique (le numéro i), les attributs du fichier, y compris le nom, la date, la taille et les autorisations de lecture/écriture, et un pointeur vers l'emplacement du fichier. C'est l'équivalent de la table FAT dans le monde DOS/Windows.
Les programmes, services, textes, images, etc., sont tous des fichiers . Les périphériques d'entrée et de sortie, et généralement tous les périphériques, sont considérés comme fichiers , selon le système.
Le superbloc est le conteneur de métadonnées de haut niveau sur un système de fichiers. Le superbloc est une structure qui existe sur le disque (en fait, plusieurs emplacements sur le disque pour la redondance) et également en mémoire. Il fournit la base pour gérer le système de fichiers sur disque, car il définit les paramètres de gestion du système de fichiers (par exemple, nombre total de blocs, blocs libres, nœud d'index racine).
Dentry est l'interface entre les fichiers et les inodes. Les dentries jouent également un rôle dans la mise en cache des répertoires qui, idéalement, conserve les fichiers les plus fréquemment utilisés à portée de main pour un accès plus rapide.
En toute simplicité, dentry et inode sont la même chose, une abstraction de fichier ou de répertoire. Les différences entre dentry et inode sont que dentry est utilisé pour faciliter les opérations spécifiques au répertoire, l'inode n'est qu'une collection de métadonnées sur le fichier ou le répertoire. Superblock est l'abstraction du système de fichiers.
struct file
, dans le noyau Linux, est mal nommé comme beaucoup d'autres (par exemple struct address_space
) et n'est pas l'abstraction d'un vrai "fichier" (par exemple/etc/passwd). Il représente un "fichier" ou répertoire ouvert. struct file
est créé par sys_open
dans le noyau, donc un processus peut avoir beaucoup de struct file
s pour le même fichier.
Pourquoi avons-nous besoin de dentisterie? Il est utilisé pour accélérer la traduction du nom de chemin (par exemple/etc/passwd) en inode. Le noyau Linux utilise l'inode pour manipuler le "fichier" ou le répertoire, pas leur nom.
Notez que ces termes ne sont pas spécifiques à Linux mais spécifiques au système de fichiers. La plupart des systèmes de fichiers utilisés par les systèmes Unix et Unix actuels sont dérivés ou inspirés du système de fichiers Unix d'origine qui définissait les idiomes de superbloc et d'inode. Linux peut également monter plusieurs systèmes de fichiers avec lesquels il n'existe aucune notion de superbloc et/ou d'inode, le plus courant étant FAT. Un autre, ZFS, n'utilise pas de superblocs mais d'überblocks.