mdadm: impossible de supprimer des composants dans RAID 1

14

J'ai ma partition / boot dans une matrice RAID 1 utilisant mdadm. Cette matrice s'est dégradée plusieurs fois dans le passé, et chaque fois que je supprime le disque physique, en ajoute une nouvelle, ramène la matrice à la normale, elle utilise une nouvelle lettre de lecteur. Laisser l'ancien toujours dans le tableau et a échoué. Je n'arrive pas à supprimer tous ces composants qui n'existent plus.

[root@xxx ~]# cat /proc/mdstat 
Personalities : [raid1] 
md0 : active raid1 sdg1[10] sde1[8](F) sdb1[7](F) sdd1[6](F) sda1[4] sdc1[5]
      358336 blocks super 1.0 [4/3] [UUU_]

Voici ce que j'ai essayé de supprimer les disques et partitions inexistants. Par exemple /dev/sdb1,.

[root@xxx ~]# mdadm /dev/md0 -r /dev/sdb1
mdadm: Cannot find /dev/sdb1: No such file or directory
[root@xxx ~]# mdadm /dev/md0 -r faulty
mdadm: Cannot find 8:49: No such file or directory
[root@xxx ~]# mdadm /dev/md0 -r detached
mdadm: Cannot find 8:49: No such file or directory

Ce que 8:49je crois fait référence au nombre majeur et mineur montre --detail, mais je ne suis pas tout à fait sûr où aller d'ici. J'essaie d'éviter un redémarrage ou un redémarrage de mdadm.

[root@xxx ~]# mdadm --detail /dev/md0 
/dev/md0:
        Version : 1.0
  Creation Time : Thu Aug  8 18:07:35 2013
     Raid Level : raid1
     Array Size : 358336 (350.00 MiB 366.94 MB)
  Used Dev Size : 358336 (350.00 MiB 366.94 MB)
   Raid Devices : 4
  Total Devices : 6
    Persistence : Superblock is persistent

    Update Time : Sat Apr 18 16:44:20 2015
          State : clean, degraded 
 Active Devices : 3
Working Devices : 3
 Failed Devices : 3
  Spare Devices : 0

           Name : xxx.xxxxx.xxx:0  (local to host xxx.xxxxx.xxx)
           UUID : 991eecd2:5662b800:34ba96a4:2039d40a
         Events : 694

    Number   Major   Minor   RaidDevice State
       4       8        1        0      active sync   /dev/sda1
      10       8       97        1      active sync   /dev/sdg1
       5       8       33        2      active sync   /dev/sdc1
       6       0        0        6      removed

       6       8       49        -      faulty
       7       8       17        -      faulty
       8       8       65        -      faulty

Remarque: la baie est légitimement dégradée en ce moment et je reçois un nouveau disque là-dedans alors que nous parlons. Cependant, comme vous pouvez le voir ci-dessus, cela ne devrait pas avoir d'importance. Je devrais toujours être en mesure de supprimer /dev/sdb1de ce tableau.

Sajan Parikh
la source
Vous n'avez pas besoin de --force pour supprimer un disque dans l'état "supprimé", et cela pourrait masquer un problème plus grave. Laissez-le.

Réponses:

16

C'est parce que les nœuds de périphériques n'existent plus sur votre système (probablement udev les a supprimés lorsque le lecteur est mort). Vous devriez pouvoir les supprimer en utilisant le mot-clé failedou à la detachedplace:

mdadm -r /dev/md0 failed     # all failed devices
mdadm -r /dev/md0 detached   # failed ones that aren't in /dev anymore

Si votre version de mdadm est trop ancienne pour cela, vous pourrez peut-être la faire fonctionner en faisant en sorte mknodque le périphérique existe à nouveau. Ou, honnêtement, ignorez-le simplement - ce n'est pas vraiment un problème et devrait disparaître au prochain redémarrage.

derobert
la source
J'ai essayé d'utiliser les mots-clés, vous pouvez voir le résultat qu'il m'a donné dans le message d'origine. Je vais regarder mknod. Ouais, ce n'est probablement pas un problème, mais je suis TOC, lol.
Sajan Parikh
Oui, j'ai utilisé mknod pour faire cela et cela a fonctionné.
Sajan Parikh
@SajanParikh en effet, d'une manière ou d'une autre, j'avais raté les lignes montrant que vous aviez déjà essayé échoué et détaché. Heureux que mknod ait fonctionné.
derobert
6

Ce que j'ai fini par utiliser, c'était mknodcomme @derobert a suggéré de créer les appareils que je mdadmcherchais. J'ai essayé les nombres majeurs / mineurs que mdadm me disait qu'il ne pouvait pas trouver avec les différentes lettres de lecteur que j'essayais de supprimer jusqu'à ce que cela fonctionne.

mknod /dev/sde1 b 8 17

Ensuite, j'ai dû utiliser l' --forceoption pour le faire supprimer le composant.

mdadm /dev/md0 --remove --force /dev/sde1

Ensuite, j'ai supprimé ce périphérique de bloc créé.

rm /dev/sde1
Sajan Parikh
la source
Hmm ... 8:17 est sdb1. (8:65 is sde1) Mais celui-là manquait aussi, donc je suppose que ça marche ...
derobert
Cela n'a pas fonctionné pour moi, a mdadmcontinué à dire: "périphérique ou ressource occupé", mais cela m'a fait essayer de le nourrir non pas avec un faux périphérique de bloc, mais avec un "vrai" périphérique de bloc tel qu'une image montée en boucle. À ce stade, j'ai découvert que j'avais un éventé /dev/loopqui utilisait toujours un fichier sur la baie dégradée. Je l'ai détaché et finalement mdadmj'ai laissé arrêter le tableau. Horay! Pour tous ceux qui lisent ceci, il y a toujours une explication logique pour mdadmêtre si saccadé, alors recherchez un processus périmé / fichier / gestionnaire mountpoint / nfs / open bash / périphérique de bouclage / etc. toujours en utilisant le tableau dégradé. :)
Avio
J'ai pu utiliser exactement les mêmes versions majeures et mineures (8:18 dans mon cas) pour mknod un faux périphérique / dev / sdb2. Après cela, mdadm --remove a supprimé l'enregistrement périmé de / dev / sdb2 de / proc / mdstat. N'oubliez pas de rm / dev / sdb2 après une action --remove réussie.
ILIV
3

Vous pouvez également corriger simplement en dégraissant le nombre de disques dans le tableau:

Dans mon cas, j'ai un tableau raid-1 /dev/md0avec /dev/sda1et "supprimé". Je l'ai simplement réduit pour n'utiliser qu'un seul lecteur:

mdadm -G /dev/md0 --raid-devices=1 --force

Après cela, la suppression a vraiment été supprimée (plus aucune ligne supprimée mdadm --detail)

Limalski
la source
Vous devez cependant être prudent avec cette approche. Comprenez bien le type de RAID auquel vous avez affaire avant de modifier --raid-devices.
ILIV