Qu'est-ce qu'un superbloc, un inode, un dentry et un fichier?


125

Dans l'article Anatomy du système de fichiers Linux de M. Tim Jones, j'ai lu que Linux visualisait tous les systèmes de fichiers sous l'angle d'un ensemble d'objets commun et que ces objets étaient superbloc , inode , dentry 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?

Réponses:


136

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 . Succinctement, et volées sur Wikipedia, les métadonnées sont des données sur des données. C'est-à-dire que les métadonnées contiennent des informations sur une donnée. Par exemple, si je possède une voiture, je dispose d’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 sur les assurances, etc. Toutes ces informations sont collectivement appelées métadonnées. Comme vous le verrez, dans les systèmes de fichiers Linux et UNIX, les métadonnées existent à plusieurs niveaux d’organisation.

Le superbloc est essentiellement constitué de métadonnées de système de fichiers et définit le type, la taille, le statut et les informations du système de fichiers, ainsi que des informations 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, devient corrompu, le système de fichiers en question (/ var) ne peut pas être monté par le système d'exploitation. Généralement, dans ce cas, vous devez exécuterfsckqui sélectionnera automatiquement une autre copie de sauvegarde 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 stockés à un bloc décalé à partir du 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 superbloc à l'aide de la commande, dumpe2fs /dev/foo | grep -i superblockce 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 connaissances supplémentaires sur la structure du système de fichiers, pour tenter d'utiliser cette sauvegarde superblock: /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 des métadonnées relatives à un fichier. Par souci de clarté, tous les objets d’un système Linux ou UNIX sont des fichiers; fichiers, répertoires, périphériques, etc. Veuillez noter que, parmi les métadonnées contenues dans un inode, il n'y a pas de nom de fichier comme le pensent les humains, ce sera important plus tard. Un inode contient essentiellement des informations sur la propriété (utilisateur, groupe), le mode d'accès (lecture, écriture, autorisations d'exécution) et le type de fichier.

Un dentry est la colle qui maintient ensemble les inodes et les fichiers en liant les numéros d’inodes aux noms de fichiers. Les dentiers jouent également un rôle dans la mise en cache de 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 du métier car elle maintient une relation entre les répertoires et leurs fichiers.

Un fichier , en plus d'être ce à quoi les humains pensent en général lorsqu'il est présenté avec le mot, n'est en réalité qu'un bloc de données arbitraires liées logiquement. De manière relativement très ennuyeuse compte tenu de tout le travail effectué (ci-dessus) pour en garder une trace.

Je suis tout à fait conscient que quelques phrases ne fournissent pas une explication complète de l’un de ces concepts, alors n'hésitez pas à demander des détails supplémentaires au moment voulu.


@Tok: Est-ce que ça va se passer comme ça (comme indiqué dans la réponse): Superbloc de sauvegarde à 163840, Descripteurs de groupe à 163841-163841 ou est-ce ainsi: Superbloc de sauvegarde à 163840, Descripteurs de groupe à 163841-163842? Était-ce une faute de frappe? :-)
Sen

@TOK: Superbloc de sauvegarde en 163840, Descripteurs de groupe en 163841-163842, Quelles informations les descripteurs de groupe transmettent-ils?
Sen

@Sen - en théorie, les descripteurs de groupe pourraient couvrir plusieurs blocs, mais pour la plupart des systèmes de bureau, vous les verrez ne prendre qu'un seul bloc et être référencés comme suit: $ ((BackupBlock + 1)) - $ ((BackupBlock + 1))
Tok

@TOK: ok dans mon système, je le vois comme $ ((BackupBlock + 1)) - $ ((BackupBlock + 2))
Sen

@Sen - Le descripteur de groupe décrit un groupe de blocs. Qu'est-ce que ça veut dire? Plus de métadonnées. Un descripteur de groupe contient essentiellement un bitmap de blocs (numéro de bloc du bitmap d’allocation de blocs), un bitmap inode (idem mais pour les inodes), une table inode (numéro de bloc du bloc de départ pour la table inode), nombre de blocs libres et d’inodes, et un nombre de répertoires utilisés. Tout cela est basé sur un système de fichiers ext2. Les descripteurs de groupe sont très importants pour le bon fonctionnement du système de fichiers et sont dupliqués à côté du superbloc.
Tok

49

Fichier

Un fichier signifie simplement un groupe d'octets disposé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 du fichier et sur les processus qui l'utilisent. L'objet fichier (mais pas les données de fichier elles-mêmes) est jeté à la fermeture du fichier.

Inode

Un inode (abréviation de "index node") est un ensemble d'attributs concernant un fichier stocké par Linux. Il existe 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 l'identité de celui qui est autorisé à l'ouvrir. Chaque inode contient également un numéro unique pour la partition du système de fichiers; c'est comme un numéro de série pour le fichier décrit par cet inode.

Dentry

Un dentry (abréviation de "entrée de répertoire") est ce que le noyau Linux utilise pour garder une trace de la hiérarchie des fichiers dans les répertoires. Chaque dentry mappe 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 protéger contre la corruption). Le superbloc contient des métadonnées sur le système de fichiers, telles que l'inode est le répertoire de niveau supérieur et le type de système de fichiers utilisé.


11

superblock , le nœud d'index (ou inode ), l'entrée de répertoire (ou dentry ) et enfin, l' objet de fichier font partie du système de fichiers virtuel (VFS) ou du 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 objets majeurs dans le VFS

entrez la description de l'image ici


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 du 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, un répertoire ou un lien symbolique à un autre objet. Il contient un numéro unique (le numéro i), les attributs du fichier, y compris les autorisations de nom, date, taille et lecture / écriture, ainsi qu'un pointeur sur l'emplacement du fichier. C'est la contrepartie 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 des 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 traiter 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 dentiers jouent également un rôle dans la mise en cache de 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 source


5

En termes simples, 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 à un répertoire. Inode est simplement une collection de métadonnées sur un fichier ou un 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 une abstraction d’un véritable "fichier" (par exemple, / etc / passwd). Il représente un "fichier" ouvert ou un répertoire. struct fileest créé par sys_opendans le noyau, ainsi un processus peut avoir beaucoup de struct files pour le même fichier.

Pourquoi avons-nous besoin de dentry? Il est utilisé pour accélérer la traduction de nom de chemin (par exemple, / etc / passwd) en inode. Le noyau Linux utilise inode pour manipuler "fichier" ou répertoire, pas leur nom.


4

Notez que ces termes ne sont pas spécifiques à Linux mais au système de fichiers. La plupart des systèmes de fichiers utilisés par les systèmes Unix actuels et similaires sont soit dérivés, soit 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 überblocks.


J'espère que vous pourrez lire ce commentaire après si longtemps. J'ai lu que VFS a des inodes et des superblocs qui ne sont pas liés aux inodes et aux superblocs de, disons EXT2. Donc, juste pour ne pas mal comprendre ce que vous avez dit, en vertu de chaque Linux ayant un VFS, ils devraient tous utiliser des inodes et des superblocs, non?
CuriousKimchi

1
@CuriousKimchi Bien qu'ils portent le même nom ici, vous ne devez pas confondre les informations stockées sur le disque (superbloc / inodes) et les structures utilisées par le noyau pour accéder à un système de fichiers et à ses fichiers. Chaque système de fichiers possède des métadonnées sur le disque décrivant les caractéristiques du système de fichiers. Ces métadonnées sont utilisées pour renseigner la structure de superbloc Linux VFS. De même, les fichiers ont une structure inode dans le noyau sous VFS. Lorsque les systèmes de fichiers sous-jacents n'ont pas la notion d'inode, cette structure contient un faux numéro d'inode créé à la volée par le système d'exploitation.
Jlliagre
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.