Comment gérer le manque d’inodes sur un serveur Linux.

Ce matin, il m’était impossible de faire quoi que ce soit sur mon serveur Linux de supervision. Comme si le disque était en lecture seule. Voilà comment j’ai découvert la notion d’inodes sous Linux.

Présentation.

Avant d’aller plus loin, je pense qu’il faut expliquer ce qu’est un inode.

Voici une définition du site Wikipédia

Un nœud d’index ou inode (contraction de l’anglais index et node) est une structure de données contenant des informations à propos d’un fichier ou répertoire stocké dans certains systèmes de fichiers (notamment Linux/Unix).

À chaque fichier correspond un numéro d’inode (i-number) dans le système de fichiers dans lequel il réside, unique au périphérique sur lequel il est situé.

Chaque fichier a un seul inode, même s’il peut avoir plusieurs noms (chacun de ceux-ci fait référence au même inode).

Chaque nom est appelé link. Les inodes peuvent, selon le système de fichiers, contenir aussi des informations concernant le fichier, tel que son créateur (ou propriétaire), son type d’accès (par exemple sous Unix : lecture, écriture et exécution), etc. Tous les inodes sont contenus dans la table des inodes

Message d’erreur.

Généralement l’erreur intervient lorsque vous voulez créer ou modifier un fichier sur votre disque, l’erreur disque plein. Voici un exemple

# ssh-keygen -R 192.168.100.32

message d'erreur concernant un manque d'inodes sous linux

Comment savoir si nous n’avons plus d’inodes de disponible sur notre serveur ? grâce à la commande suivante vous allez être fixé très rapidement.

#df –i

comment savoir si nous n'avons plus d'inode sur notre serveur

Comme vous pouvez le constater, je n’ai plus d’inodes de disponible sur la partition /dev/mapper/vg_lm4c-lv_root.

Ce symptôme est souvent caractéristique d’un nombre important de petits fichiers présent sur votre serveur.

Pour savoir où sont ces fichiers, on peut utiliser la commande suivante : elle va chercher le nombre de fichiers dans chaque répertoire. On commence par la racine /.

# for i in /*; do echo -n $i " " ; find $i |wc -l; done | sort -n -k2

trouver le répertoire consommant le plus d'inode

Pour savoir d’où vient le problème, il faudra peut-être adapter la commande. Par exemple ici je vais analyser le répertoire /var, car je vois que c’est lui qui consomme le plus d’inode.

# for i in /var/*; do echo -n $i " " ; find $i |wc -l; done | sort -n -k2

trouver le répertoire consommant des inodes sur notre serveur

Ici le répertoire qui consomme des inodes est le répertoire spool.

Le résultat est présenté très simplement : le nom du répertoire et le nombre de fichiers associés. En utilisant ce résultat, on peut continuer avec une commande similaire mais en remplaçant /* par /le-repertoire/* …et ainsi de suite jusqu’à trouver le répertoire coupable !

Une fois trouvé le bon répertoire (/var/spool/centreontrapd dans mon cas), il faut encore faire le ménage avec la commande rm -f *centreon*.

Malheureusement vu la quantité de données à supprimer j’ai ce message d’erreur :

erreur lors de la suppression, Liste d'argument trop longue

Ceci est dû à une limitation de la commande rm, qui ne permet pas de gérer un grand nombre d’arguments (le joker ‘*’ est développé par le shell en une série d’arguments).

Pour ne pas s’embêter à supprimer par lot les fichiers (surtout si vous en avez des milliers), vous pouvez utiliser cette commande à l’intérieur du répertoire où ils se trouvent :

#find . -name "*fichier_à_supprimer*" -exec rm {} \;

Une fois que notre commande s’est terminée, refaite un df –i et vous verrez que vous avez de nouveau des inodes de disponible.

commande df -i pour voir les inodes disponibles

That’s All.

3 Potins

  1. le roy matthieu

    Très bien. Peux être serait-il intéressant de dire que cela peut être supervisé?

    Bonne continuation.

  2. Bonjour,

    merci pour ces encouragements. J’espère que les tutoriels vous plaisent et vous sont surtout utiles.

    A bientôt

  3. Merci pour cette découverte et mise en garde. Je vais mettre cet article dans mes bookmarks. ça peut toujours servir.

    Merci encore ! ;-)

    Jo

    Un fidèle lecteur

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *