Remplacer un disque dur défaillant dans un RAID1 : test et procédure
Simulez une panne de disque, remplacez le disque, recopiez la table de partitions, nettoyez les superblocs RAID puis réintégrez le disque avec mdadm. Synchronisez et réinstallez le chargeur d’amorçage sur les deux disques. Cette procédure couvre les vérifications, les commandes et les cas d’échec courants.
Contexte
Ce guide explique comment tester et remplacer un disque dur dans un ensemble RAID1 logiciel (mdadm) sous Linux. Il suppose un volume RAID1 composé de /dev/sda et /dev/sdb et montre la procédure complète, depuis la simulation de la panne jusqu’à la remise en état et la réinstallation du chargeur d’amorçage.
Définition rapide : mdadm est l’outil de gestion des ensembles RAID logiciels Linux. RAID1 réplique les données sur deux disques pour tolérance de panne.
1. Simulation d’une panne
Vous pouvez simuler une panne en retirant physiquement le disque ou en marquant la partition comme défaillante puis en la retirant du raid (soft-remove). Dans cet exemple, on suppose que /dev/sdb est le disque défaillant.
Exemples de commandes pour marquer et retirer les partitions RAID :
mdadm --manage /dev/md0 --fail /dev/sdb1
mdadm --manage /dev/md1 --fail /dev/sdb2
mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm --manage /dev/md1 --remove /dev/sdb2
Pour arrêter le système (option physique) :
shutdown -h now
Remplacez le disque physique par un neuf puis redémarrez la machine. Si vous avez simulé la panne en retirant /dev/sda, replacez le nouveau disque à la place de /dev/sda et connectez l’ancien/similaire comme /dev/sdb selon votre configuration matérielle. Le système doit démarrer en mode dégradé.
2. Vérifier l’état du RAID
Après le démarrage, vérifiez l’état :
cat /proc/mdstat
Exemple de sortie :
[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sda1[0]
104320 blocks [2/1] [U_]
md1 : active raid1 sda2[0]
10377920 blocks [2/1] [U_]
unused devices:
[root@server1 ~]#
Vérifiez aussi les disques et les partitions :
fdisk -l
Exemple de sortie (à lire attentivement pour vérifier quels disques ont une table de partitions valide) :
[root@server1 ~]# fdisk -l
Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 fd Linux raid autodetect
/dev/sda2 14 1305 10377990 fd Linux raid autodetect
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdb doesn't contain a valid partition table
Disk /dev/md1: 10.6 GB, 10626990080 bytes
2 heads, 4 sectors/track, 2594480 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Disk /dev/md1 doesn't contain a valid partition table
Disk /dev/md0: 106 MB, 106823680 bytes
2 heads, 4 sectors/track, 26080 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Disk /dev/md0 doesn't contain a valid partition table
[root@server1 ~]#
3. Recopier la table de partitions
Si le nouveau disque (/dev/sdb) n’a pas de table de partitions, recopiez celle de /dev/sda sur /dev/sdb avec sfdisk :
sfdisk -d /dev/sda | sfdisk /dev/sdb
Si sfdisk signale une erreur liée à l’ancienne signature, utilisez –force :
sfdisk -d /dev/sda | sfdisk --force /dev/sdb
Exemple d’échange :
[root@server1 ~]# sfdisk -d /dev/sda | sfdisk /dev/sdb
Checking that no-one is using this disk right now ...
OK
Disk /dev/sdb: 1305 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 * 63 208844 208782 fd Linux raid autodetect
/dev/sdb2 208845 20964824 20755980 fd Linux raid autodetect
/dev/sdb3 0 - 0 0 Empty
/dev/sdb4 0 - 0 0 Empty
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 ~]#
Important : vérifiez que les partitions copiées correspondent bien en taille et en type.
4. Nettoyer d’éventuels superblocs RAID et ajouter le disque
Avant d’ajouter le disque au RAID, effacez tout ancien superbloc RAID résiduel :
mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb2
Puis ajoutez les partitions au RAID :
mdadm -a /dev/md0 /dev/sdb1
mdadm -a /dev/md1 /dev/sdb2
Vérifiez la synchronisation en cours :
cat /proc/mdstat
Exemple de sortie pendant la reconstruction :
[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[1] sda1[0]
104320 blocks [2/2] [UU]
md1 : active raid1 sdb2[2] sda2[0]
10377920 blocks [2/1] [U_]
[======>..............] recovery = 32.3% (3360768/10377920) finish=1.5min speed=74238K/sec
unused devices:
[root@server1 ~]#
Attendez la fin de la synchronisation. Quand elle est terminée, les deux ensembles doivent indiquer [UU] :
[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[1] sda1[0]
104320 blocks [2/2] [UU]
md1 : active raid1 sdb2[1] sda2[0]
10377920 blocks [2/2] [UU]
unused devices:
[root@server1 ~]#
5. Réinstaller le chargeur d’amorçage (GRUB)
Pour être sûr que le système peut démarrer si l’un des disques échoue, installez GRUB sur les deux disques :
grub
Dans l’invite GRUB, exécutez :
root (hd0,0)
setup (hd0)
root (hd1,0)
setup (hd1)
quit
Remarque : selon la version de GRUB (grub legacy vs grub2), la procédure pour installer le chargeur diffère. Ici l’exemple utilise l’ancienne interface GRUB. Pour grub2, utilisez grub-install /dev/sda et grub-install /dev/sdb.
6. Contre-exemples et cas où la procédure peut échouer
- Table de partitions irréconciliable : si /dev/sda a des partitions non standard (ex : GPT avec offsets différents), sfdisk peut échouer.
- Différences de taille physique : un nouveau disque légèrement plus petit empêche la copie des partitions. Vérifiez la capacité réelle en octets.
- Disque avec secteurs défectueux : la synchronisation peut échouer ou être très lente.
- Mauvaise numérotation des disques : selon l’ordre de détection, sda et sdb peuvent être inversés. Vérifiez les UUID et les numéros de périphériques.
Que faire si la reconstruction échoue : vérifier les logs (dmesg, /var/log/messages), relire les commandes, re-tenter la suppression des superblocs et refaire l’ajout. Si la partition source est corrompue, restaurez depuis sauvegarde.
7. Approches alternatives
- Utiliser dd pour cloner la table de partitions ou même le disque entier : dd if=/dev/sda of=/dev/sdb bs=512 count=1 (attention aux conséquences et vérifiez la taille).
- Pour GPT, utiliser sgdisk –backup / –load-backup afin de gérer les tables GPT.
- Pour grub2 : après reconstruction, lancer grub-install –recheck /dev/sda et /dev/sdb puis update-grub.
- Si vous utilisez LVM au-dessus du RAID, adaptez la procédure pour réactiver les volumes physiques.
8. Checklist par rôle
Administrateur système
- Vérifier l’état du RAID (cat /proc/mdstat).
- Copier la table de partitions et vérifier les tailles.
- Effacer les superblocs et réintégrer le disque.
- Lancer et surveiller la reconstruction.
- Réinstaller GRUB sur chaque disque.
Opérateur / Technicien matériel
- Remplacer le disque physique et s’assurer des connexions.
- Identifier correctement le disque neuf (LED, slot, numéro logique).
- Reporter toute anomalie (bruit, erreurs SMART).
9. Critères d’acceptation
- Le RAID indique [UU] pour tous les ensembles.
- Le système démarre correctement si l’on débranche l’un des disques.
- GRUB est installé sur les deux disques et chaque disque est bootable indépendamment.
- Les partitions sur le disque remplacé correspondent en taille et en type à l’original.
10. Fiche pratique : commandes essentielles
- Vérifier l’état du RAID : cat /proc/mdstat
- Marquer comme défaillant : mdadm –manage /dev/mdX –fail /dev/sdYpZ
- Retirer du RAID : mdadm –manage /dev/mdX –remove /dev/sdYpZ
- Copier table de partitions : sfdisk -d /dev/sda | sfdisk /dev/sdb
- Zéroter superbloc : mdadm –zero-superblock /dev/sdYpZ
- Ajouter au RAID : mdadm -a /dev/mdX /dev/sdYpZ
- Réinstaller GRUB (legacy) : utiliser l’interface grub
- Réinstaller GRUB2 : grub-install /dev/sda && grub-install /dev/sdb && update-grub
11. Boîte à outils mentale et heuristiques
- Toujours vérifier deux fois quel périphérique est /dev/sda ou /dev/sdb avant d’écrire la table de partitions.
- Préférer les UUID ou labels dans /etc/fstab pour réduire la dépendance à la numérotation des disques.
- Pendant la reconstruction, évitez les opérations d’E/S intensives sur le serveur pour accélérer la rebuild.
12. Résumé
Vous avez simulé une panne, remplacé un disque, recopié la table de partitions, effacé d’anciens superblocs, réintégré le disque à l’ensemble RAID, attendu la reconstruction et réinstallé le chargeur d’amorçage. Vérifiez toujours l’intégrité finale et la capacité de démarrage sur chaque disque.
Important : adaptez la procédure à votre version de GRUB et à la table de partitions (MBR vs GPT). Sauvegardez les données critiques avant toute modification de bas niveau.
Liens
- The Software-RAID Howto: http://tldp.org/HOWTO/Software-RAID-HOWTO.html
- CentOS: http://www.centos.org/