Aller au contenu
Administration Linux medium

Un système de fichiers passé en lecture seule

11 min de lecture

Toutes les écritures échouent : le système de fichiers est passé en lecture seule. Les applications ne peuvent plus écrire leurs logs, la base de données refuse les transactions, et parfois le serveur reste joignable en SSH, ce qui rend le diagnostic d'autant plus déroutant. La question à trancher en premier n'est pas « comment remonter en écriture », mais est-ce voulu ou est-ce subi. Les deux situations n'ont ni la même cause, ni la même réparation, et le message d'erreur les distingue.

  • Distinguer un montage en lecture seule volontaire d'un remount-ro subi après une erreur disque, grâce au message exact
  • Lire les erreurs ext4 dans le journal du noyau, la seule source fiable
  • Comprendre pourquoi findmnt et tune2fs peuvent vous mentir
  • Réparer avec fsck et prouver que l'écriture est revenue

Deux échecs d'écriture, deux messages distincts. Cette distinction est le cœur du diagnostic, et beaucoup d'administrateurs la manquent :

Fenêtre de terminal
touch /mnt/data/essai
Message obtenuCodeCe que ça veut dire
Read-only file systemEROFSLe montage est en lecture seule volontairement : option ro dans /etc/fstab ou au montage
Input/output errorEIOLe périphérique a lâché. Le système de fichiers s'est protégé tout seul

« Read-only file system » est une décision. « Input/output error » est un accident. Le premier se corrige en changeant une option de montage. Le second signale une erreur matérielle ou de périphérique, et remonter en écriture sans rien faire d'autre ne ferait que masquer un problème qui reviendra, avec de la corruption de données à la clé.

C'est le cas simple. Le montage porte l'option ro, et il l'assume :

Fenêtre de terminal
touch /mnt/data/interdit
findmnt -o TARGET,OPTIONS /mnt/data
touch: cannot touch '/mnt/data/interdit': Read-only file system
/mnt/data ro,relatime

Le message dit Read-only file system, et findmnt confirme en affichant ro. Tout est cohérent. Cherchez l'option ro dans /etc/fstab, corrigez-la, puis remontez :

Fenêtre de terminal
mount -o remount,rw /mnt/data
findmnt -o TARGET,OPTIONS /mnt/data

Si le montage refuse de repasser en écriture alors que fstab est correct, vous n'êtes pas dans ce cas : passez au suivant.

Cas 2 : la lecture seule est subie, et vos outils vous mentent

Section intitulée « Cas 2 : la lecture seule est subie, et vos outils vous mentent »

Ici, personne n'a demandé la lecture seule. Le noyau l'a imposée parce que le périphérique a renvoyé des erreurs. C'est le comportement par défaut d'ext4 sur Debian, Ubuntu et RHEL, réglé par l'option errors=remount-ro :

Fenêtre de terminal
tune2fs -l /dev/sdb1 | grep -i 'errors behavior'
Errors behavior: Remount read-only

Ce réglage est une protection, pas une panne. Face à une erreur d'écriture, le système de fichiers a le choix entre continuer (et corrompre les données), paniquer (et arrêter la machine), ou se figer en lecture seule. La troisième option préserve ce qui peut l'être et vous laisse la main. C'est celle qui est active par défaut.

Le piège : rien de ce que vous regardez ne montre la panne

Section intitulée « Le piège : rien de ce que vous regardez ne montre la panne »

Voici l'état réel d'un serveur dont le disque vient de lâcher :

Fenêtre de terminal
touch /mnt/data/nouveau
findmnt -o TARGET,SOURCE,FSTYPE,OPTIONS /mnt/data
tune2fs -l /dev/sdb1 | grep -i 'filesystem state'
touch: cannot touch '/mnt/data/nouveau': Input/output error
TARGET SOURCE FSTYPE OPTIONS
/mnt/data /dev/mapper/disque_flakey ext4 rw,relatime
Filesystem state: clean

Lisez bien ces trois sorties. Les écritures échouent. Et pourtant :

  • findmnt affiche rw. Le montage se dit toujours en écriture. Les options affichées dans /proc/mounts n'ont pas été mises à jour par le passage en lecture seule interne du noyau.
  • tune2fs affiche clean. L'état du système de fichiers est lu sur le disque, or le noyau n'a pas pu écrire le superbloc pour le marquer en erreur, précisément parce que le disque ne répond plus. L'outil rapporte donc un état périmé.

La seule source qui dit la vérité : le journal du noyau

Section intitulée « La seule source qui dit la vérité : le journal du noyau »
Fenêtre de terminal
journalctl -k | tail -20
# ou, hors systemd :
dmesg | grep -iE 'EXT4-fs|I/O error'
EXT4-fs error (device dm-1): ext4_journal_check_start:84: Detected aborted journal
EXT4-fs (dm-1): I/O error while writing superblock
EXT4-fs (dm-1): Remounting filesystem read-only

Trois lignes, tout le diagnostic. Le noyau a rencontré une erreur d'écriture, il n'a même pas pu mettre à jour le superbloc, il a avorté le journal et remonté le système de fichiers en lecture seule. Le terme aborted journal explique aussi pourquoi vous obtenez Input/output error et non Read-only file system : tant que le journal est avorté, toute opération échoue en EIO, même celles qui devraient simplement être refusées.

Cherchez également des lignes Buffer I/O error on dev, qui pointent le périphérique fautif, et remontez la chaîne : si c'est un disque physique, smartctl -H /dev/sdX donnera son état de santé.

Un point contre-intuitif, et lourd de conséquences. Même quand le périphérique refonctionne parfaitement, le système de fichiers ne revient pas tout seul en écriture :

Fenêtre de terminal
dd if=/dev/mapper/disque_flakey of=/dev/null bs=4k count=1
touch /mnt/data/apres_hoquet
4096 bytes (4.1 kB, 4.0 KiB) copied, 1.1602e-05 s, 353 MB/s
touch: cannot touch '/mnt/data/apres_hoquet': Input/output error

Le disque lit à 353 Mo/s : il va très bien. L'écriture échoue toujours. Un mount -o remount,rw ne suffit pas dans cet état, car le journal reste avorté. Il faut démonter et réparer.

La réparation suit trois temps, dans cet ordre. Traiter d'abord la cause matérielle si elle existe : réparer un système de fichiers sur un disque qui meurt ne fait que retarder l'échéance.

On ne répare jamais un système de fichiers monté. Si le démontage est refusé parce que des processus tiennent des fichiers ouverts, identifiez-les avec lsof +f -- /mnt/data, arrêtez-les, et n'utilisez umount -l (démontage paresseux) qu'en dernier recours.

Fenêtre de terminal
umount /mnt/data

Si le système de fichiers concerné est la racine, le démontage est impossible : il faut redémarrer sur un système de secours, ou forcer une vérification au prochain démarrage. Voir Arrêter, redémarrer, récupérer.

Fenêtre de terminal
fsck.ext4 -fy /dev/sdb1 ; echo "exit=$?"
e2fsck 1.47.2 (1-Jan-2025)
/dev/mapper/disque_flakey: recovering journal
Pass 1: Checking inodes, blocks, and sizes
Pass 5: Checking group summary information
Free inodes count wrong (32756, counted=32755).
Fix? yes
***** FILE SYSTEM WAS MODIFIED *****
exit=1

-f force la vérification même si le système de fichiers se croit propre (souvenez-vous qu'il se dit clean), et -y répond oui à toutes les questions.

3. Remonter et prouver que l'écriture est revenue

Section intitulée « 3. Remonter et prouver que l'écriture est revenue »
Fenêtre de terminal
mount /dev/sdb1 /mnt/data
findmnt -o TARGET,SOURCE,FSTYPE,OPTIONS /mnt/data
echo "reparation" > /mnt/data/verif.txt && echo "ecriture de nouveau possible"
/mnt/data /dev/mapper/disque_flakey ext4 rw,relatime
ecriture de nouveau possible

Constater l'absence d'erreur ne suffit pas : écrivez réellement un fichier. C'est la seule preuve que le service qui tournait sur ce montage pourra fonctionner.

SymptômeCause probableVérificationCorrection
Read-only file systemMontage ro volontairefindmnt -o OPTIONS affiche roCorriger /etc/fstab, mount -o remount,rw
Input/output errorErreur disque, journal avortéjournalctl -k | grep EXT4-fsDémonter, fsck -fy, remonter
findmnt dit rw mais rien ne s'écritRemount-ro interne après erreurLe journal du noyau, jamais findmntfsck après démontage
tune2fs dit clean alors que tout casseSuperbloc non écrit (disque muet)journalctl -kNe pas se fier à tune2fs en pleine panne
remount,rw ne change rienJournal avortéjournalctl -k : aborted journalDémonter et fsck, un remount ne suffit pas
umount refusé (target is busy)Processus tenant des fichiers ouvertslsof +f -- /mnt/dataArrêter les processus, umount -l en dernier recours
La racine / est en lecture seuleDisque système en erreurConsole, journalctl -kRedémarrer en mode secours

Un errors=remount-ro qui se déclenche est un symptôme, pas la maladie. Deux réflexes évitent la récidive. Surveiller la santé des disques avec smartctl et une supervision qui remonte les erreurs d'entrée-sortie : le disque a presque toujours donné des signes avant de lâcher. Et surveiller le journal du noyau : les lignes Buffer I/O error apparaissent souvent des jours avant la panne franche, sans qu'aucune application ne s'en plaigne encore.

Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

6 questions
6 min.
70% requis

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre

  • Le message d'erreur désigne la cause : Read-only file system (EROFS) est un montage ro voulu, Input/output error (EIO) est une panne subie.
  • errors=remount-ro est une protection, pas un bug : ext4 se fige pour éviter de corrompre vos données.
  • findmnt peut afficher rw alors que le système de fichiers est bloqué. Les options de montage ne sont pas mises à jour par le passage en lecture seule interne.
  • tune2fs peut afficher clean pendant la panne : il lit le superbloc sur un disque qui ne répond plus.
  • Le journal du noyau est la seule source fiable : journalctl -k ou dmesg, et cherchez EXT4-fs error, aborted journal, Buffer I/O error.
  • Le disque qui refonctionne ne répare pas le montage. Il faut démonter, fsck, remonter.
  • fsck qui renvoie 1 a corrigé des erreurs : c'est un succès, pas un échec.
  • Prouvez la réparation en écrivant un fichier, ne vous contentez pas d'une absence de message d'erreur.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn