mai 312006
 

Par Mino, mardi 25 avril 2006 à 14:37

Si vous arrivez sur cette page vous venez :
- soit de crasher un disque de votre raid1
- soit de faire un grosse bétise : changer la table de partitions d’un des disques de votre raid1 par exemple

Ne vous inquiétez pas, essuyez les gouttes de sueure qui perlent sur votre front, ce n’est pas grave suivez les instructions qui suivent et tout va rentrer dans l’ordre…

Tout au long de cet HOWTO :

- j’utiliserai mdadm (en standard sur toutes les distribution)
- je considérerai que je n’ai que 2 arrays md0 (sda1 et sdb1) et md1 (sda2 et sdb2) mais vous devez faire les actions pour tous vos array pour chacun de vos arrays
- je considérerai que c’est /dev/sdb qui est crashé.

Vérification

Tout d’abord on vérifie ce que le systeme en pense :


#cat /proc/mdstat

Si le systeme n’a rien détecté (c’est possible si vous avez modifé la table partitions de sdb par erreur) et qu’il continue à marquer les partitions qui ont disparues comme actives empressez vous de les supprimer des différents arrays avec une ligne du style :


#mdadm --manage --set-faulty /dev/md0 /dev/sdb1
#mdadm --manage --set-faulty /dev/md1 /dev/sdb2

Cette première commande (normalement optionnel) va indiquer au système que les disques /dev/sdb1 et /dev/sdb2 ne sont plus fiables.

Supprimer

ensuite on supprime ces disques des arrays :


#mdadm /dev/md0 -r /dev/sdb1
#mdadm /dev/md1 -r /dev/sdb2

voila nos 2 arrays ne contiennent plus qu’un disque.

Remplacer

maintenant on remplace le disque defectueux et on reboot (dans le cas d’un crash physique du disque dur)

un ‘cat /proc/mdstat’ nous montre nos arrays qui sont en mode dégradé (sur un disque), il faut donc remonter notre deuxieme disque. Tout d’abord on recopie la table de partitions du disque valide sur le 2nd disque pour ce faire une simple ligne de commande suffit :


#sfdisk --dump /dev/sda | sfdisk /dev/sdb

voila notre disque /dev/sdb contient la même table de partitions que /dev/sda.

Reconstruire

Il ne nous reste plus qu’a reconstruire notre raid. pour cela :


#mdadm /dev/md0 -a /dev/sdb1
#mdadm /dev/md1 -a /dev/sdb2

Puis on attend que la reconstruction s’acheve. Pour vérifier l’état d’avancement vous pouvez faire un ‘cat /proc/mdstat’ de temps en temps.

Liens utiles

The Software-RAID HOWTO

Page de man mdstat

Exemple d’incident Raid5

 Technologic  Commentaires fermés
nov 182005
 

Un matin
Un email de démon mdadm annonçant une erreur dans la grappe raid5


This is an automatically generated mail message from mdadm
running on hoth

A Fail event had been detected on md device /dev/md6.

Faithfully yours, etc.

La commande dmesg lancé depuis le compte rot m’informe que le disque sdc a des secteurs déffectueux.


[22171490.224000] SCSI error : <4 0 0 0> return code = 0x8000002
[22171490.224000] sdc: Current: sense key: Medium Error
[22171490.224000] Additional sense: No additional sense information
[22171490.224000] Info fld=0x73350b0
[22171490.224000] end_request: I/O error, dev sdc, sector 120803504
[22171490.224000] raid5: Disk failure on sdc, disabling device. Operation continuing on 5 devices
[22171490.228000] RAID5 conf printout:
[22171490.228000] --- rd:6 wd:5 fd:1
[22171490.228000] disk 0, o:0, dev:sdc
[22171490.228000] disk 1, o:1, dev:sdd
[22171490.228000] disk 2, o:1, dev:sde
[22171490.228000] disk 3, o:1, dev:sdf
[22171490.228000] disk 4, o:1, dev:sdg
[22171490.228000] disk 5, o:1, dev:sdh
[22171490.240000] RAID5 conf printout:
[22171490.240000] --- rd:6 wd:5 fd:1
[22171490.240000] disk 1, o:1, dev:sdd
[22171490.240000] disk 2, o:1, dev:sde
[22171490.240000] disk 3, o:1, dev:sdf
[22171490.240000] disk 4, o:1, dev:sdg
[22171490.240000] disk 5, o:1, dev:sdh
[22171490.240000] RAID5 conf printout:
[22171490.240000] --- rd:6 wd:5 fd:1
[22171490.240000] disk 0, o:1, dev:sdi
[22171490.240000] disk 1, o:1, dev:sdd
[22171490.240000] disk 2, o:1, dev:sde
[22171490.240000] disk 3, o:1, dev:sdf
[22171490.240000] disk 4, o:1, dev:sdg
[22171490.240000] disk 5, o:1, dev:sdh
[22171490.240000] md: syncing RAID array md6
[22171490.240000] md: minimum _guaranteed_ reconstruction speed: 1000 KB/sec/disc.
[22171490.240000] md: using maximum available idle IO bandwith (but not more than 200000 KB/sec) for reconstruction.
[22171490.240000] md: using 128k window, over a total of 293036096 blocks.

Je vérifie que la reconstruction automatique du raid avec le disque de backup à bien débuté :


# cat /proc/mdstat

Le reconstruction ayant bien débuté je retire le disque en erreur


# mdadm /dev/md6 --remove /dev/sdc

Je lance en suite un test de lecture bit à bit sur l’itégratilité du disque


# pv /dev/sdc > /dev/null
pv: (stdin): read failed: Input/output error ] 20% ETA 1:05:55
57.6GB 0:17:07 [57.4MB/s] [=============> ] 20% ETA 1:05:55

Input/output error !
La lecture à échoué à 20% du disque. Pas de doute il y a un problème matériel avec ce disques.

J’utilise de nouveau la commande dmesg, Le disque sdc à effectivement des secteurs déffectueux.


[22263951.048000] SCSI error : <4 0 0 0> return code = 0x8000002
[22263951.048000] sdc: Current: sense key: Medium Error
[22263951.048000] Additional sense: No additional sense information
[22263951.048000] Info fld=0x7335095
[22263951.048000] end_request: I/O error, dev sdc, sector 120803472
[22263951.048000] Buffer I/O error on device sdc, logical block 15100434
[22263954.820000] SCSI error : <4 0 0 0> return code = 0x8000002
[22263954.820000] sdc: Current: sense key: Medium Error
[22263954.820000] Additional sense: No additional sense information
[22263954.820000] Info fld=0x73350a3
[22263954.820000] end_request: I/O error, dev sdc, sector 120803488
[22263954.820000] Buffer I/O error on device sdc, logical block 15100436
[22263962.384000] SCSI error : <4 0 0 0> return code = 0x8000002
[22263962.384000] sdc: Current: sense key: Medium Error
[22263962.384000] Additional sense: No additional sense information
[22263962.384000] Info fld=0x73350b0
[22263962.384000] end_request: I/O error, dev sdc, sector 120803504
[22263962.384000] Buffer I/O error on device sdc, logical block 15100438

Je lancer alors une ecriture bit à bit sur l’intégalité du disque. Ce la va forcer le firmware du disque à enregistrer les secteurs en erreur à les ajouter à sa liste d’exclusion. Si cela échoue c’est que le disque à plus que quelque secteur déffectueux mais un vrais problème mécanique (ou un firmware bogué)


# pv /dev/zero > /dev/sdc
#pv: write failed: No space left on device <=> ]
#

Et voila : No space left on device. Le disque à été remplis dans son intégralité sans erreur. Le firmware a donc joué son rôle et exclus les secteurs en erreur.

Je ré-ajoute le disque sdc dans la grappe raid. Il prend la place du disque de backup.


mdadm /dev/md6 -a /dev/sdc

Pour vérifier le bon fonctionnement du disque dans le raid je déclenche une erreur sur le disque sdi mdadm /dev/md6 —fail /dev/sdi

Le raid marque le disque sdi en erreur et ce reconstruit automatiquement avec le disque sdc sans le moindre problème.

Je n’ai plus qu’a replacer le disque sdi en position de backup au cas ou le disque sdc aurait d’autre problème. Pour cela je le retire du raid.


# mdadm /dev/md6 --remove /dev/sdi

Avant de le rajouté.


mdadm /dev/md6 -a /dev/sdi
© 2012 Karlesnine Suffusion theme by Sayontan Sinha