mdadm : RAID 1에서 구성 요소를 제거 할 수 없습니다


14

mdadm을 사용하여 RAID 1 어레이에 / boot 파티션이 있습니다. 이 어레이는 과거에 몇 차례 성능이 저하되었으며, 실제 드라이브를 제거하고 새 드라이브를 추가 할 때마다 어레이가 정상 상태가되면 새 드라이브 문자를 사용합니다. 이전 배열을 어레이에 그대로두고 실패했습니다. 더 이상 존재하지 않는 모든 구성 요소를 제거 할 수 없습니다.

[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이 배열에서 여전히 제거 할 수 있어야합니다 .


"제거 된"상태에서 디스크를 제거하기 위해 --force가 필요하지 않으며 더 심각한 문제를 숨길 수 있습니다. 그만둬

답변:


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입니다.
— Sajan Parikh

네, mknod를 사용 하여이 작업을 수행했습니다.
— Sajan Parikh

@SajanParikh는 실제로 어떻게 든 실패하고 분리했다는 것을 보여주는 줄을 놓쳤습니다. mknod가 일하게 된 것을 기쁘게 생각합니다.
— derobert

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 is sde1)하지만 저것도 빠졌기 때문에, 나는 그것이 효과가 있다고 생각합니다.
— derobert

이것은 나에게 효과가 없었으며 mdadm"장치 또는 리소스 사용 중"이라고 계속 말했지만 가짜 블록 장치가 아니라 루프백 마운트 이미지와 같은 "진정한"블록 장치로 그를 공급하려고했습니다. 이 시점에서 성능이 /dev/loop저하 된 어레이에서 여전히 파일을 사용하고 있는 오래된 파일이 있음을 발견했습니다 . 나는 그것을 분리하고 마침내 mdadm배열을 멈추게했다. 호 레이! 이것을 읽는 모든 사람들에게는 항상 mdadm바보 같은 논리적 인 설명 이 있으므로 오래된 프로세스 / 파일 / 마운트 포인트 / nfs 핸들러 / 열린 bash / 루프백 장치 등을 찾으십시오. 여전히 저하 된 배열을 사용하고 있습니다. :)
— Avio

가짜 / dev / sdb2 장치를 mknod하기 위해 정확히 동일한 주 버전과 부 버전 (제 경우 8:18)을 사용할 수있었습니다. 그 후 mdadm --remove는 / proc / mdstat에서 / dev / sdb2의 오래된 레코드를 삭제했습니다. --remove 조치가 완료된 후 rm / dev / sdb2를 기억하십시오.
— ILIV

3

배열에있는 디스크 수를 제거하여 수정할 수도 있습니다.

제 경우에는 raid-1 배열을 /dev/md0가지고 /dev/sda1있고 "제거되었습니다". 나는 단지 하나의 드라이브 만 사용하도록 간단히 축소했습니다.

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

제거 된 후 실제로 제거되었습니다 (더 이상 제거 된 줄 없음 mdadm --detail)


그러나이 방법에주의해야합니다. --raid-devices를 수정하기 전에 처리중인 RAID 유형을 잘 이해하십시오.
— ILIV
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.