mdadm: nie można usunąć komponentów w RAID 1

14

Mam partycję / boot w macierzy RAID 1 przy użyciu mdadm. W przeszłości ta tablica kilkakrotnie ulegała degradacji i za każdym razem, gdy usuwam dysk fizyczny, dodam nowy, przywracam tablicę do normy, używa nowej litery dysku. Pozostawienie starego nadal w tablicy i nie powiodło się. Nie mogę usunąć wszystkich tych składników, które już nie istnieją.

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

Oto, co próbowałem usunąć nieistniejące dyski i partycje. Na przykład /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

To, 8:49jak sądzę, odnosi się do dużej i mniejszej liczby pokazanej w --detail, ale nie jestem do końca pewien, dokąd się stąd udać. Próbuję uniknąć ponownego uruchomienia komputera lub ponownego uruchomienia 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

Uwaga: tablica jest teraz legalnie zdegradowana i dostaję nowy dysk, gdy mówimy. Jednak, jak widać powyżej, nie powinno to mieć znaczenia. Nadal powinienem móc usunąć /dev/sdb1z tej tablicy.

Sajan Parikh
źródło
Nie potrzebujesz opcji --force, aby usunąć dysk w stanie „usunięty”, a może to ukryć poważniejszy problem. Zostaw to.

Odpowiedzi:

16

To dlatego, że węzły urządzeń już nie istnieją w twoim systemie (prawdopodobnie udev je usunął, gdy dysk zmarł). Powinieneś być w stanie je usunąć za pomocą słowa kluczowego failedlub detachedzamiast tego:

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

Jeśli twoja wersja mdadm jest zbyt stara, aby to zrobić, być może uda się ją uruchomić, mknoduruchamiając urządzenie, aby znów istniało. Lub, szczerze mówiąc, po prostu zignoruj ​​to - to nie jest tak naprawdę problem i powinien zniknąć przy następnym uruchomieniu.

derobert
źródło
Próbowałem użyć słów kluczowych, możesz zobaczyć wyniki, które mi dały w oryginalnym poście. Rzucę okiem mknod. Tak, to chyba nie jest problem, ale jestem OCD, lol.
Sajan Parikh
Tak, użyłem mknod, aby to zrobić i zadziałało.
Sajan Parikh
@ SajanParikh rzeczywiście, jakoś mi brakowało linii pokazujących, że już próbowałeś, zawiodłem i odłączyłeś się. Cieszę się, że mknod zadziałał.
derobert
6

Skończyło się na użyciu mknod@derobert sugerowanego do stworzenia urządzeń, których mdadmszukałem. Próbowałem głównych / mniejszych numerów, które mdadm mówił mi, że nie można ich znaleźć przy różnych literach dysków, które próbowałem usunąć, dopóki nie zadziałały.

mknod /dev/sde1 b 8 17

Następnie musiałem skorzystać z --forceopcji, aby usunąć komponent.

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

Następnie usunąłem utworzone urządzenie blokowe.

rm /dev/sde1
Sajan Parikh
źródło
Hmm ... 8:17 to sdb1. (8:65 to sde1) Ale tego też nie było, więc myślę, że to działa ...
derobert 18.04.15
Nie działało to dla mnie, mdadmnadal mówiłem: „urządzenie lub zasób zajęty”, ale to sprawiło, że próbowałem nakarmić go nie fałszywym urządzeniem blokowym, ale „prawdziwym” urządzeniem blokowym, takim jak obraz zamontowany w pętli zwrotnej. W tym momencie odkryłem, że miałem przestarzałą, /dev/loopktóra wciąż używała pliku w zdegradowanej tablicy. Odłączyłem go i wreszcie mdadmpozwoliłem zatrzymać tablicę. Horay! Dla każdego, kto to czyta, zawsze istnieje logiczne wytłumaczenie tego, że jest mdadmtak palantem, więc poszukaj przestarzałego procesu / pliku / mountpoint / handlera nfs / open bash / loopback device / etc. nadal używa zdegradowanej tablicy. :)
Avio
Byłem w stanie używać dokładnie tych samych głównych i mniejszych wersji (w moim przypadku 8:18), aby mknod fałszywe urządzenie / dev / sdb2. Następnie mdadm --remove usunął przestarzały rekord / dev / sdb2 z / proc / mdstat. Pamiętaj o rm / dev / sdb2 po udanej akcji --remove.
ILIV,
3

Możesz również naprawić, odtłuszczając liczbę dysków w macierzy:

W moim przypadku mam tablicę raid-1 /dev/md0z /dev/sda1„usuniętą”. Po prostu zmniejszyłem go, aby użyć tylko jednego dysku:

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

Po tym usunięto zostało naprawdę usunięte (nie ma już usuniętych linii mdadm --detail)

Limalski
źródło
Jednak musisz zachować ostrożność przy takim podejściu. Zrozum dobrze, z jakim rodzajem macierzy RAID masz do czynienia przed modyfikacją urządzeń typu strach.
ILIV,