mdadm: не вдається видалити компоненти в RAID 1


14

У мене є розділ / boot в масиві RAID 1 за допомогою mdadm. Цей масив за минулий час деградував, і кожного разу, коли я виймаю фізичний диск, додаю новий, привожу масив у норму, він використовує нову літеру диска. Залишити старий все ще в масиві і не вдалося. Я не можу видалити всі ті компоненти, яких більше немає.

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

Ось що я намагався видалити неіснуючі диски та розділи. Наприклад, /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

Це 8:49я вважаю , відноситься до основного й допоміжного номеру , зазначеному в --detail, але я не зовсім впевнений , куди йти звідси. Я намагаюся уникати перезавантаження або перезавантаження 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

Примітка . Масив легітимно деградує прямо зараз, і я отримую новий привід там, коли ми говоримо. Однак, як ви бачите вище, це не має значення. Я все-таки повинен мати можливість видалити /dev/sdb1з цього масиву.


Вам не потрібна - сила, щоб вийняти диск у стані "вилучений", і це може приховати більш серйозну проблему. Залиште це.

Відповіді:


16

Це тому, що вузли пристроїв більше не існують у вашій системі (ймовірно, udev їх видалив, коли диск загинув). Ви повинні мати змогу видалити їх за допомогою ключового слова failedабо detachedзамість цього:

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

Якщо ваша версія mdadm занадто стара для цього, ви, можливо, зможете змусити її працювати mknodзнову, коли пристрій знову існуватиме. Або, чесно кажучи, просто проігноруйте це - це насправді не проблема, і ви повинні піти наступного разу при перезавантаженні.


Я спробував використовувати ключові слова, ви можете побачити результат, який він дав мені в оригінальній публікації. Я погляну mknod. Так, це, мабуть, не проблема, але я OCD, lol.
Саян Парих

Так, я використовував mknod для цього, і це спрацювало.
Саян Парих

@SajanParikh, справді, я якось пропустив рядки, які показують, що ви вже пробували невдало і відсторонено. Радий, що mknod працював.
дероберт

6

Що я в кінцевому підсумку робив, використовував, mknodяк @derobert запропонував створити потрібні пристрої mdadm. Я спробував основні / другорядні цифри mdadm говорив мені, що не можу знайти різні букви диска, які я намагався видалити, поки це не спрацювало.

mknod /dev/sde1 b 8 17

Тоді мені довелося скористатися --forceопцією, щоб змусити його видалити компонент.

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

Потім я видалив створений блок пристрою.

rm /dev/sde1

Хм ... 8:17 є sdb1. (8:65 є sde1) Але і цього не вистачало, тому я думаю, що це працює ...
derobert

Це не спрацювало для мене, mdadmпродовжував говорити: "пристрій чи ресурс зайнятий", але це змусило мене спробувати подати його не за допомогою підробленого блокового пристрою, а за допомогою "справжнього" блокового пристрою, такого як зображення, встановлене в петлю. У цей момент я виявив, що у мене /dev/loopдеградував масив, який все ще використовує файл на деградованому масиві. Я відключив його і нарешті mdadmдозволив мені зупинити масив. Хорай! Для всіх, хто читає це, завжди є логічне пояснення mdadmнастільки ривка, тому шукайте несвіжий процес / файл / mountpoint / nfs handler / open bash / loopback device / тощо. все ще використовують деградований масив. :)
Авіо

Мені вдалося використати точно такі ж основні та незначні версії (8:18 в моєму випадку), щоб mknod підробляти підробку / dev / sdb2. Після цього mdadm - видаляє застарілий запис / dev / sdb2 з / proc / mdstat. Пам’ятайте, що rm / dev / sdb2 після успішної дії - зніміть.
ІЛІВ

3

Ви також можете виправити лише знежирення кількості дисків у масиві:

У моєму випадку у мене є рейд-1 масив /dev/md0з /dev/sda1та "вилучено". Я просто скоротив його, щоб використовувати лише один привід:

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

Після цього видалення було дійсно видалено (більше не було видалено рядків у mdadm --detail)


Ти повинен бути обережним з таким підходом. Добре зрозумійте, з яким типом RAID ви маєте справу, перш ніж змінювати --raid-пристрої.
ІЛІВ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.