L’alimentation de mon NAS lâche en pleine opération sur son RAID1. Le réflexe serait d’attendre une nouvelle alim pour reprendre. Erreur : le NAS est mort, mais ses disques et ses données ne le sont pas, et le RAID n’a rien qui le lie à cette machine. Je sors les deux disques, je les branche sur mon PC de bureau via des adaptateurs USB-SATA, et je continue tout le travail de stockage depuis là.
L’identité d’un array est sur les disques, pas sur la machine
C’est le principe qui rend tout ça possible. Avec les métadonnées md 1.2, chaque partition membre porte un superbloc qui contient l’UUID de l’array, le nom, le rôle du membre, la taille, le layout — tout. N’importe quel Linux relit ces superblocs et reconstitue l’array par UUID. Rien n’est stocké dans la machine d’origine.
Concrètement, il suffit de brancher les disques : udev déclenche l’auto-assemblage.
$ cat /proc/mdstat
md125 : active raid1 sda2[3]
8379392 blocks super 1.2 [2/1] [_U]
md126 : active (auto-read-only) raid1 sda3[2]
...
Les numéros md12x ne sont pas ceux du NAS — normal, ils sont attribués dynamiquement. On repère les arrays par leur rôle/UUID, pas par leur numéro :
lsblk -o NAME,SIZE,FSTYPE,LABEL # les LABEL portent hostname:root / :swap / :data
sudo mdadm --detail /dev/md125 | grep -E "UUID|Name|State"
Ce qu’on peut faire, disques posés sur le bureau
Une fois l’array assemblé, on a accès à toute la boîte à outils md/ext4, exactement comme sur la machine d’origine :
Réparer un filesystem malmené par des arrêts brutaux :
sudo fsck.ext4 -n -f /dev/md125 # d'abord en lecture seule pour voir
sudo fsck.ext4 -y -f /dev/md125 # puis réparation
Remplacer un membre défaillant et resynchroniser :
sudo mdadm --add /dev/md125 /dev/sdb2
sudo mdadm --readwrite /dev/md125 # démarre la recovery si l'array est auto-read-only
Agrandir l’array vers des disques plus gros, puis le filesystem :
sudo mdadm --grow /dev/md125 --size=max
sudo resize2fs /dev/md125
Extraire des données sans rien modifier, en montant en lecture seule :
sudo mdadm --assemble --readonly /dev/md0 /dev/sdX2
sudo mount -o ro /dev/md0 /mnt/rescue
Quand tout est fait, on arrête proprement les arrays avant de débrancher (flush + marquage clean), puis on remet les disques dans la machine réparée — où ils se réassemblent par UUID, sans aucune reconfiguration :
sudo mdadm --stop /dev/md125 /dev/md126 /dev/md127
sync
Deux ou trois pièges
- Array « inactive » avec un seul disque : un membre seul d’un miroir n’est pas démarré d’office (marqué
(S)spare).sudo mdadm --run /dev/mdXl’active en dégradé. - Auto-read-only : après assemblage, un array peut être en
auto-read-only; il ne fera pas de recovery vers un nouveau membre tant qu’on n’a pas faitmdadm --readwrite. - Adaptateurs USB-SATA : parfaits pour lire/
fsck/resync, mais tous les ponts USB ne se valent pas en écriture. Faites un test de lecture (dd … of=/dev/null) avant de compter dessus pour un gros resync, et gardez une copie de secours des données critiques. - Ne jamais raisonner par numéro
md: ils changent de machine en machine. L’UUID est la seule référence stable.
Lessons learned
- Une panne matérielle (alim, carte mère) n’immobilise pas un RAID mdadm. Les disques sont autonomes ; on récupère et on répare ailleurs, tout de suite.
- L’array s’assemble par UUID, pas par machine, pas par contrôleur, pas par numéro md.
- Des adaptateurs USB-SATA suffisent pour transformer n’importe quel PC en station de réparation RAID :
fsck, remplacement de disque, resync,--grow/resize2fs. - Monter en lecture seule (
--assemble --readonly+mount -o ro) est le réflexe pour extraire des données sans risquer d’écrire sur la seule copie survivante. mdadm --stopavant de débrancher : on marque l’array propre, il se réassemblera sans accroc au retour dans la machine d’origine.