Les inodes sous Linux : concepts clés et comment les maîtriser

  • Les inodes sont des structures de données qui stockent les métadonnées et l'emplacement des fichiers, mais pas leur nom ni leur contenu.
  • Le nombre total d'inodes est défini lors de la création du système de fichiers et peut être épuisé même s'il reste de l'espace disque libre.
  • Des commandes telles que stat, ls -i, df -i et find vous permettent d'inspecter et de contrôler l'utilisation des inodes sur les systèmes Linux.
  • Le nettoyage régulier des petits fichiers, des fichiers temporaires et des caches est essentiel pour éviter les problèmes graves causés par un manque d'inodes.

Inodes sous Linux

Si vous travaillez avec des serveurs Linux, vous rencontrerez tôt ou tard des problèmes d'inodes, et il est préférable de les résoudre avant que le système n'affiche le message redouté. « Espace insuffisant sur le périphérique » malgré la présence d’un disque libreLes inodes sont un élément clé du système de fichiers et, bien qu'ils puissent paraître purement théoriques au premier abord, les comprendre peut vous éviter des interruptions de service, des pertes de données et des incidents majeurs en production.

Dans cet article, nous examinerons de près ce qu'est un inode, ce qu'il stocke, comment il est organisé sur le disque, ce qui se passe lorsqu'il n'y en a plus, et, surtout, Comment contrôler et optimiser l'utilisation des inodes sous Linux avec des instructions pratiques. L'idée est de passer de la théorie à la pratique, mais dans un langage accessible et sans fioritures inutiles.

Qu'est-ce qu'un inode et quel rôle joue-t-il sous Linux ?

Un inode (de l'anglais nœud d'index) est une structure de données interne du système de fichiers qui stocke toutes les métadonnées d'un fichier ou d'un répertoire, à l'exception de son nom et de son contenu. Chaque fichier et chaque répertoire d'un système de fichiers de type Unix (Linux, macOS, etc.), et même dans les environnements Windows avec WSL2, possède exactement un inode associé, identifié par un entier appelé numéro d'inode.

Méthodes rapides pour identifier le type de fichier sous Windows et Linux
Article connexe:
Méthodes rapides pour identifier le type de fichier sous Windows et Linux

Au sein du même système de fichiers, chaque numéro d'inode est uniqueCependant, ce même numéro peut se répéter sur d'autres systèmes de fichiers montés sur la même machine. L'identité véritable d'un fichier est définie par la combinaison de son identifiant de système de fichiers et de son numéro d'inode ; cette paire confère à chaque élément une identité unique au sein du système.

Il est important de souligner que le nom de fichier ne fait pas partie de l'inodeLes noms de fichiers sont stockés dans des entrées de répertoire, qui sont de simples listes associant un nom de fichier à un numéro d'inode. Ainsi, sous Linux, les fichiers sont référencés par leur inode, et leur nom n'est qu'une étiquette qui y fait référence.

Quelles informations un inode stocke-t-il : des métadonnées détaillées ?

L'inode stocke toutes les informations nécessaires au système de fichiers pour savoir comment gérer ce fichier ou répertoire, sans avoir besoin de connaître son nom. Métadonnées communes stockées par un inode dans les systèmes Linux sont les suivants:

  • Type de fichier (régulier, répertoire, lien symbolique, périphérique, etc.).
  • Permis d'accès (lecture, écriture, exécution pour l'utilisateur, le groupe et autres).
  • UID du propriétaire (numéro d'utilisateur du propriétaire du fichier).
  • GID du groupe (numéro du groupe auquel il appartient).
  • Taille du fichier en octets.
  • Nombre de liens physiques ce point vers cet inode.
  • Nombre de blocs de données que le fichier occupe sur le disque.
  • Dispositif de stockage où il se trouve (ID de l'appareil) le cas échéant.
  • Marques de temps: dernière lecture (atime), dernière modification du contenu (mtime) et dernière modification des métadonnées (ctime) ; dans certains systèmes également la date de création.
  • Adresses des blocs de données où le contenu du fichier est stocké.
  • Adresses de bloc indirectes (blocs de redirection) lorsque le fichier est trop volumineux pour être référencé uniquement par des pointeurs directs.
  • Numéro de version ou autres champs internes selon le système de fichiers.

En bref, l'inode concentre Tout ce que le système doit savoir sur un fichier, à l'exception de son nom et de son contenu.Le contenu proprement dit réside dans les blocs de données du disque ; le nom, dans les entrées de répertoire.

Code par blocs : comment les inodes fonctionnent en interne

Inodes sous Linux

Les systèmes Unix et Linux gèrent les disques durs les divisant en blocs de données de taille fixeContrairement aux partitions FAT, lorsqu'un fichier est enregistré, son contenu est réparti sur un ou plusieurs blocs libres du système de fichiers. Si le fichier est plus volumineux qu'un seul bloc, il est fragmenté en autant de blocs que nécessaire.

L'inode fait office de sorte de « table des matières » : Il contient des pointeurs vers les blocs physiques du disque où réside le fichier.Si le fichier tient dans quelques blocs, l'inode y fait directement référence grâce à des entrées d'adressage direct. Lorsque le fichier devient trop volumineux, on utilise des tables d'adressage indirect.

Tables de routage direct et indirect

Dans les systèmes de fichiers comme ext4, chaque inode est généralement réservé. 15 entrées d'adressage pour ses blocs de données. Les 12 premières entrées sont des pointeurs directs : chacune pointe directement vers un bloc de données. Cela permet une gestion très efficace des fichiers relativement petits.

Lorsque les 12 entrées directes ne suffisent plus, le système recourt à routage indirect:

  • L'entrée 13 est généralement une pointeur indirect simple: pointe vers un bloc qui ne contient pas de données de fichier, mais une table avec des adresses de blocs de données supplémentaires.
  • L'entrée 14 est utilisée comme pointeur doublement indirect: pointe vers un bloc qui contient à son tour des adresses de blocs contenant des listes de blocs de données.
  • L'entrée 15 sert de pointeur triplement indirect: une chaîne de tables à trois niveaux avant d'atteindre les blocs finaux contenant les données.

Ce mécanisme étagé permet à un seul inode de fichiers de référence très volumineux sans que la structure interne ne devienne excessivement volumineuse, au prix d'une complexité accrue d'accès lorsque le fichier est très volumineux.

attributs de fichiers Linux
Article connexe:
Qu'est-ce que MIME sous Linux et comment l'utiliser dans les scripts et les serveurs ?

Où sont stockés les inodes sur le disque ?

Les inodes ne sont pas des fichiers que vous pouvez normalement « voir » ; Ce sont des structures de données que le système de fichiers réserve dans des zones spécifiques du disque.Dans les systèmes ext2/ext3/ext4, par exemple, lors de la création du système de fichiers, des tables d'inodes organisées en groupes sont générées au préalable.

Dans ext4, la partition est divisée en interne en plusieurs groupes de blocs. Au début de chaque groupe, une table d'inodes est réservée. et d'autres métadonnées. Les inodes de ce groupe référencent généralement des blocs de données physiquement proches, ce qui réduit les déplacements de la tête de lecture/écriture sur les disques mécaniques et améliore les performances.

Étant donné que chaque inode a une taille fixe (par exemple, 256 octets par défaut en ext4), et les blocs de disque font généralement 4096 octets, Chaque bloc peut contenir 16 inodes.Le nombre total d'inodes est défini lors du formatage du système de fichiers et, en général, ne peut pas être modifié sans le recréer.

Comment les inodes sont créés, copiés et déplacés

Lorsque vous créez un nouveau fichier, le système de fichiers lui attribue un inode libre et un numéro d'inode unique Au sein de cette partition. Si vous copiez un fichier au sein du même système de fichiers, la copie reçoit un inode différent, avec son propre numéro, même si le contenu des données est identique.

Lors du déplacement d'un fichier au sein de la même partition (par exemple avec mv), l'inode ne change pas : Seules les entrées de répertoire qui associent le nom de fichier à ce numéro d'inode sont mises à jour.C’est pourquoi le déplacement d’un fichier volumineux au sein du même système de fichiers est si rapide : aucune donnée n’est copiée, seuls les noms sont mis à jour.

Si vous déplacez un fichier entre différents systèmes de fichiers (par exemple, de...), vous pouvez le déplacer entre différents systèmes de fichiers. / à une autre cloison montée dans /mnt), le processus sous-jacent est en réalité une copie suivie d'une suppression. Dans ce cas, le numéro d'inode change. car le « nouveau » fichier appartient à un autre système de fichiers possédant son propre ensemble d'inodes.

Inodes et liaisons fortes : pourquoi sont-ils si puissants ?

Comme nous l'avons évoqué, sous Linux Les fichiers sont identifiés en interne par leur numéro d'inode, et non par leur nom.Cela permet à plusieurs noms différents de pointer vers le même inode et, par conséquent, vers le même contenu de fichier. On appelle cela un lien physique.lien dur).

Lorsque vous créez un lien physique avec la commande ln, vous ajoutez une nouvelle entrée de répertoire qui pointe vers le même numéro d'inode que le fichier d'origineAucune donnée n'est dupliquée et aucun espace supplémentaire n'est utilisé pour le contenu. Tant qu'au moins un nom pointe vers cet inode, les données restent sur le disque.

Cela explique aussi pourquoi La suppression d'un fichier n'entraîne pas nécessairement la suppression immédiate de ses données.C'est une entrée de nom qui est supprimée. Le système de fichiers ne libère les blocs de données associés que lorsque le compteur de liens physiques de l'inode atteint zéro.

Nombre total d'inodes et leur limite

Chaque système de fichiers possède un nombre maximal d'inodes qu'il peut gérer. Théoriquement, pour de nombreux systèmes, cette limite est d'environ 2^32 inodes, soit environ 4,3 milliardsEn pratique, le nombre disponible est beaucoup plus petit et dépend de la façon dont le système de fichiers a été créé.

Dans les systèmes ext2/ext3/ext4, une règle heuristique est généralement utilisée : environ un inode pour chaque tranche de 16 Ko de capacité disqueCela signifie que si vous créez un système de fichiers de plusieurs centaines de gigaoctets avec la configuration par défaut, vous aurez des millions d'inodes, mais pas une infinité.

Le fait essentiel est que Le nombre total d'inodes est défini lors du formatage. avec des outils comme mkfsVous pouvez y ajuster des paramètres tels que le nombre d'octets par inode (option) -iCela détermine le nombre d'inodes qui seront créés. Toute modification ultérieure implique de recréer le système de fichiers ou de le repartitionner, avec le risque de perte de données que cela comporte en cas de problème.

Pourquoi vous pouvez manquer d'inodes même si vous avez de l'espace disque

L'épuisement des inodes signifie que Il n'existe plus de structures disponibles pour représenter de nouveaux fichiers ou répertoires.Même si les blocs de données du disque disposent encore de beaucoup d'espace, cette situation est moins fréquente qu'une saturation de l'espace disque, mais parfaitement possible.

Voici quelques scénarios typiques qui déclenchent l'utilisation d'inodes :

  • Générer d'énormes quantités de très petits fichiers (par exemple, les journaux, les courriels individuels sur le disque, les sessions temporaires).
  • Utilisation intensive de la conteneurisationoù prolifèrent les fichiers et les répertoires pour les calques, les images et les conteneurs.
  • Créez des systèmes de fichiers avec des blocs très petits. (par exemple, ext3 avec une taille de bloc réduite) qui encouragent la génération de nombreux petits fichiers.
  • Répertoires de cache, TMP et de session qui accumulent de vieux fichiers pendant des années s'ils ne sont pas nettoyés.

Dans ces cas, vous pouvez rencontrer l'erreur «Pas d'espace disponible sur le périphérique« lors de la création de nouveaux fichiers, bien que lors de l'exécution d'un df -h Vous voyez toujours des gigaoctets d'espace libre. Le problème ne vient pas de la capacité de stockage brute, mais plutôt du fait que Le stock d'inodes disponibles est épuisé..

Symptômes et risques liés à la pénurie de toilettes

Lorsqu'un système atteint ses limites au niveau des anodes, une grande variété de défaillances commencent à apparaître. Certaines d'entre elles Problèmes plus fréquents en cas de manque d'inodes libres sont:

  • Impossible de créer de nouveaux fichiers ou répertoiresmême avec de l'espace disque disponible.
  • L'application plante et se bloque. qui tentent d'écrire des journaux, des fichiers temporaires ou des données persistantes.
  • Redémarrages inattendus du serveur ou des défaillances du système d'exploitation si des processus critiques ne peuvent pas écrire.
  • Perte ou corruption de données lorsque les écritures échouent en cours d'opération.
  • Les tâches planifiées (tâches cron) ne s'exécutent pas correctement. car ils ne peuvent pas créer de fichiers temporaires ou de fichiers de sortie.

En environnement de production, tout cela se traduit par un risque évident : Si vous ne surveillez pas les inodes, vous risquez d'arrêter des services entiers par « manque » d'espace alors que le disque est encore à moitié vide..

Vérification du nombre d'inodes et de leur utilisation sous Linux

Linux propose plusieurs commandes pour inspecter les inodes spécifiques et surveiller l'utilisation globale des inodes dans le systèmeExaminons les plus utiles.

Qu'est-ce que le superbloc Linux et comment fonctionne-t-il ?
Article connexe:
Le superbloc sous Linux : définition, contenu et réparation

Afficher les informations complètes sur l'inode avec stat

La commande stat muestra toutes les métadonnées que le système connaît sur un fichier ou un répertoire, y compris son numéro d'inode, ses autorisations, son propriétaire et ses horodatages.

Par exemple:

root@equipo:~# stat /var/log/lastlog
File: /var/log/lastlog
Size: 292292 Blocks: 96 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 17381397 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 0/ root) Gid: ( 22/ utmp)
Access: 2022-01-12 11:28:19.900058928 +0100
Modify: 2022-01-12 11:28:19.900058928 +0100
Change: 2022-01-12 11:28:19.900058928 +0100
Birth: 2021-06-25 17:40:57.254208200 +0200

À cette sortie, vous pouvez facilement identifier le numéro d'inode (champ Inode), le nombre de liens, la taille et les dates pertinentes.

Afficher le numéro d'inode avec ls -i

Si vous vous intéressez uniquement au numéro d'inode d'un fichier ou d'un répertoire, sans trop de détails, vous pouvez utiliser ls avec l'option -i. Cette commande Listez les fichiers en indiquant leur inode dans la première colonne..

Exemple utilisant un fichier :

root@equipo:~# ls -i /var/log/lastlog
17381397 /var/log/lastlog

Et pour un annuaire, ajouter quelques options supplémentaires pour visualiser l'entrée elle-même :

root@equipo:~# ls -idl /var/log
16813380 drwxr-xr-x. 18 root root 4096 Jun 6 12:33 /var/log

Vérifiez l'utilisation des inodes au niveau du système de fichiers avec df -i

La commande df Il permet de visualiser l'espace utilisé dans les systèmes de fichiers, et avec l'option -i Il se poursuit ensuite en montrant Informations sur le nombre total d'inodes, utilisés et libres.

Par exemple:

root@equipo:~# df -i /dev/sda1
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 524288 379 523909 1% /boot

Ainsi, vous pouvez voir le nombre total d'inodes, le nombre d'inodes utilisés, le nombre d'inodes libres et le pourcentage d'inodes utilisésC'est un moyen rapide de vérifier si vous approchez de la limite.

Comptez le nombre d'inodes (fichiers) présents dans un répertoire.

Si vous souhaitez avoir une idée du nombre de fichiers et de répertoires présents sous un chemin spécifique, vous pouvez combiner find avec wc -lComme chaque fichier ou répertoire consomme un inode:

root@equipo:~# find /var/log | wc -l
120

Ce nombre vous indique environ Combien d'inodes sont utilisés dans cette arborescence de répertoires ?Il est très utile pour localiser les zones du système qui génèrent des milliers de petits fichiers.

Afficher les caractéristiques des inodes d'une partition

Pour examiner la configuration des inodes sur une partition ext2/ext3/ext4, vous pouvez utiliser tune2fsLa commande suivante affiche le nombre total d'inodes, leur nombre par groupe et la taille de chaque inode.:

root@equipo:~# tune2fs -l /dev/sda1 | grep Inode
Inode count: 2031616
Inodes per group: 8192
Inode blocks per group: 512
Inode size: 256

Grâce à ces informations, vous pouvez estimer Combien d'inodes avez-vous à disposition et combien peuvent être placés par bloc ?Par exemple, avec des inodes de 256 octets et des blocs de 4096 octets, nous pouvons accueillir 16 inodes par bloc.

Différences entre les systèmes de fichiers : ext, XFS, Btrfs et autres

Inodes sous Linux

Tous les systèmes de fichiers ne gèrent pas les inodes de la même manière. Dans la famille ext2/ext3/ext4, comme nous l'avons vu, Les tables d'inodes sont créées statiquement lors de l'initialisation du système de fichiers.Les inodes occupent un espace fixe et réservé qui ne peut être utilisé à aucune autre fin, et leur nombre ne peut pas croître dynamiquement.

Dans des systèmes plus avancés tels que XFS ou BtrfsL'approche est différente. Au lieu de réserver une grande table à l'avance, Les inodes sont créés à la demande. lorsqu'elles sont nécessaires pour représenter de nouveaux fichiers. Cela offre une plus grande flexibilité, même si la logique de gestion interne est plus complexe.

Il est également nécessaire de faire la distinction entre Inodes du disque (les inodes stockés sur le disque physique) et les Inodes intégrés (Les structures de mémoire utilisées par le noyau pour interagir avec les fichiers ouverts). Le concept reste le même, mais la prise en charge et certains détails d'implémentation diffèrent.

Cas pratique : utiliser la commande `df -i` et lire sa sortie

Quand tu cours df -i Vous obtenez un tableau comportant plusieurs colonnes. Comprendre la signification de chacune d'elles est utile pour interpréter l'état de santé de vos inodes:

  • Système de fichiers: le périphérique ou le volume monté (par exemple, /dev/sda1 o /dev/disk1s2 sous macOS).
  • Inodes / utilisé / gratuit: nombre total d'inodes, nombre d'inodes utilisés et nombre d'inodes libres.
  • %utilisé: pourcentage d'inodes utilisés.
  • Monté sur: point de montage du système de fichiers.

Bien que les chiffres totaux puissent paraître énormes, Ils peuvent s'épuiser bien avant que le disque ne soit plein.Par exemple, sur un ordinateur portable doté de 1 To et d'environ 4 900 000 inodes libres, vous pourriez créer 4 900 000 fichiers de 1 octet, en utilisant seulement quelques Mo de stockage, et pourtant vous ne pourriez plus créer de nouveaux fichiers faute d'inodes disponibles.

Comment détecter et résoudre les problèmes de nombre élevé d'inodes

Lorsque des applications commencent à planter ou que des tâches planifiées ne s'exécutent pas, il est judicieux de soupçonner les inodes. La première chose à faire est : vérifier l'utilisation avec df -i dans les systèmes de fichiers concernés :

df -i
df -i /ruta/que/te/preocupa

Si vous constatez que le pourcentage d'inodes utilisés est proche de 100 %, vous avez localisé le goulot d'étranglement. L'étape suivante est : identifier où se concentrent les petits fichiers qui consomment tellement d'inodes.

Voici quelques stratégies utiles :

  • Localisez les répertoires avec grand nombre de fichiers en utilisant des combinaisons de find, du y wc -l.
  • Trier les fichiers par taille avec quelque chose comme ls -laShr dans un chemin spécifique pour identifier de nombreux petits fichiers.
  • Réviser répertoires cache, temporaires et de téléchargementqui sont souvent oubliés : par exemple /tmp, les caches d'applications web, les espaces de stockage de sessions, etc.
  • Si une application (comme un serveur de messagerie) stocke de nombreux éléments individuels sous forme de fichiers, concentrer sa production dans des répertoires spécifiques afin qu'il puisse être nettoyé périodiquement.

Une fois la source du problème localisée, la solution la plus directe est généralement supprimer les fichiers qui ne sont plus nécessaires:

  • Supprimer répertoires et fichiers obsolètes.
  • Effacer anciens fichiers cache qui peuvent se régénérer d'elles-mêmes.
  • Démarrer archives de courriels, sessions ou fichiers temporaires datant de plus d'une certaine heure (par exemple, 14 jours) en utilisant une tâche cron avec find -mtime y -delete.

Cela permet une récupération rapide des inodes sans affecter la structure du système de fichiers. Cependant, la prudence est de mise avec une automatisation trop poussée, car La suppression de fichiers essentiels peut endommager les applications.Il est toujours judicieux de vérifier et de tester les commandes avant de les déployer en production.

Si vous manquez toujours d'inodes et que vous ne pouvez plus en libérer, la seule option restante est la méthode difficile : repartitionner ou recréer le système de fichiers avec un ratio d'inodes plus généreux (ajustement des octets par inode dans mkfsIl s'agit d'un processus délicat qui implique des sauvegardes et un risque de perte de données en cas de problème.

Quand une utilisation excessive des toilettes devient-elle réellement préoccupante ?

Un pourcentage élevé d'inodes utilisés n'est pas forcément synonyme de catastrophe. Parfois, cela reflète simplement que Vous avez beaucoup de fichiers, mais encore assez d'espace.Le véritable problème survient lorsqu'on approche les 100 %, notamment dans les partitions critiques telles que /, /var o /homeoù des fichiers sont constamment créés et supprimés.

Dans de nombreux cas, l'usage excessif découle de données superflues de petite tailleLes fichiers temporaires, les caches ou les fichiers de session qui n'ont pas été nettoyés depuis des mois. La mise en place de routines automatisées (tâches cron) qui suppriment périodiquement les fichiers en fonction de leur ancienneté est souvent une solution simple pour y remédier. Maîtriser la consommation d'inodes sans modifier la conception du système.

attributs de fichiers Linux
Article connexe:
Bottles sous Linux : un guide pratique pour exécuter des applications Windows

Il convient également de prendre en compte les différences entre les systèmes de fichiers. Certains, comme XFS ou Btrfs, gèrent les inodes avec plus de souplesse qu'ext4, ce qui peut s'avérer utile dans les environnements où la manipulation des inodes est fréquente. des millions de petits fichiers.

Comprendre le fonctionnement des inodes, les informations qu'ils stockent et leur mode d'épuisement permet d'appréhender le système de fichiers sous un jour nouveau : Ce ne sont plus simplement des « fichiers et des dossiers », mais des structures internes aux limites très spécifiques..

En contrôlant ces limites et en vérifiant occasionnellement l'utilisation des inodes avec les commandes appropriées, il est beaucoup plus facile d'éviter les erreurs « Espace insuffisant sur le périphérique » et de maintenir un système Linux sain, même en cas de forte charge. Partagez l’information et davantage de personnes seront informées du sujet..