我最初使用只能寻址每个磁盘 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(在 中/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
没有找到 3 TB 的大小。
我跑了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。
在同步完成之前不要删除其他磁盘!