mdadm: Komponenten in RAID 1 können nicht entfernt werden

14

Ich habe meine / boot-Partition in einem RAID 1-Array mit mdadm. Dieses Array hat sich in der Vergangenheit einige Male verschlechtert. Jedes Mal, wenn ich das physische Laufwerk entferne, ein neues hinzufüge und das Array auf den Normalzustand zurücksetze, wird ein neuer Laufwerksbuchstabe verwendet. Lassen Sie den alten noch im Array und ist fehlgeschlagen. Ich kann nicht alle Komponenten entfernen, die nicht mehr existieren.

[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_]

Hier ist, was ich versucht habe, um die nicht vorhandenen Laufwerke und Partitionen zu entfernen. Zum Beispiel /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

Das 8:49bezieht sich meiner Meinung nach auf die Haupt- und Nebenzahl --detail, aber ich bin mir nicht ganz sicher, wohin ich von hier aus gehen soll. Ich versuche einen Neustart zu vermeiden oder mdadm neu zu starten.

[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

Hinweis: Das Array ist momentan zu Recht beschädigt, und ich stelle ein neues Laufwerk ein, während wir sprechen. Wie Sie oben sehen können, sollte dies jedoch keine Rolle spielen. Ich sollte immer noch in der Lage sein, /dev/sdb1aus diesem Array zu entfernen .

Sajan Parikh
quelle
Sie benötigen kein --force, um einen Datenträger im Status "entfernt" zu entfernen, und möglicherweise wird ein schwerwiegenderes Problem ausgeblendet. Lass es aus.

Antworten:

16

Dies liegt daran, dass die Geräteknoten auf Ihrem System nicht mehr vorhanden sind (wahrscheinlich hat udev sie entfernt, als das Laufwerk starb). Sie sollten in der Lage sein, sie mithilfe des Schlüsselworts failedoder detachedstattdessen zu entfernen :

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

Wenn Ihre Version von mdadm zu alt ist, um dies zu tun, können Sie es möglicherweise zum Laufen bringen, indem mknodSie das Gerät so einrichten, dass es wieder vorhanden ist. Oder, ehrlich gesagt, ignorieren Sie es einfach - es ist kein wirkliches Problem und sollte beim nächsten Neustart verschwinden.

derobert
quelle
Ich habe versucht, die Schlüsselwörter zu verwenden. Sie können die Ausgabe sehen, die sie mir im ursprünglichen Beitrag gegeben hat. Ich werde einen Blick darauf werfen mknod. Ja, es ist wahrscheinlich kein Problem, aber ich bin OCD, lol.
Sajan Parikh
Ja, ich habe mknod benutzt, um das zu erledigen und es hat funktioniert.
Sajan Parikh
@SajanParikh in der Tat, irgendwie hatte ich die Zeilen verpasst, die zeigten, dass Sie bereits versucht hatten, fehlgeschlagen und losgelöst zu sein. Ich bin froh, dass mknod funktioniert hat.
Derobert
6

mknodAm Ende habe ich @derobert verwendet, um die gesuchten Geräte zu erstellen mdadm. Ich habe versucht, die Major / Minor-Nummern zu finden, die mdadm mir mitteilte, und zwar mit den verschiedenen Laufwerksbuchstaben, die ich entfernen wollte, bis sie funktionierten.

mknod /dev/sde1 b 8 17

Dann musste ich die --forceOption nutzen, um die Komponente entfernen zu lassen.

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

Dann entfernte ich das erstellte Blockgerät.

rm /dev/sde1
Sajan Parikh
quelle
Hmm ... 8:17 ist sdb1. (8:65 ist sde1) Aber dieser hat auch gefehlt, also denke ich, dass das funktioniert ...
derobert
Das hat bei mir nicht funktioniert, mdadmsagte weiter: "Gerät oder Ressource belegt", aber das brachte mich dazu, ihn nicht mit einem gefälschten Blockgerät zu versorgen, sondern mit einem "echten" Blockgerät wie einem Loopback-Image. Zu diesem Zeitpunkt stellte ich fest, dass ich einen veralteten Datenträger hatte /dev/loop, der noch eine Datei auf dem beeinträchtigten Array verwendete. Ich löste es und mdadmließ mich endlich das Array stoppen. Horay! Für jeden, der dies liest, gibt es immer eine logische Erklärung mdadm, warum er so ein Idiot ist. Suchen Sie nach einem veralteten Prozess / file / mountpoint / nfs-Handler / open bash / loopback device / etc. immer noch mit dem degradierten Array. :)
Avio
Ich konnte genau die gleichen Haupt- und Nebenversionen (8:18 in meinem Fall) verwenden, um ein gefälschtes / dev / sdb2-Gerät zu bedienen. Danach löschte mdadm --remove den veralteten Datensatz von / dev / sdb2 aus / proc / mdstat. Denken Sie daran, rm / dev / sdb2 nach erfolgreicher --remove Aktion.
ILIV
3

Sie können das Problem auch einfach beheben, indem Sie die Anzahl der Festplatten im Array verringern:

In meinem Fall habe ich RAID-1-Array /dev/md0mit /dev/sda1und "entfernt". Ich habe es einfach so verkleinert, dass nur ein Laufwerk verwendet wird:

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

Danach wurde wirklich entfernt (keine entfernten Zeilen mehr in mdadm --detail)

Limalski
quelle
Bei diesem Ansatz muss man allerdings vorsichtig sein. Verstehen Sie gut, mit welcher Art von RAID Sie es zu tun haben, bevor Sie --raid-Geräte ändern.
ILIV