Pour diagnostiquer un disque NAS dont je n’arrive pas à booter, je le sors et le branche sur mon PC via un adaptateur USB-SATA générique acheté à 12 €. Sur le PC, le disque s’auto-assemble en RAID dégradé (md126 = sda2 du NAS), je peux mounter en read-only, lire les fichiers : tout semble parfait.
Puis je tente de mounter en read-write pour fixer la config GRUB :
$ sudo mdadm --readwrite /dev/md126
mdadm: failed to set writable for /dev/md126: Device or resource busy
$ sudo mount /dev/md126 /mnt/nas-root
mount: /mnt/nas-root: impossible de lire le superbloc à l'adresse /dev/md126.
Et dans dmesg :
md: super_written gets error=-5
Buffer I/O error on dev md126, logical block 0, async page read
EXT4-fs (md126): unable to read superblock
Le superblock devient illisible après la tentative d’écriture. Avant l’écriture, tout marchait.
Diagnostic
Hypothèse 1 : disque physique défectueux (secteur 0 cassé). Test :
$ sudo dd if=/dev/sdb of=/dev/null bs=1M count=100
100+0 records in
112 MB/s
✓ La lecture brute du disque marche à plein régime, pas de bad sector signalé.
Hypothèse 2 : l’adaptateur USB-SATA simule l’écriture sans la propager. Test :
$ sudo dd if=/dev/zero of=/dev/sdb bs=512 count=1 seek=999999 conv=notrunc
$ sudo dd if=/dev/sdb skip=999999 bs=512 count=1 | xxd | head
00000000: 0102 ... (= ce qu'il y avait avant, pas du \0)
❌ L’adaptateur acquitte l’écriture mais ne la propage pas au disque. Sur certaines zones du disque, ou via certaines paths d’I/O (mdadm superblock update notamment), les écritures sont silencieusement perdues.
C’est un comportement classique des chips JMicron / ASMedia / Realtek bas de gamme : ils gèrent mal les commandes ATA non-standard et préfèrent acquitter pour éviter les timeouts.
Workaround
sudo mdadm --stop /dev/md126
sudo mdadm --assemble --readonly /dev/md126 /dev/sdb2
sudo mount -o ro,noload /dev/md126 /mnt/nas-root
Avec --readonly et noload, mdadm et ext4 ne touchent jamais le disque en écriture. Lecture parfaite.
Pour les modifications, préparer un script et l’appliquer sur le NAS lui-même (SATA natif, pas USB).
Lessons learned
- Adaptateurs USB-SATA <20 € : fiables en lecture, méfiance en écriture critique (superblocks, GPT, MBR).
mdadm --readonly+mount ro,noload: procédure safe pour inspecter un RAID dégradé.dd zéros + skip + dd back: test simple pour vérifier qu’un adaptateur écrit vraiment.super_written gets error=-5= pas d’ack sur l’écriture du superblock RAID. Souvent l’adaptateur, pas le disque.