Software-Raid

升級可見大小的磁碟時增加/調整 RAID

  • September 20, 2012

我最初使用每個磁碟只能定址 2TB 的控制器創建了一個軟體 RAID。這些磁碟是 3 TB 磁碟。它工作得很好,但只使用了每個磁碟的前 2TB。

我現在更改了控制器以查看完整的 3TB。因此,我也想/dev/md0使用最後的 1 TB。

我努力了:

# 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。

mddm 詳細資訊:

# 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沒有找到 3 TB 大小。

我跑了mdadm --stop /dev/md0。刪除了 /etc/mdadm/mdadm.conf 中的條目。Ran mdadm -A --scan --force,這導致 RAID 上線並重建。

我在 /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然後調整大小完成。

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