원래는 디스크당 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
mdadm
여기에서도 3TB의 크기가 발견되지 않는다는 것이 분명합니다 .
나는 도망 갔다 mdadm --stop /dev/md0
. /etc/mdadm/mdadm.conf에서 항목이 제거되었습니다. Ran
mdadm -A --scan --force
- RAID가 온라인 상태가 되어 재구축됩니다.
답변1
나는 /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
안타깝네요. 그러나 좋은 부분은 시스템 로그에 다음과 같이 나와 있습니다.
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
크기 조정이 완료됩니다.
답변2
장치의 크기는 생성 중에 메타데이터 어딘가에 등록되어 있는 것 같습니다. 컨트롤러를 변경해도 메타데이터는 변경되지 않습니다.
md에서 예비 드라이브를 제거하고 이를 RAID 세트에 새 드라이브로 다시 추가합니다. 메타데이터를 제거해야 할 수도 있습니다(맨 페이지에서 --zero-superblock을 확인하거나 전체 디스크를 지워야 함). 이것이 단일 디스크에 적용되는 경우 나머지 모든 드라이브에 대해 이 프로세스를 반복하십시오. 그런 다음 마지막으로 --grow를 수행합니다.
동기화가 완료될 때까지 다른 디스크를 삭제하지 마세요!