보이는 크기의 디스크를 업그레이드 할 때 RAID 증가 / 크기 조정


10

원래 디스크 당 2TB 만 처리 할 수있는 컨트롤러를 사용하여 소프트웨어 RAID를 만들었습니다. 디스크는 3TB 디스크입니다. 정상적으로 작동했지만 각 디스크의 처음 2TB 만 사용했습니다.

이제 전체 3TB를 볼 수 있도록 컨트롤러를 변경했습니다. 따라서 /dev/md0마지막 1TB도 사용하고 싶습니다 .

나는 시도했다 :

# mdadm --grow /dev/md0 --size=max
mdadm: component size of /dev/md0 has been set to 2147479552K

그러나 보시다시피 2TB 만 보입니다. 그것을 더 높이려고하면 :

# mdadm --grow /dev/md0 --size=2147483648
mdadm: Cannot set device size for /dev/md0: No space left on device

따라서 시스템은 디스크가 3TB (in /proc/partitions) 인 것을 볼 수 있지만 RAID는 디스크를 3TB 로 볼 수 없습니다.

mdadm 세부 사항 :

# mdadm --detail /dev/md0
/dev/md0:
    Version : 1.2
Creation Time : Fri Mar  2 15:14:46 2012
 Raid Level : raid6
 Array Size : 38654631936 (36863.93 GiB 39582.34 GB)
Used Dev Size : 2147479552 (2048.00 GiB 2199.02 GB)
Raid Devices : 20
Total Devices : 21
Persistence : Superblock is persistent

Update Time : Wed Apr 25 19:47:09 2012
      State : active
Active Devices : 20
Working Devices : 21
Failed Devices : 0
Spare Devices : 1

     Layout : left-symmetric
 Chunk Size : 4096K

       Name : node5:1
       UUID : 8603c3df:b740ba22:8c9c82fd:a18b3133
     Events : 845

Number   Major   Minor   RaidDevice State
  20      65       32        0      active sync   /dev/sds
   1      65       64        1      active sync   /dev/sdu
   2      65       80        2      active sync   /dev/sdv
   3      65       96        3      active sync   /dev/sdw
   4       8      192        4      active sync   /dev/sdm
   5       8       32        5      active sync   /dev/sdc
   6       8       48        6      active sync   /dev/sdd
   7       8       64        7      active sync   /dev/sde
   8       8       80        8      active sync   /dev/sdf
   9       8       96        9      active sync   /dev/sdg
  10       8      112       10      active sync   /dev/sdh
  11       8      128       11      active sync   /dev/sdi
  12       8      144       12      active sync   /dev/sdj
  13       8      160       13      active sync   /dev/sdk
  14       8      176       14      active sync   /dev/sdl
  15       8      208       15      active sync   /dev/sdn
  16       8      224       16      active sync   /dev/sdo
  17       8      240       17      active sync   /dev/sdp
  18      65        0       18      active sync   /dev/sdq
  19      65       16       19      active sync   /dev/sdr

  21      65       48        -      spare   /dev/sdt

디스크 크기 :

# cat /proc/partitions |grep 2930266584
   8       48 2930266584 sdd
   8       32 2930266584 sdc
   8      112 2930266584 sdh
   8       96 2930266584 sdg
   8       80 2930266584 sdf
   8      128 2930266584 sdi
   8      176 2930266584 sdl
   8       64 2930266584 sde
  65       32 2930266584 sds
   8      192 2930266584 sdm
   8      144 2930266584 sdj
  65       80 2930266584 sdv
   8      224 2930266584 sdo
   8      208 2930266584 sdn
   8      160 2930266584 sdk
   8      240 2930266584 sdp
  65        0 2930266584 sdq
  65       64 2930266584 sdu
  65       16 2930266584 sdr
  65       48 2930266584 sdt
  65       96 2930266584 sdw

편집하다:

# mdadm --version
mdadm - v3.1.4 - 31st August 2010
# uname -a
Linux lemaitre 3.2.0-0.bpo.1-amd64 #1 SMP Sat Feb 11 08:41:32 UTC 2012 x86_64 GNU/Linux

RAID6는 전체 디스크를 사용합니다 (예 : 파티션 없음)

오늘 아침에 시스템이 추락했습니다. 재부팅 후 시스템이 RAID를 찾지 못했습니다 (끔찍한). 모든 디스크가 스페어 (S)로 표시되었습니다.

cat /proc/mdstat 
Personalities : 
md0 : inactive sdr[20](S) sds[21](S) sdq[18](S) sdp[17](S) sdo[16](S) sdn[15](S) sdl[14](S) sdk[13](S) sdj[12](S) sdi[11](S) sdh[10](S) sdg[9](S) sdf[8](S) sde[7](S) sdd[6](S) sdc[5](S) sdm[4](S) sdv[3](S) sdu[2](S) sdt[1](S)
      42949652460 blocks super 1.2

여기에서도 mdadm3TB 크기를 찾지 못한 것이 분명합니다 .

나는 달렸다 mdadm --stop /dev/md0. /etc/mdadm/mdadm.conf에서 항목을 제거했습니다. Ran이 mdadm -A --scan --force(가) 발생하여 RAID가 온라인 상태가되어 다시 작성되었습니다.


RAID6에 20 개의 전체 디스크를 사용하고 있습니까? 각 디스크에 파티션이 없습니까? 무엇을 fdisk -l /dev/sdd보여줍니까? 어떤 OS를 사용하고 있습니까? mdadm 버전은 무엇입니까?
Nils

답변:


5

나는 / sys를 찌르고 대답에 훨씬 더 가까워졌다.

# cd /sys/block/md0/md
# cat component_size
2147479552

그것은 우리가 전에 본 것에 동의합니다. 하지만 이것은:

# grep . dev-sd*/size
dev-sdc/size:2147482623
dev-sdd/size:2147482623
dev-sde/size:2147482623
dev-sdf/size:2930265560
dev-sdg/size:2147482623
dev-sdh/size:2147482623
dev-sdi/size:2147482623
dev-sdj/size:2147482623
dev-sdk/size:2147482623
dev-sdl/size:2147483648
dev-sdm/size:2147482623
dev-sdn/size:2147482623
dev-sdo/size:2147482623
dev-sdp/size:2147482623
dev-sdq/size:2147482623
dev-sdr/size:2147482623
dev-sds/size:2147482623
dev-sdt/size:2147482623
dev-sdu/size:2147482623
dev-sdv/size:2147482623
dev-sdw/size:2930265560

RAID가 잘못된 크기를 보는 이유를 설명하는 것 같습니다. 대부분의 드라이브는 2TB로 표시되고 교체 된 2는 3TB로 표시됩니다. 모든 드라이브는 동일한 모델이므로 인식 된 크기를 변경할 수 있는지 살펴 보겠습니다.

# parallel echo 2930265560 \> ::: dev-sd*/size
# grep . dev-sd*/size
dev-sdc/size:2930265560
dev-sdd/size:2930265560
dev-sde/size:2930265560
dev-sdf/size:2930265560
dev-sdg/size:2930265560
dev-sdh/size:2930265560
dev-sdi/size:2930265560
dev-sdj/size:2930265560
dev-sdk/size:2930265560
dev-sdl/size:2930265560
dev-sdm/size:2930265560
dev-sdn/size:2930265560
dev-sdo/size:2930265560
dev-sdp/size:2930265560
dev-sdq/size:2930265560
dev-sdr/size:2930265560
dev-sds/size:2930265560
dev-sdt/size:2930265560
dev-sdu/size:2930265560
dev-sdv/size:2930265560
dev-sdw/size:2930265560

짜잔 그러나 Component_size는 여전히 작습니다.

# cat component_size
2147479552

mdadm으로 변경 될 수 있습니다.

# mdadm --grow /dev/md0 --size=max

이것은 불행히도 잠기고 mdadm/ dev / md0에 대한 후속 액세스는 차단됩니다. component_size에 대한 액세스도 있습니다.

# cat component_size   # This blocks

짜증. 그러나 좋은 부분은 syslog에서 다음과 같이 말합니다.

Apr 27 20:45:50 server kernel: [124731.725019] md0: detected capacity change from 39582343102464 to 54010589478912

/ dev / md0의 파일 시스템이 여전히 실행되었습니다.

재부팅 후 'mdadm --grow / dev / md0 --size = max'를 다시 수행해야했습니다. 그런 다음 resync완료 될 때까지 기다리십시오 . / dev / md0에 대한 액세스가 다시 차단되었습니다. 따라서 다시 부팅 xfs_growfs /dev/md0한 다음 크기 조정이 완료되었습니다.


나는 병렬 (1) 플러그, Ole :)을 좋아했습니다. 조사해 주셔서 감사합니다. 비슷한 사례를 보았습니다.
Michael Shigorin

1
"mdadm --update = devicesize"도 마찬가지입니다. 맨 페이지 참조 : "mdadm은 각 장치에서 사용 가능한 최대 공간을 결정하고 메타 데이터에서 관련 필드를 업데이트합니다."
rudimeier

3

나는 창조하는 동안 장치의 크기가 메타 데이터의 어딘가에 등록되었다고 생각합니다. 컨트롤러를 변경해도 메타 데이터는 변경되지 않습니다.

md에서 예비를 제거한 다음 새 드라이브로 RAID 세트에 다시 추가하십시오. 메타 데이터를 제거해야 할 수도 있습니다 (매뉴얼에서 --zero-superblock을 확인하거나 전체 디스크를 지우십시오). 단일 디스크에서 작동하는 경우 나머지 모든 드라이브에 대해서도 절차를 반복하십시오. 그런 다음 --grow를 수행하십시오.

동기화가 완료 될 때까지 추가 디스크를 제거하지 마십시오 !!


이것이 실제로 작동하는지 테스트 한 경우 불분명합니다. 재건에는 약 1.5 일이 걸립니다. 20 개의 드라이브를 모두 교체하면 한 달 동안 성능이 저하됩니다. "단일 디스크에서 작동하는 경우"라고 쓰면 단일 디스크에서 작동하는지 어떻게 테스트합니까?
Ole Tange

아니요, 이것을 테스트하지는 않았지만 전에 md 문제를 보았으며 작동 방식에 대한 느낌이 들었습니다 ... 테스트를 위해 잘못된 메타 데이터가있는 드라이브가 없습니다. 동기화 시간이 길다는 것을 알고 있으므로 스페어를 사용하는 것이 좋습니다. RAID6이 있는데, 이는 2 개의 드라이브가 고장날 수 있고 여분이 있음을 의미합니다. 이는 문제가 발생하기 전에 실패 할 수있는 총 3 개의 드라이브를 의미합니다. 적어도 하나의 드라이브로 확인할 수 있습니다. 적어도 이것이 문제인지 알고 있습니다. 설정에 대한 정보가 제한되어 있습니다. 편안하지 않으면 RAID 세트에서 드라이브를
꺼내지 마십시오

오, 당신의 질문을 이해합니다. mdadm은 다른 장치보다 훨씬 큰 장치를 추가하려고한다는 경고를 표시합니다. 몇 바이트에 대해서는 신경 쓰지 않지만 차이가 상대적으로 클 때 경고합니다.
jippie

1
당신은 할 수 fail드라이브, 다음 remove은 다음 zero-superblock은 메타 데이터를 제거합니다. RAID 세트가 사용 중이므로 예비 드라이브로 추가 할 수 있습니다. 즉, 다른 드라이브가 고장날 때까지 (정상적인 동작) 동기화되지는 않지만 단일 드라이브에서만 작동 add하거나 동기화해야합니다. 나는 그것이 영원히 걸리는 것을 안다. 또는 사용 가능한 모든 스토리지를 추가 할 수 없다는 사실을 인정합니다. 당신이하지 않은 파티션 테이블을 사용하는 장점 중 하나입니다. 파티션 테이블을 사용하지 않는 것은 나쁘지 않지만이 특별한 경우에 도움이 될 것입니다.
jippie

1
위의 내 의견을 참조하십시오. "mdadm은 다른 것보다 훨씬 큰 장치를 추가하려고한다는 경고를 표시합니다."
jippie
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.