Guide des technologies

Remplacement d'un disque dur défaillant dans un RAID1 (mdadm)

6 min read Administration système Mis à jour 11 Oct 2025
Remplacer un disque RAID1 avec mdadm
Remplacer un disque RAID1 avec mdadm

Ce guide explique comment simuler une panne de disque, remplacer un disque défaillant dans un RAID1 géré par mdadm, recopier la table de partitions, réintégrer le disque neuf et réinstaller le chargeur d’amorçage. Suit un playbook opérationnel, une checklist, des alternatives et un arbre de décision pour choisir la bonne stratégie.

Important : adaptez /dev/sda et /dev/sdb à votre environnement. Sauvegardez toujours les données critiques avant toute opération sur les partitions.

Objectif et variantes de recherche

  • Remplacer un disque RAID1 avec mdadm
  • Répliquer la table de partitions sur un disque neuf
  • Remettre en service un dispositif RAID dégradé
  • Réinstaller GRUB après remplacement de disque

8 Tests

Simulons maintenant une panne de disque. Peu importe si vous sélectionnez /dev/sda ou /dev/sdb. Dans cet exemple on suppose que /dev/sdb est défaillant.

Pour simuler la panne, vous pouvez soit arrêter la machine et retirer physiquement /dev/sdb, soit le retirer « à chaud » avec mdadm :

mdadm --manage /dev/md0 --fail /dev/sdb1
mdadm --manage /dev/md1 --fail /dev/sdb5

mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm --manage /dev/md1 --remove /dev/sdb5

Ensuite arrêtez le système :

shutdown -h now

Remplacez le disque par un nouveau /dev/sdb (si vous simuliez /dev/sda, remettez les disques dans les emplacements et connectez le nouveau disque en tant que /dev/sdb) puis démarrez. Le système devrait démarrer sans problème.

Maintenant exécutez :

cat /proc/mdstat

et vous devriez voir un array dégradé :

root@server1:~# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sda5[2]
4989940 blocks super 1.2 [2/1] [U_]

md0 : active raid1 sda1[2]
248820 blocks super 1.2 [2/1] [U_]

unused devices: 
root@server1:~#

La sortie de :

fdisk -l

devrait ressembler à l’exemple suivant (ci-dessous). Ces informations confirment que /dev/sdb est vierge ou n’a pas de table de partitions valide :

root@server1:~# fdisk -l

Disk /dev/sda: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0003717c

Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          32      248832   fd  Linux raid autodetect
Partition 1 does not end on cylinder boundary.
/dev/sda2              32         653     4990977    5  Extended
Partition 2 does not end on cylinder boundary.
/dev/sda5              32         653     4990976   fd  Linux raid autodetect

Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/sdb doesn't contain a valid partition table

Disk /dev/md0: 254 MB, 254791680 bytes
2 heads, 4 sectors/track, 62205 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/md0 doesn't contain a valid partition table

Disk /dev/md1: 5109 MB, 5109698560 bytes
2 heads, 4 sectors/track, 1247485 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/md1 doesn't contain a valid partition table

Disk /dev/dm-0: 4844 MB, 4844421120 bytes
255 heads, 63 sectors/track, 588 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/dm-0 doesn't contain a valid partition table

Disk /dev/dm-1: 264 MB, 264241152 bytes
255 heads, 63 sectors/track, 32 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/dm-1 doesn't contain a valid partition table
root@server1:~#

Copier la table de partitions

Copiez la table de partitions de /dev/sda vers /dev/sdb :

sfdisk -d /dev/sda | sfdisk --force /dev/sdb

Exemple de sortie :

root@server1:~# sfdisk -d /dev/sda | sfdisk --force /dev/sdb
Checking that no-one is using this disk right now ...
Warning: extended partition does not start at a cylinder boundary.
DOS and Linux will interpret the contents differently.
OK

Disk /dev/sdb: 652 cylinders, 255 heads, 63 sectors/track

sfdisk: ERROR: sector 0 does not have an msdos signature
/dev/sdb: unrecognized partition table type
Old situation:
No partitions found
New situation:
Units = sectors of 512 bytes, counting from 0

Device Boot    Start       End   #sectors  Id  System
/dev/sdb1   *      2048    499711     497664  fd  Linux raid autodetect
/dev/sdb2        501758  10483711    9981954   5  Extended
/dev/sdb3             0         -          0   0  Empty
/dev/sdb4             0         -          0   0  Empty
/dev/sdb5        501760  10483711    9981952  fd  Linux raid autodetect
Warning: partition 1 does not end at a cylinder boundary
Successfully wrote the new partition table

Re-reading the partition table ...

If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes:  dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)
root@server1:~#

Nettoyer les méta-données RAID

Après avoir copié la table, supprimez les éventuels en-têtes RAID résiduels sur les partitions du disque neuf :

mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb5

Puis ajoutez les partitions au RAID :

mdadm -a /dev/md0 /dev/sdb1
mdadm -a /dev/md1 /dev/sdb5

Vérifiez l’état avec :

cat /proc/mdstat

Exemple pendant la reconstruction :

root@server1:~# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdb5[3] sda5[2]
4989940 blocks super 1.2 [2/1] [U_]
[========>............]  recovery = 44.7% (2233024/4989940) finish=0.2min speed=159501K/sec

md0 : active raid1 sdb1[3] sda1[2]
248820 blocks super 1.2 [2/2] [UU]

unused devices: 
root@server1:~#

Attendez la fin de la synchronisation :

root@server1:~# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdb5[3] sda5[2]
4989940 blocks super 1.2 [2/2] [UU]

md0 : active raid1 sdb1[3] sda1[2]
248820 blocks super 1.2 [2/2] [UU]

unused devices: 
root@server1:~#

Réinstaller le chargeur d’amorçage

Installez GRUB sur les deux disques pour garantir que la machine démarre même si l’un des disques échoue au démarrage :

grub-install /dev/sda
grub-install /dev/sdb

C’est terminé. Vous venez de remplacer un disque dur défaillant dans votre RAID1.

Playbook opérationnel (SOP) — Remplacement disque RAID1

  1. Préparation
    • Informer les équipes et planifier une fenêtre si nécessaire.
    • Vérifier sauvegardes récentes.
    • Noter l’ordre des disques (/dev/sda, /dev/sdb) et l’état des arrays.
  2. Simulation ou retrait
    • Marquer le disque comme défaillant et le retirer du RAID avec mdadm, ou arrêter et retirer physiquement.
  3. Remplacement matériel
    • Insérer le disque neuf.
  4. Recopie table de partitions
    • Utiliser sfdisk -d | sfdisk –force.
  5. Nettoyage et ajout
    • mdadm –zero-superblock puis mdadm -a.
  6. Surveillance
    • Vérifier /proc/mdstat jusqu’à [UU].
  7. Finalisation
    • Réinstaller GRUB sur les deux disques.
  8. Validation
    • Redémarrer et vérifier que le RAID est sain.

Checklist selon rôle

Opérateur

  • Confirmer sauvegardes
  • Documenter les noms de périphériques
  • Exécuter commandes de fail/remove
  • Insérer nouveau disque
  • Copier table de partitions
  • Ajouter au RAID
  • Surveiller reconstruction
  • Réinstaller GRUB

Administrateur

  • Vérifier intégrité des données après resync
  • Mettre à jour la documentation d’inventaire
  • Vérifier alerting et monitoring

Support matériel

  • Vérifier câble, backplane et connectivité
  • Remplacer disque si défaillance physique confirmée

Arbre de décision rapide (Mermaid)

flowchart TD
  A[RAID dégradé ?] -->|Oui| B{Disque visible par le BIOS ?}
  B -->|Non| C[Tester câble / backplane]
  C --> D[Remplacer câble ou backplane]
  B -->|Oui| E{Partition table présente ?}
  E -->|Non| F[Copier table de /dev/sdX]
  E -->|Oui| G[Zero-superblock et ajouter au RAID]
  G --> H[Attendre resync puis réinstaller GRUB]
  A -->|Non| I[Surveiller, pas d'action]

Contre-exemples et situations où cela échoue

  • Disque neuf incompatible (taille inférieure à celle attendue) : sfdisk peut écrire une table de partitions qui ne tient pas sur le disque; vérifiez la capacité réelle.
  • Contrôleur RAID matériel actif : ces commandes s’appliquent au RAID logiciel (mdadm). Sur contrôleur matériel, utilisez l’outil fourni par le fabricant.
  • Table de partitions corrompue sur le disque source : exporter une table corrompue propage l’erreur. Vérifiez la table source avant la copie.
  • Partitionnement basé sur GPT et disque initial en MBR : adapter la méthode pour GPT (sgdisk ou parted).

Alternatives

  • Utiliser une gestion de volumes (LVM) au-dessus du RAID pour faciliter le redimensionnement et la mobilité des volumes.
  • Remplacement à chaud via backplane hot-swap et orchestration automatisée (Ansible playbooks pour mdadm).
  • Migration vers RAID matériel si votre infrastructure exige une gestion matérielle centralisée.

Mini-méthodologie — Pourquoi cette approche

  • mdadm gère les métadonnées RAID et permet la reconstruction en ligne.
  • Copier la table de partitions garantit que les offsets et types de partitions correspondent, évitant des erreurs d’alignement.
  • Zero-superblock élimine toute méta-information RAID résiduelle qui empêcherait la réintégration.

Critères d’acceptation

  • /proc/mdstat montre tous les arrays avec l’état [UU].
  • Les commandes mount et lsblk confirment que les volumes sont accessibles.
  • GRUB installé sur les deux disques : grub-install ne renvoie pas d’erreur.
  • Aucune erreur dans les logs dmesg ou syslog liés aux disques après resynchronisation.

1‑ligne glossaire

  • mdadm : utilitaire Linux pour gérer les ensembles RAID logiciels.
  • superblock : métadonnée RAID écrite sur une partition pour identifier son appartenance à un array.
  • sfdisk : outil non interactif pour lire/écrire les tables de partitions DOS/MBR.
  • GRUB : chargeur d’amorçage GNU utilisé pour démarrer le système.

Notes de sécurité et conformité

  • Ne jamais exposer des commandes d’effacement (dd, wipe) sur un disque en production sans sauvegarde.
  • Si des données personnelles sont présentes et soumises au RGPD, conservez les journaux d’intervention et informez la personne responsable de la protection des données selon la politique interne.

Résumé

Remplacer un disque dans un RAID1 logiciel consiste à : marquer le disque défaillant, remplacer le matériel, recopier la table de partitions, nettoyer les superblocks éventuels, ajouter le disque au RAID, attendre la reconstruction et réinstaller le chargeur d’amorçage. Suivez la checklist, vérifiez les critères d’acceptation et adaptez la procédure si vous utilisez GPT ou un contrôleur RAID matériel.

9 Liens

Important : Ce guide est une procédure opérationnelle générale. Testez la procédure sur un environnement non critique avant toute exécution sur des systèmes de production.

Auteur
Édition

Matériaux similaires

Installer ADB et Fastboot sur Mac
Tutoriel

Installer ADB et Fastboot sur Mac

Réparer l'erreur system repair pending sur Windows
Dépannage Windows

Réparer l'erreur system repair pending sur Windows

Créer une appli Android sans coder — 8 outils
Mobile

Créer une appli Android sans coder — 8 outils

Restaurer une barre latérale sur Windows 11/10
Windows

Restaurer une barre latérale sur Windows 11/10

Récupérer fichiers supprimés Teams
Support technique

Récupérer fichiers supprimés Teams

Apps iPhone payantes gratuites sans jailbreak
iOS

Apps iPhone payantes gratuites sans jailbreak