Raid1 avec partition active et de rechange

8

J'ai le problème suivant avec une partition RAID de logiciel RAID1 sur mon système Ubuntu (10.04 LTS, 2.6.32-24-server au cas où cela importerait).

Un de mes disques (sdb5) a signalé des erreurs d'E / S et a donc été marqué comme défectueux dans la baie. La baie a ensuite été dégradée avec un périphérique actif. Par conséquent, j'ai remplacé le disque dur, cloné la table de partition et ajouté toutes les nouvelles partitions à mes tableaux de raid. Après la synchronisation, toutes les partitions se sont bien terminées, avec 2 appareils actifs - sauf l'un d'entre eux. La partition qui a signalé le disque défectueux avant, cependant, n'a pas inclus la nouvelle partition en tant que périphérique actif mais en tant que disque de rechange:

md3 : active raid1 sdb5[2] sda5[1]
  4881344 blocks [2/1] [_U]

Un regard détaillé révèle:

root@server:~# mdadm --detail /dev/md3
[...]
Number   Major   Minor   RaidDevice State
   2       8       21        0      spare rebuilding   /dev/sdb5
   1       8        5        1      active sync   /dev/sda5

Voici donc la question: comment dire à mon raid de transformer le disque de rechange en disque actif? Et pourquoi a-t-il été ajouté comme appareil de rechange? Recréer ou réassembler le tableau n'est pas une option, car c'est ma partition racine. Et je ne trouve aucun indice à ce sujet dans le Software Raid HOWTO.

Toute aide serait appréciée.

Solution actuelle

J'ai trouvé une solution à mon problème, mais je ne suis pas sûr que ce soit la façon de procéder. En examinant de plus près mon raid, j'ai constaté que sdb5 était toujours répertorié comme périphérique de rechange:

mdadm --examine /dev/sdb5
[...]
Number   Major   Minor   RaidDevice State
this     2       8       21        2      spare   /dev/sdb5

   0     0       0        0        0      removed
   1     1       8        5        1      active sync   /dev/sda5
   2     2       8       21        2      spare   /dev/sdb5

donc la lecture du périphérique sdb5 dans la matrice md3 a toujours abouti à l'ajout du périphérique en tant que pièce de rechange.

Enfin, je viens de recréer le tableau

mdadm --create /dev/md3 --level=1 -n2 -x0 /dev/sda5 /dev/sdb5

qui a fonctionné.

Mais la question reste ouverte pour moi: existe-t-il une meilleure façon de manipuler les résumés dans le superbloc et de dire à la baie de transformer sdb5 d'un disque de rechange en un disque actif? Je suis toujours curieux d'avoir une réponse.

Daniel Baron
la source
Que montre "cat / proc / mdstat"? N'est-ce pas juste une reconstruction et le «disque de rechange» disparaîtra simplement lorsque la reconstruction sera terminée? Que montre "mdadm --version"? Il y avait un vieux bogue ... voir mail-archive.com/[email protected]/msg09818.html .
rems
Non, c'est ça le problème. Le premier extrait de la question montre la sortie de / proc / mdstat pour le tableau. L'appareil a déjà été synchronisé, mais comme vous pouvez le voir après le processus de synchronisation réussi, l'appareil reste en tant que pièce de rechange et n'est pas transformé en un appareil actif.
Daniel Baron
mdadm - v2.6.7.1
Daniel Baron

Réponses:

1

Daniel: Dans un premier temps, revérifiez si la pièce de rechange est intégrée dans la baie en faisant:

chat / proc / mdstat

qui devrait signaler s'il y a un processus de construction en cours, et combien de temps s'attendre à ce que cela prenne.

Si aucun bâtiment ne se produit, essayez ce qui suit

mdadm / dev / md3 - supprimer / dev / sdb5

mdadm / dev / md3 --add / dev / sdb5

Et expliquez comment cela fonctionne pour vous. Voir http://linux.die.net/man/8/mdadm pour plus de détails.

Rolnik
la source
Merci pour votre aide, Rolnik. Comme vous pouvez le voir dans mon premier extrait / proc / mdstat montre les deux appareils dans le tableau. L'appareil a déjà été synchronisé auparavant (non illustré ici) sans problème. Mais après avoir terminé le processus de resynchronisation, les appareils n'ont pas été transformés en appareil actif. La suppression et l'ajout à nouveau n'ont pas modifié ce comportement.
Daniel Baron
1

Assez tard, mais cela ne ferait qu'activer le disque de secours:

mdadm --grow /dev/md3 -n 2

Comme le dit la page de manuel:

Pour créer, construire ou agrandir: -n, --raid-devices = Spécifiez le nombre de périphériques actifs dans la baie. Ceci, plus le nombre de périphériques de rechange (voir ci-dessous) doit être égal au nombre de périphériques composants (y compris les périphériques "manquants") répertoriés sur la ligne de commande pour --create. La définition d'une valeur de 1 est probablement une erreur et nécessite donc que --force soit spécifié en premier. Une valeur de 1 sera alors autorisée pour linéaire, multi-trajets, RAID0 et RAID1. Il n'est jamais autorisé pour RAID4, RAID5 ou RAID6. Ce nombre ne peut être modifié qu'en utilisant --grow pour les matrices RAID1, RAID4, RAID5 et RAID6, et uniquement sur les noyaux qui fournissent le support nécessaire.

Pablo Montepagano
la source
0

D'après ce que je me souviens, quand j'ai eu ce problème (pour une raison différente), j'ai dû utiliser --grow pour rajouter le disque de rechange "correctement" (en supprimant également la condition d'erreur.)

Quelque chose comme ça (vérifiez avec votre documentation!):

mdadm --grow --level = défectueux --layout = flush / dev / sdb5

Ensuite, vous pouvez ajouter l'appareil et il devrait être reconnu.

Le problème est que le pilote md enregistre l'état de chaque partition dans les données de démarrage des lecteurs. Ainsi, même après un redémarrage, il connaît l'état et évite les partitions marquées comme défectueuses.

Alexis Wilke
la source