Tom Daluzeau
← Parcours Linux · ressources
Linux · ressources · leçon 6 / 6Ch. 3 · Stockage12 minTerminée

Systèmes de fichiers et pannes de disque

Tu sais suivre la pile du disque au point de montage, formater et monter un volume, et diagnostiquer les quatre pannes classiques : disque plein, inodes épuisés, lecture seule, fichier supprimé mais encore ouvert.

Mis à jour le

À recouper avec le cours. Cette leçon a été écrite à partir du plan du chapitre, avant relecture avec les supports. En cas de doute, le cours fait foi.

Pourquoi on voit ça

« Le disque est plein » est sans doute l’alerte la plus fréquente sur un serveur. Mais derrière ce message, il y a plusieurs pannes différentes, et elles ne se réparent pas de la même façon. Certaines affichent même « plus de place » alors qu’il en reste.

Pour t’y retrouver, il faut d’abord avoir en tête la pile du stockage, étage par étage. Ensuite, on passe en revue les quatre pannes classiques et le réflexe pour chacune.

La pile, du disque au dossier

Disque Partition, volume Système de fichiers Point de montage /dev/sdb /dev/sdb1 ext4 /srv/data le terrain la parcelle le bâtiment et ses étagères la porte d'entrée lsblk lsblk mkfs.ext4 mount · /etc/fstab
On ne monte pas un disque ni une partition : on monte le système de fichiers posé dessus.
Étage Ce que c’est Commande
Disque le matériel lsblk
Partition ou volume un morceau du disque (partition, LV de LVM, grappe RAID) lsblk
Système de fichiers l’organisation en fichiers et dossiers, posée sur le volume mkfs.ext4
Point de montage le dossier par lequel on accède au contenu mount

C’est comme un terrain (le disque), découpé en parcelles (les partitions). Sur une parcelle, tu construis un bâtiment avec ses étagères (le système de fichiers). Et il faut une porte pour y entrer (le point de montage).

Voir la pile : lsblk

lsblk
$ lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda      8:0    0   20G  0 disk
├─sda1   8:1    0   19G  0 part /
└─sda2   8:2    0    1G  0 part [SWAP]
sdb      8:16   0   10G  0 disk
└─sdb1   8:17   0   10G  0 part

sdb1 existe mais sa colonne MOUNTPOINTS est vide : la partition n’est montée nulle part.

Formater et monter

mkfs.ext4 /dev/sdb1
mkdir /srv/data
mount /dev/sdb1 /srv/data

mkfs.ext4 crée un système de fichiers ext4 (et efface ce qu’il y avait). mount accroche ce système de fichiers à un dossier.

Rendre le montage permanent : /etc/fstab

Un mount fait à la main disparaît au redémarrage. Pour qu’il revienne, il faut une ligne dans /etc/fstab :

/dev/sdb1   /srv/data   ext4   defaults   0   2

Dans l’ordre : quoi monter, où, le type de système de fichiers, les options, puis deux nombres (sauvegarde par dump, ordre de vérification au démarrage).

Contexte, pas à apprendre. En pratique, on désigne souvent le volume par son UUID (affiché par blkid) plutôt que par /dev/sdb1, car les noms de disques peuvent changer. Et mount -a monte tout ce qui est décrit dans fstab : pratique pour tester une ligne sans redémarrer.

Mesurer : df et du

Commande Question Elle mesure
df -h combien reste-t-il ? chaque système de fichiers monté
du -sh dossier combien pèse ce dossier ? un dossier et son contenu

-h affiche des unités lisibles (G, M). -s donne un seul total au lieu d’une ligne par sous-dossier.

Panne 1 : le disque est plein

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        20G   20G     0 100% /var

df -h te dit quel système de fichiers est plein. du te dit ce qui prend la place. Tu descends niveau par niveau :

du -sh /var/*
du -sh /var/log/*
1.2G    /var/cache
420M    /var/lib
18G     /var/log

Ici le coupable est dans /var/log. Tu relances du dans ce dossier, jusqu’à trouver le fichier ou le dossier en cause. Ensuite, tu supprimes ou tu archives, ou tu agrandis le volume s’il est sur LVM.

Panne 2 : les inodes sont épuisés

Le symptôme qui piège : « No space left on device » alors que df -h montre de la place.

Chaque fichier a besoin d’un inode : sa fiche d’identité (propriétaire, droits, taille, emplacement des données). Sur ext4, le nombre d’inodes est fixé à la création du système de fichiers. Quand ils sont tous pris, impossible de créer un fichier de plus, même vide.

Disque plein inodes : une fiche par fichier blocs : le contenu des fichiers df -h : 100 % un gros fichier, presque pas d'inodes pris Inodes épuisés inodes : une fiche par fichier blocs : le contenu des fichiers df -i : 100 % plein de petits fichiers, des blocs libres
Deux réserves, deux commandes. « No space left on device » peut venir de l'une ou de l'autre.
df -i
Filesystem      Inodes   IUsed IFree IUse% Mounted on
/dev/sda3      1310720 1310720     0  100% /var

IUse% à 100 % : le problème est là. La cause est toujours la même : un très grand nombre de petits fichiers (cache, fichiers de session, file d’attente de courrier). Il faut trouver le dossier qui les contient et le vider.

Panne 3 : le système de fichiers est en lecture seule

Symptôme : toute écriture échoue avec « Read-only file system ».

Quand le noyau détecte des erreurs sur un système de fichiers (disque défaillant, corruption), il le remonte en lecture seule (ro). C’est une protection : continuer à écrire sur une structure abîmée aggraverait les dégâts.

Tu le confirmes dans les messages du noyau :

dmesg | grep -i ext4
EXT4-fs error (device sdb1): ext4_journal_check_start:83: Detected aborted journal
EXT4-fs (sdb1): Remounting filesystem read-only

La réparation se fait avec fsck, toujours sur un système de fichiers démonté :

umount /srv/data
fsck /dev/sdb1
mount /srv/data

Lancer fsck sur un système de fichiers monté en écriture peut le détruire. Pour la racine /, qu’on ne peut pas démonter, la vérification se fait au démarrage ou depuis un système de secours.

Si le système de fichiers est sain et qu’il faut simplement le repasser en écriture, sans le démonter :

mount -o remount,rw /srv/data

remount change les options d’un montage existant, rw veut dire lecture et écriture. Attention : si la cause est une vraie corruption, ça ne répare rien. On vérifie d’abord, on remonte ensuite.

Panne 4 : fichier supprimé, place pas rendue

Tu supprimes un énorme journal avec rm, et df -h reste à 100 %. Autre indice : du trouve beaucoup moins de données que ce que df annonce.

Explication : rm supprime le nom du fichier. Les données ne sont libérées que lorsque plus aucun processus n’a le fichier ouvert. Si l’application écrit toujours dedans, le fichier existe encore, invisible, et continue même de grossir.

lsof | grep deleted
java  1432  app  4w  REG  8,3  8589934592  131089 /var/log/app/app.log (deleted)

Tu lis le nom du programme et son PID (ici java, 1432). La solution : faire fermer le fichier, en redémarrant le service concerné. La place revient aussitôt.

Quel symptôme ? No space left on device Read-only file system Place pas rendue après un rm df -h dmesg | grep -i ext4 lsof | grep deleted Use% 100 % de la place du -sh /var/* disque plein df -i inodes épuisés umount, fsck, mount système abîmé relancer le service fichier encore ouvert
Le message d'erreur choisit la branche. Seule la première branche demande deux mesures : la place, puis les inodes.

À retenir

  • La pile : disque → partition ou volume → système de fichiers (mkfs.ext4) → point de montage (mount). Montage permanent : /etc/fstab.
  • df -h mesure les systèmes de fichiers, du -sh mesure les dossiers. Disque plein : df pour savoir où, du pour savoir quoi.
  • « No space left on device » avec de la place dans df -h : regarde df -i. Inodes à 100 % = trop de petits fichiers.
  • « Read-only file system » : le noyau a protégé un système de fichiers abîmé. dmesg pour confirmer, fsck démonté pour réparer, mount -o remount,rw pour repasser en écriture.
  • Un fichier supprimé mais encore ouvert par un processus occupe toujours sa place : redémarre le service qui le tient.

Entraînement

12 questions, dont 4 à compléter. Tu réponds, on passe à la suivante. La note arrive à la fin.

Cartes · 8

Réviser les cartes ici

Espace : retourner