[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

RAID5 - Ejection de 2 disques



Bonjour,

J'ai un serveur personnel sous debian etch qui me sert au stockage, mails, site web, etc...

J'ai 3x500Go (sda, sdb, sdc) en RAID :
md0	raid1	sd[a-c]1	/boot
md1	raid5	sd[a-c]2	swap
md2	raid5	sd[a-c]3	/
md3	raid5	sd[a-c]4	LUKS, LVM, XFS, puis montage dans /home

Avant-hier je reçois 3 mails de mdadm, dont le dernier les résume tous :

------------------------------------------------------------------
md3 : active raid5 sdc4[0] sdb4[3](F) sda4[1]
     968751488 blocks level 5, 64k chunk, algorithm 2 [3/2] [UU_]
md2 : active raid5 sdc3[0] sdb3[3](F) sda3[1]
     5863552 blocks level 5, 64k chunk, algorithm 2 [3/2] [UU_]
md1 : active raid5 sdc2[0] sdb2[3](F) sda2[1]
     1959680 blocks level 5, 64k chunk, algorithm 2 [3/2] [UU_]
md0 : active raid1 sdc1[0] sdb1[2] sda1[1]
     96256 blocks [3/3] [UUU]
------------------------------------------------------------------

Je regarde le statut SMART de sdb (smartctl -a -d ata /dev/sdb) : PASSED, mais il y a des erreurs dont je ne comprends pas trop le sens :

------------------------------------------------------------------
ATA Error Count: 24 (device log contains only the most recent five errors)
       CR = Command Register [HEX]
       FR = Features Register [HEX]
       SC = Sector Count Register [HEX]
       SN = Sector Number Register [HEX]
       CL = Cylinder Low Register [HEX]
       CH = Cylinder High Register [HEX]
       DH = Device/Head Register [HEX]
       DC = Device Command Register [HEX]
       ER = Error register [HEX]
       ST = Status register [HEX]
Powered_Up_Time is measured from power on, and printed as
DDd+hh:mm:SS.sss where DD=days, hh=hours, mm=minutes,
SS=sec, and sss=millisec. It "wraps" after 49.710 days.

Error 24 occurred at disk power-on lifetime: 738 hours (30 days + 18 hours)
 When the command that caused the error occurred, the device was active or idle.

 After command completion occurred, registers were:
 ER ST SC SN CL CH DH
 -- -- -- -- -- -- --
 40 51 00 43 18 d4 e0  Error: UNC at LBA = 0x00d41843 = 13899843

 Commands leading to the command that caused the error were:
 CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
 -- -- -- -- -- -- -- --  ----------------  --------------------
 25 00 00 00 18 d4 e0 00      05:45:18.525  READ DMA EXT
 ec 00 00 43 18 d4 a0 00      05:45:16.606  IDENTIFY DEVICE
 25 00 00 00 18 d4 e0 00      05:45:16.606  READ DMA EXT
 ec 00 00 43 18 d4 a0 00      05:45:14.688  IDENTIFY DEVICE
 25 00 00 00 18 d4 e0 00      05:45:14.687  READ DMA EXT
------------------------------------------------------------------

Le rapport smart de sdb complet est dispo ici : http://gemibox.net/upload/crash/smartctl_on_sdb.txt

Donc je me dis qu'il y a eu une erreur de lecture sur sdb et qu'il a été viré du RAID. Mais il fonctionne toujours.
Donc je tente une reconstruction (mdadm /dev/md3 -add /dev/sdb4). Et à 30%, voila ce que j'obtiens :
------------------------------------------------------------------
md3 : active raid5 sdc4[3](F) sdb4[4](S) sda4[1]
     968751488 blocks level 5, 64k chunk, algorithm 2 [3/1] [_U_]
------------------------------------------------------------------

Une failure sur sdc4 ! Avec le sdb4 qui passe spare du coup. Bon j'essaye de garder mon sang froid... J'ai toutes mes données dessus. Je regarde le rapport SMART, de sdc cette fois, et j'ai toujours PASSED mais toujours les meme erreurs en bas du log :
http://gemibox.net/upload/crash/smartctl_on_sdc.txt

Je passe sur Knoppix live cd, je force l'assemblage du raid avec sda4 et sdc4. Ca démarre, un coup de cryptsetup luksOpen, vgscan, vgchange, et mount en ro. Oufff les données sont là et ca à l'air de marcher.

Je relance un resync en ayant ajouté sdb4, et pareil à 30% sdc est réexpulsé.

Je lance un "dd if=/dev/sdb of=/dev/null bs=1M conv=noerror" :
à 131783 Mo un erreur de lecture sur sdb
à 195207 Mo une autre

J'arrive à isoler les quelques Ko illisibles et je les remplace par des 0 "dd if=/dev/zero of=/dev/sdb seek=... bs=16k count=..."

Je re-re-re-assemble le raid avec sda4 et sdc4 "réparé". J'ajoute sdb4, resync, ca marche !
luksOpen, vgscan, vgchange, puis un xfs_repair : apparemment pas de problème. Sauf que je dois bien avoir perdu quelques données... Mais je ne sais pas encore lesquelles, et je ne sais pas comment savoir quels fichiers sont sur les secteurs remplacé par des zéro (sachant qu'en plus il y a la couche LVM entre les 2).

Donc au final beaucoup de frayeur, une nuit blanche à attendre, un système qui refonctionne, mais que s'est t'il passé ?

Pour résumer :
--------------

RAID5 sur sda4 sdb4 sdc4
sdb4 éjecté
je le rajoute, je resync
sdc4 éjecté (et sdb4 en spare)
J'utilise dd pour réécrire les secteurs illisibles de sdc4
Et ca repart (mais j'ai perdu des données)

Est-ce que le lancer un "check" ou un "resync" quotidiennement permet de détecter et de réparer ces problèmes avant que 2 disques ne soient éjectés ?
Dans /etc/cron.d/mdadm j'ai par defaut ca :
"6 1 * * 0 root [ -x /usr/share/mdadm/checkarray ] && [ $(date +\%d) -le 7 ] && /usr/share/mdadm/checkarray --cron --all --quiet"
Je pensais justement que c'était pour éviter ce genre de problèmes ?

En fait ce que voudrait savoir c'est si je n'ai vraiment pas eu de bol (dans ce cas tant pis) ou bien si j'aurais pu anticiper le problème ?

Merci de votre aide ou de vos remarques.

Yann.

PS :
Je viens de regarder syslog lors du premier défault (sur sdb pour ceux qui ont suivi) :
http://gemibox.net/upload/crash/syslog_ata_errors.txt
Pleins d'erreurs mais ca veux dire quoi ?
(sd[a-c] sont sur les ports SATA[2-4])




Reply to: