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
| É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. Etmount -amonte tout ce qui est décrit dansfstab: 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.
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.
À retenir
- La pile : disque → partition ou volume → système de fichiers (
mkfs.ext4) → point de montage (mount). Montage permanent :/etc/fstab. df -hmesure les systèmes de fichiers,du -shmesure les dossiers. Disque plein :dfpour savoir où,dupour savoir quoi.- « No space left on device » avec de la place dans
df -h: regardedf -i. Inodes à 100 % = trop de petits fichiers. - « Read-only file system » : le noyau a protégé un système de fichiers abîmé.
dmesgpour confirmer,fsckdémonté pour réparer,mount -o remount,rwpour 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.
Ta note
Cartes · 8
Réviser les cartes ici
Pourquoi