Je viens de découvrir le même problème sur deux serveurs tout neufs et identiques installés il y a seulement 9 mois environ. Je n'ai pas pu écrire sur le disque sur les deux, car le système l'avait marqué en lecture seule. Les journaux indiquaient qu'il y avait une sorte d'erreur de disque sur les deux.
Notez que j'utilise KVM avec plusieurs invités sur chacun de ces serveurs. Les invités fonctionnaient tous bien, mais le problème se situait au niveau de l'hôte KVM. Cela n'a probablement pas d'importance, mais c'est peut-être pertinent. Les deux systèmes ont seulement deux lecteurs avec raid1 logiciel et LVM au dessus. Chaque invité KVM a également sa propre partition LVM.
Les deux systèmes montraient une matrice RAID1 dégradée lorsqu'on regardait /proc/mdstat
.
J'ai donc redémarré un des systèmes, et il m'a dit que je devais lancer manuellement fsck
. C'est ce que j'ai fait. Cela a semblé régler les problèmes et un redémarrage a remis le système en marche normalement. Le même processus a également fonctionné sur le second serveur.
Ensuite, j'ai lancé mdadm --manage /dev/md0 --add /dev/sdb1
pour ajouter le lecteur défaillant dans la matrice. Cela a bien fonctionné sur les deux serveurs. Pendant l'heure suivante, en regardant /proc/mdstat
a montré les progrès réalisés sur la synchronisation des disques. Après environ une heure, un système a terminé, et /proc/mdstat
montre que tout fonctionne bien avec [UU]
.
Cependant, sur l'autre système, après environ une heure et demie, la charge du système est montée en flèche et rien ne répondait. Quelques minutes plus tard, tout est revenu. Mais en regardant /proc/mdstat
montre maintenant ce qui suit :
root@bond:/etc# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sda1[2] sdb1[1]
293033536 blocks [2/1] [_U]
unused devices: <none>
Comme vous pouvez le voir, il semble ne plus y avoir de synchronisation. Le pourcentage d'exécution, le temps restant, etc. ne sont plus affichés. Cependant, en exécutant mdadm --detail /dev/md0
montre ça :
root@bond:/etc# mdadm --detail /dev/md0
/dev/md0:
Version : 00.90
Creation Time : Mon Nov 30 20:04:44 2009
Raid Level : raid1
Array Size : 293033536 (279.46 GiB 300.07 GB)
Used Dev Size : 293033536 (279.46 GiB 300.07 GB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Fri Sep 10 23:38:33 2010
State : clean, degraded
Active Devices : 1
Working Devices : 2
Failed Devices : 0
Spare Devices : 1
UUID : 4fb7b768:16c7d5b3:2e7b5ffd:55e4b71d
Events : 0.5104310
Number Major Minor RaidDevice State
2 8 1 0 spare rebuilding /dev/sda1
1 8 17 1 active sync /dev/sdb1
La ligne de fond semble indiquer que la réserve est en train de se reconstruire. Pourquoi est-ce un spare ? Le système rapporte que les deux appareils sont propres. Il est resté comme ça pendant des heures. Les disques sont des VelociRaptors 300GB 10K RPM petits et rapides, donc j'aurais pensé que la synchronisation aurait déjà eu lieu. La tentative de réinsertion indique que le périphérique est occupé :
root@bond:/etc# mdadm /dev/md0 --re-add /dev/sda
mdadm: Cannot open /dev/sda: Device or resource busy
L'exécution de dmesg sur le "bon" serveur montre ceci à la fin :
[ 4084.439822] md: md0: recovery done.
[ 4084.487756] RAID1 conf printout:
[ 4084.487759] --- wd:2 rd:2
[ 4084.487763] disk 0, wo:0, o:1, dev:sda1
[ 4084.487765] disk 1, wo:0, o:1, dev:sdb1
Sur le "mauvais" serveur, ces 4 dernières lignes sont répétées des centaines de fois. Sur le "bon" serveur, elles n'apparaissent qu'une fois.
Les lecteurs sont toujours synchronisés ? Cette "reconstruction" va-t-elle se terminer ? Dois-je simplement être plus patient ? Si non, que dois-je faire maintenant ?
UPDATE :
J'ai redémarré, et le disque a recommencé à se synchroniser. Après presque 2 heures, la même chose s'est produite comme décrit ci-dessus (j'obtiens toujours un [_U]). Cependant, j'ai pu voir les journaux dmesg avant que les morceaux d'impression de RAID1 conf ne les consument tous :
[ 6348.303685] sd 1:0:0:0: [sdb] Unhandled sense code
[ 6348.303688] sd 1:0:0:0: [sdb] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[ 6348.303692] sd 1:0:0:0: [sdb] Sense Key : Medium Error [current] [descriptor]
[ 6348.303697] Descriptor sense data with sense descriptors (in hex):
[ 6348.303699] 72 03 11 04 00 00 00 0c 00 0a 80 00 00 00 00 00
[ 6348.303707] 22 ee a4 c7
[ 6348.303711] sd 1:0:0:0: [sdb] Add. Sense: Unrecovered read error - auto reallocate failed
[ 6348.303716] end_request: I/O error, dev sdb, sector 586065095
[ 6348.303753] ata2: EH complete
[ 6348.303776] raid1: sdb: unrecoverable I/O read error for block 586065024
[ 6348.305625] md: md0: recovery done.
Donc peut-être que la question que je devrais poser est "Comment puis-je exécuter fsck sur un disque de rechange dans un ensemble raid ?".