Mdadm

向 mdadm raid10 添加新設備 - 新設備的扇區更少

  • March 28, 2016

我正在嘗試添加兩個新驅動器,以在使用核心 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/sdb1and /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

此時,執行 acat /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

或者,您可以在新分區上創建一個新的、降級的陣列,將您的數據遷移到它,並逐步將驅動器從舊陣列移動到新陣列。

引用自:https://unix.stackexchange.com/questions/272599