커널 4.4.6-1을 사용하여 데비안에서 테스트하는 동안 mdadm v3.4를 사용하여 생성된 raid10을 확장하기 위해 두 개의 새 드라이브를 추가하려고 합니다. 문제는 내 새 드라이브가 어레이를 만드는 데 사용된 가장 작은 드라이브보다 몇 섹터 부족하다는 것입니다. 어레이를 파괴하지 않고 파티션을 축소하는 방법이 있습니까?
root@debian-nas:~# mdadm /dev/md0 --add /dev/sdb1 /dev/sdd1
mdadm: /dev/sdb1 not large enough to join array
이것이 지금 배열의 모습입니다.
root@debian-nas:~# mdadm --detail --verbose /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sat Mar 26 21:13:23 2016
Raid Level : raid10
Array Size : 5860268032 (5588.79 GiB 6000.91 GB)
Used Dev Size : 2930134016 (2794.39 GiB 3000.46 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Sun Mar 27 16:25:22 2016
State : active
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Name : debian-nas:0 (local to host debian-nas)
UUID : 86266375:bf94ae93:d449a171:aa746159
Events : 13726
Number Major Minor RaidDevice State
0 8 1 0 active sync set-A /dev/sda1
1 8 33 1 active sync set-B /dev/sdc1
2 8 65 2 active sync set-A /dev/sde1
3 8 81 3 active sync set-B /dev/sdf1
/dev/sdb1 및 /dev/sdd1을 /dev/md0에 추가하려고 합니다.
root@debian-nas:~# blockdev --report /dev/sda1
RO RA SSZ BSZ StartSec Size Device
rw 2048 512 512 2048 3000591916544 /dev/sda1
root@debian-nas:~# blockdev --report /dev/sdb1
RO RA SSZ BSZ StartSec Size Device
rw 2048 512 4096 2048 3000590934016 /dev/sdb1
root@debian-nas:~# blockdev --report /dev/sdc1
RO RA SSZ BSZ StartSec Size Device
rw 2048 512 4096 2048 3000591450112 /dev/sdc1
root@debian-nas:~# blockdev --report /dev/sdd1
RO RA SSZ BSZ StartSec Size Device
rw 2048 512 4096 2048 3000590934016 /dev/sdd1
root@debian-nas:~# blockdev --report /dev/sde1
RO RA SSZ BSZ StartSec Size Device
rw 2048 512 4096 2048 3000591450112 /dev/sde1
root@debian-nas:~# blockdev --report /dev/sdf1
RO RA SSZ BSZ StartSec Size Device
rw 2048 512 512 2048 3000591916544 /dev/sdf1
데이터를 어레이 밖으로 이동하여 파괴한 다음 새 드라이브를 포함할 수 있도록 더 작은 파티션으로 생성하는 것이 더 나을까요?
답변1
파티션 테이블이 필요하지 않은 경우 /dev/sd[bd]
(기본적으로 두 드라이브 모두에서 부팅할 필요가 없는 경우) 전체 드라이브를 어레이에 추가하면 충분한 섹터가 제공됩니다.
mdadm /dev/md0 --add /dev/sdb /dev/sdd
또는 새 파티션에 다운그레이드된 새 어레이를 생성하고 데이터를 해당 어레이로 마이그레이션한 다음 드라이브를 이전 어레이에서 새 어레이로 점진적으로 이동할 수 있습니다.
답변2
그래서 저는 어레이를 재구축하지 않고 데이터 손실 없이 /dev/sdb1
사용 하는 방법을 알아냈습니다 ./dev/sdd1
이는 최신 커널(3.5 이상) 및 mdadm 버전 3.3 이상에서만 작동합니다.
어레이를 마운트 해제합니다.
umount /dev/md0
파일 시스템 검사를 실행하십시오. 다음 단계 전에 완료해야 합니다.
e2fsck -f /dev/md0
파일 시스템 크기를 5TB로 조정합니다.
resize2fs /dev/md0 5000G
파일 시스템에서 또 다른 검사를 실행하십시오. 지금까지 혼란을 일으키지 않도록 하세요.
e2fsck -f /dev/md0
어레이를 5TB 조금 넘게 축소합니다. 여기서 크기 매개변수는 어레이의 각 디스크에서 사용할 공간의 양입니다. 이것은 아마도 (size of fs / number of mirrors) + some small extra
. 제 경우에는 파일 시스템을 5TB로 설정했고, RAID 10에 4개의 디스크가 있어서 2개의 미러링 스트라이프가 생겼습니다. 이는 파일 시스템보다 더 큰 총 크기를 제공해야 하며 그렇지 않으면 데이터가 손실됩니다.
mdadm --verbose --grow --size=2685403136 /dev/md0 # 2.5TB + 1MB
파일 시스템을 다시 확인하십시오.
e2fsck -f /dev/md0
이 시점에서 더 작은 드라이브를 RAID 10에 추가할 수 있지만 먼저 데이터가 양호한지 확인하십시오. 파일 시스템 검사에만 의존하지 마십시오. 실제로 데이터가 양호한지 확인하십시오.
이제 새 드라이브를 추가할 수 있습니다!
mdadm --add /dev/md0 /dev/sdf1 /dev/sdg1
그리고 이를 사용하기 위해 배열을 확장합니다.
mdadm --verbose --grow --raid-devices=6 /dev/md0
이 시점에서 a를 실행하면 cat /proc/mdstat
다음이 표시됩니다.
Personalities : [raid6] [raid5] [raid4] [raid0] [raid10]
md0 : active raid10 sdd1[5] sdb1[4] sdf1[3] sde1[2] sdc1[1] sda1[0]
5370806272 blocks super 1.2 512K chunks 2 near-copies [6/6] [UUUUUU]
[>....................] reshape = 2.8% (151477952/5370806272) finish=458.7min speed=189604K/sec
bitmap: 11/31 pages [44KB], 131072KB chunk
unused devices: <none>
재구성이 완료된 후 또 다른 파일 시스템 검사를 수행하십시오. (저는 편집증이 있어서 모든 단계를 확인하겠습니다.)
e2fsck -f /dev/md0
이제 드라이브가 지원하는 최대 크기로 어레이 크기를 조정합니다.
mdadm --verbose --grow --size=max /dev/md0
그런 다음 파일 시스템의 크기를 조정하십시오.
resize2fs /dev/md0
그리고 다시 확인해 보세요.
e2fsck -f /dev/md0
마지막으로 새로 확장된 파일 시스템을 마운트할 수 있습니다.
mount /dev/md0 /mnt/raid10