向 mdadm raid10 添加新設備 - 新設備的扇區更少
我正在嘗試添加兩個新驅動器,以在使用核心 4.4.6-1 進行 debian 測試時增加使用 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
我是否最好將數據從陣列中移出,銷毀它,然後用更小的分區創建它,以便我可以包含新驅動器?
所以我想出了一種方法來做到這一點,使用
/dev/sdb1
and/dev/sdd1
,而不重建數組,也不會失去數據。這僅適用於現代核心(3.5 或更高版本)和 mdadm 版本 3.3 或更高版本。
解除安裝陣列。
umount /dev/md0
執行文件系統檢查。必須在下一步之前完成。
e2fsck -f /dev/md0
將文件系統的大小調整為 5 TB。
resize2fs /dev/md0 5000G
在文件系統上執行另一個檢查。確保我們到目前為止沒有搞砸。
e2fsck -f /dev/md0
將陣列縮小到剛剛超過 5 TB。這裡的 size 參數是陣列中每個磁碟要使用多少空間。這應該是
(size of fs / number of mirrors) + some small extra
。就我而言,我將文件系統設置為 5 TB,我在 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
如果您不需要分區表
/dev/sd[bd]
(基本上,如果您不需要從任一驅動器啟動),您可以將整個驅動器添加到陣列中;這應該提供足夠的部門:mdadm /dev/md0 --add /dev/sdb /dev/sdd
或者,您可以在新分區上創建一個新的、降級的陣列,將您的數據遷移到它,並逐步將驅動器從舊陣列移動到新陣列。