Compréhension détaillée des Inodes Linux avec l’exemple
Linux et d’autres systèmes d’exploitation de type Unix maintiennent la cohérence en traitant tout comme un fichier (même les périphériques matériels). Le clavier, la souris, les imprimantes, le moniteur, le disque dur, les processus, même les répertoires sont traités comme des fichiers sous Linux. Les fichiers réguliers contiennent des données telles que du texte (fichiers texte), de la musique, des vidéos (fichiers multimédia), etc.
Outre les données ordinaires, il existe d’autres données sur ces fichiers, telles que leur taille, leur propriété, leurs autorisations, leur horodatage, etc. Ces métadonnées sur un fichier sont gérées avec une structure de données appelée inode (nœud d’index).
Qu’est-ce qu’un inode sous Linux ?
Chaque fichier ou répertoire Linux (d’un point de vue technique, il n’y a pas de réelle différence entre eux) a un inode, et cet inode contient toutes les métadonnées du fichier (c’est-à-dire que toutes les données administratives nécessaires à la lecture d’un fichier sont stockées dans son inode).
Par exemple, l’inode contient une liste de tous les blocs dans lesquels un fichier est stocké, les informations sur le propriétaire de ce fichier, les autorisations et tous les autres attributs définis pour le fichier.
Les limites d’inode sont par système de fichiers et sont décidées au moment de la création du système de fichiers. La taille maximale du répertoire dépend du système de fichiers et donc de la limite exacte diffère.
Pour de meilleures performances, réduisez la taille de vos répertoires en triant les fichiers en sous-répertoires plutôt qu’en n’ayant qu’un seul grand répertoire.
Qu’est-ce qu’un numéro d’inode ?
Le numéro d’inode est également appelé numéro d’index. Un inode est un numéro unique attribué aux fichiers et répertoires lors de sa création. Le numéro d’inode sera unique à l’ensemble du système de fichiers.
Un inode est une structure de données sur un système de fichiers traditionnel de style Unix tel que ext3 ou ext4. stockage des propriétés d’un fichier et de répertoires.
Les systèmes de fichiers étendus Linux tels que ext3 ou ext4 conservent un tableau de ces inodes appelé table d’inodes. Ce tableau contient la liste de tous les fichiers de ce système de fichiers. Les inodes individuels de la table d’inodes ont un numéro unique (unique à ce système de fichiers) appelé numéro d’inode.
Les informations suivantes sont stockées dans inode:
- Type de fichier: fichier normal, répertoire, tuyau, etc.
- Autorisations sur ce fichier: lire, écrire, exécuter
- Nombre de liens: Le nombre de liens physiques relatifs à un inode
- ID utilisateur: propriétaire du fichier
- ID de groupe: propriétaire du groupe
- Taille du fichier: ou numéro majeur/mineur dans le cas de certains fichiers spéciaux
- Horodatage: heure d’accès, heure de modification et heure de changement (inode)
- Attributs: immuable ‘ par exemple
- Liste de contrôle d’accès: autorisations pour des utilisateurs/groupes spéciaux
- /li>
- Lien vers l’emplacement du fichier
- Autres métadonnées sur le fichier
Notez que l’inode ne stocke pas le nom du fichier mais son contenu uniquement.
Comment vérifier l’inode sous Linux
Si vous voulez jeter un coup d’œil aux inodes, sur n’importe quel système de fichiers ext, vous pouvez vous pouvez utiliser les commandes ci-dessous pour vérifier les propriétés du système de fichiers et des fichiers qui y sont utilisés.
a. Afficher les informations sur les données du fichier
Vous pouvez afficher les données d’inode sur un fichier ou un répertoire à l’aide de la commande stat.
Vous devez indiquer le nom du fichier comme suit:
La sortie stat vous indique les différents horodatages du fichier, sa propriété et ses autorisations, et où il est stocké. Les données du fichier sont conservées dans le bloc de disque, qui est affiché dans la sortie de la commande stat de l’inode.
Vous pouvez choisir de lister uniquement le numéro d’inode d’un fichier avec l’option --format
comme ci-dessous:
# stat --format=%i hello530461
b. Imprimer le nombre d’index des fichiers
La commande ls est utilisée pour lister les informations sur les fichiers et les répertoires. L’option -i
avec ls affiche le numéro d’inode de chaque fichier. Nous pouvons le combiner avec l’option -l
pour lister les informations en détail
# ls -iltotal 140984520170 dr-xrw-rw- 2 linoadmin linoadmin 4096 Mar 9 2013 asciiquarium_1.1263206 -rwxr-xr-x 1 linoadmin linoadmin 15436 Mar 9 2013 asciiquarium.tar.gz519187 drwxr----- 2 root root 4096 Apr 13 01:35-rwSr--r-- 1 root root 5747 Apr 25 01:45 bootstrap655799 drwxr-xr-x 2 root root 4096 May 16 17:46 course528927 drwxr-xr-x 3 root root 4096 Apr 29 00:29 environments
La première colonne donne le numéro d’inode. Vous pouvez afficher l’inode d’un fichier particulier comme suit :
# ls -i continue.sh 519450 continue.sh
c. Afficher les informations d’espace d’inode du système de fichiers
Par défaut, la commande df résume l’espace disque disponible et utilisé. Vous pouvez à la place recevoir un rapport sur les inodes disponibles et utilisés en passant l’option -i
ou --inodes
.
Ces informations peuvent être utiles si une partition contient de très nombreux petits fichiers, qui peuvent épuiser les inodes disponibles plus tôt qu’ils n’épuisent l’espace disque disponible.
d. Listez le contenu du superbloc du système de fichiers
Vous pouvez utiliser la commande tune2fs -l
pour afficher toutes les informations relatives à l’inode.
# tune2fs -l /dev/sda6 | grep inodeFilesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isizeFree inodes: 2224350First inode: 11Journal inode: 8First orphan inode: 1575905Journal backup: inode blocks
e. Manipulez les métadonnées du système de fichiers
Vous pouvez voir le contenu d’un inode tel qu’il existe sur un système de fichiers Ext4 avec la commande debugfs. Vous devez utiliser la commande stat disponible dans le débogueur du système de fichiers pour afficher le contenu de l’inode. Une fois terminé, utilisez exit pour fermer l’environnement debugfs.
Assurez-vous que les fichiers du système de fichiers ne sont pas accessibles lorsque vous travaillez dans debugfs. Vous devriez envisager de remonter le système de fichiers en utilisant mount -o remount /yourfilesystem
Vous pouvez utiliser debugfs pour restaurer un fichier en utilisant son inode et en indiquant une structure d’inode de fichier
pour le répertoire
Comme indiqué ci-dessus, les répertoires sous Linux sont également traités comme des fichiers. Le répertoire est un fichier spécial qui mappe un nom de fichier à son numéro d’inode (ce mappage est appelé entrée de répertoire ou dentry). Donc, quand nous disons qu’un répertoire contient des fichiers et d’autres répertoires, nous voulons dire que ce répertoire mappe ces fichiers et répertoires (les répertoires sont des fichiers spéciaux, donc ils ont également besoin de mapper leurs numéros d’inode) à leurs numéros d’inode.
C’est la raison pour laquelle un répertoire ne peut pas contenir deux fichiers avec le même nom, car il ne peut pas mapper un nom avec deux numéros d’inode différents.
# ls -ld test/drwxr-xr-x 3 root root 4096 Apr 13 01:43 test/
Comme un fichier est mappé à son inode par son répertoire parent, alors comment le répertoire le plus haut, (c’est-à-dire / directory
) est-il mappé à son inode? Le numéro d’inode du répertoire /
est fixe et vaut toujours 2.
Liens et numéro d’index sous Linux
Dans la sortie de ls -l
, la colonne suivant les autorisations et avant propriétaire est le nombre de liens. Le nombre de liens est le nombre de liens en dur vers un fichier. Pour comprendre les liens durs, nous commençons par les liens. Un lien est un pointeur vers un autre fichier.
Dans le monde Linux, il existe deux types de liens :
a. Liens symboliques (ou liens logiciels)
Le lien symbolique est un fichier distinct dont le contenu pointe vers le fichier lié. Pour créer un lien symbolique, utilisez la commande ln avec l’option -s
. Lorsque vous utilisez la commande ln, assurez-vous de vous référer d’abord au nom du fichier d’origine, puis au nom du lien que vous souhaitez créer.
# ln -s /home/bobbin/sync.sh filesync
Ici ‘filesync’ est un lien symbolique vers ‘sync.sh « . Pensez-y comme un raccourci. Éditer ‘filesync’, c’est comme éditer directement le fichier d’origine, mais c’est vraiment ce qui se passe. Si nous supprimons ou déplaçons le fichier d’origine, le lien sera rompu et notre fichier ‘filesync’ ne sera plus disponible.
La commande ls -l
montre que le fichier résultant est un lien symbolique. Ceci est indiqué par la lettre l dans la première position de la sortie ls -l
et également par la flèche à la fin de la liste, qui indique le fichier auquel le nom fait référence.
# ls -l filesync lrwxrwxrwx 1 root root 20 Apr 7 06:08 filesync -> /home/bobbin/sync.sh
Le contenu d’un lien symbolique est le nom du fichier cible uniquement. Vous pouvez voir que les autorisations sur le lien symbolique sont complètement ouvertes. En effet, les autorisations ne sont pas gérées
Lorsque vous comparez le lien symbolique et le fichier d’origine, vous remarquerez une différence claire entre eux.
Le fichier d’origine n’est qu’un nom connecté directement à l’inode, et le lien symbolique fait référence au nom. La taille du lien symbolique est le nombre d’octets dans le nom du fichier auquel il fait référence, car aucune autre information n’est disponible dans le lien symbolique.
b. Liens physiques
Pour avoir une idée de ce qu’est un lien physique, il est important de comprendre que l’identité d’un fichier est son numéro d’inode, pas son nom. Un lien dur est un nom qui fait référence à un inode. Cela signifie que si ‘file1’ a un lien dur nommé ‘file2’, ces deux fichiers se réfèrent au même inode. Ainsi, lorsque vous créez un lien dur pour un fichier, tout ce que vous faites vraiment est d’ajouter un nouveau nom à un inode.
Pour ce faire, utilisez la commande ln sans option.
# ls -l /home/bobbin/sync.sh -rw-r----- 1 root root 5 Apr 7 06:09 /home/bobbin/sync.sh
# ln /home/bobbin/sync.sh synchro
Comparons maintenant les deux fichiers
Ce qui est intéressant avec les liens durs, c’est qu’il n’y a pas de différence entre le fichier d’origine et le lien: ce ne sont que deux noms connectés au même inode.
Comme vous devez l’avoir noté, contrairement aux liens logiciels, les liens physiques ne sont pas des fichiers spéciaux. Maintenant, le nombre de liens est le nombre qu’un fichier a été lié en dur. Ainsi, le nombre de liens augmente après la création d’un lien physique, comme vous pouvez le voir sur la figure ci-dessus. Ces liens physiques ont deux limitations:
- Les répertoires ne peuvent pas être liés en dur. Linux ne permet pas de maintenir l’arborescence acyclique des répertoires.
- Un lien dur ne peut pas être créé entre les systèmes de fichiers. Les deux fichiers doivent être sur les mêmes systèmes de fichiers, car différents systèmes de fichiers ont des tables d’inodes indépendantes différentes (deux fichiers sur des systèmes de fichiers différents, mais avec le même numéro d’inode seront différents).
Comment trouver un lien dur sous Linux
Vous pouvez récupérer tous les noms de fichiers qui pointent vers un numéro d’inode. Cela signifie que vous pouvez récupérer des liens en dur car c’est le seul type de lien où nous pouvons avoir des noms de fichiers qui pointent vers le même contenu (inode). Vous pouvez le faire avec l’option -inum
de la commande find comme ci-dessous
# find / -inum 517333/home/bobbin/sync.sh/root/synchro
Avec cela, vous pouvez savoir quels noms de fichiers pointent vers les informations de données, donc, récupérez tous les liens physiques relatifs à un numéro d’inode spécifique
Opérations Linux avec les fichiers et sa relation avec les inodes
La plupart des opérations ) effectué sur des liens logiciels affectera le fichier lié réel (à l’exception des commandes rm ou mv, qui suppriment (ou déplacent) le lien logiciel lui-même)
Voici quelques opérations de fichiers dans lesquelles les inodes jouent leur rôle vital:
a. copy files
Lorsque nous copions un fichier, un nouveau fichier avec un nouvel inode est créé.
# cp myfile ..
# ls -li myfile ../myfile2501 -rw------- 1 raghu raghu 36 Jun 25 20:12 myfile3746 -rw------- 1 raghu raghu 36 Jan 11 12:05 ../myfile
b. déplacer des fichiers
Lors du déplacement à travers les systèmes de fichiers, la commande mv se déroule comme la commande cp ci-dessus, à l’exception que le fichier d’origine est supprimé de son emplacement. Mais lors du déplacement dans un système de fichiers, l’inode ne change pas, seul le mappage de répertoire de l’inode est modifié, les données réelles sur le disque dur (contenu du fichier) ne bougent pas.
# ls -li samplefile.txt2497 -rw------- 1 raghu raghu 22 Jun 25 20:12 samplefile.txt
Maintenant, nous allons déplacer le fichier et vérifier le résultat
# mv samplefile.txt ..
# ls -li ../samplefile.txt2497 -rw------- 1 raghu raghu 22 Jun 25 20:12 ../samplefile.txt
c. supprimer des fichiers
Lorsque la commande rm est émise, elle vérifie d’abord le nombre de liens du fichier. Si le nombre de liens est supérieur à 1
, il supprime cette entrée de répertoire et diminue le nombre de liens. Pourtant, les données sont présentes et l’inode n’est pas affecté. Et lorsque le nombre de liens est 1
, l’inode est supprimé de la table des inodes, le numéro d’inode devient libre et les blocs de données que ce fichier occupait sont ajoutés à la liste des blocs de données libres.
# ls -li myfile myfile.hardlink2501 -rw------- 2 raghu raghu 36 Jun 25 2012 myfile2501 -rw------- 2 raghu raghu 36 Jun 25 2012 myfile.hardlink
Supprimons le fichier et vérifions le résultat
# rm myfile.hardlink
# ls -li myfile2501 -rw------- 1 raghu raghu 36 Jun 25 2012 myfile
Vous pouvez voir que le nombre d’inodes est diminué.