升级可见磁盘大小时增加/调整RAID


10

我最初使用控制器创建软件RAID,每个磁盘只能寻址2TB。磁盘是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联机并重建。


您正在使用20个完整磁盘用于RAID6-对吗?每个磁盘上没有分区吗?是什么fdisk -l /dev/sdd节目?您正在使用什么操作系统,什么是mdadm-version?
尼尔斯2012年

Answers:


5

我在/ 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

糟透了 但是好消息是在syslog中它说:

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调整大小已完成。


我非常喜欢parallel(1)插件Ole :)感谢您的调查,只是遇到了类似情况。
Michael Shigorin

1
我想“ mdadm --update = devicesize”也可以做到这一点,请参见手册页:“这将使mdadm确定每个设备上的最大可用空间量并更新元数据中的相关字段。”
rudimeier 2014年

3

我认为在创建过程中,设备的大小已注册在元数据中的某个位置。更改控制器不会更改元数据。

从md中删除备用磁盘,然后将其作为新驱动器重新添加到RAID集。您可能必须删除元数据(检查手册页中的--zero-superblock或擦除整个磁盘)。如果该选项适用于单个磁盘,请对所有剩余的industry驱动器也重复该过程。然后最后执行--grow。

在同步完成之前,请勿删除其他磁盘!!


我不清楚您是否已经测试了它是否确实有效。重建大约需要1.5天。更换所有20个驱动器将导致整个月的运行降级。当您编写“如果适用于单个磁盘”时,如何测试它适用于单个磁盘?
Ole Tange'4

不,我还没有测试过,但是我之前见过一些md问题,并且对它的工作方式有一些感觉……并且失败了。我没有带有不良元数据的驱动器来测试它。我知道同步时间很长,因此建议您使用备用时间。您具有RAID6,这意味着2个驱动器可能发生故障,并且您有一个备用磁盘。这意味着总共有3个驱动器在出现问题之前会发生故障。您可以检查一个驱动器,至少知道这是否是您的问题。关于您的设置,我只有有限的信息。如果您
不习惯

哦,我明白你的问题。mdadm会警告您,您正在尝试添加比其他设备大得多的设备。它不介意几个字节,但是当差异较大时会警告您。
jippie 2012年

1
您可以先fail驱动器,然后驱动器,然后removezero-superblock删除元数据。在使用RAID集时,您可以将其添加为备用集,这意味着它不会同步,直到另一个驱动器发生故障(这是正常行为),但它仅适用于单个驱动器或者您add需要同步。我知道这需要永远。或者您接受不能添加所有可用存储的事实。使用您没有使用的分区表的优点之一。不使用分区表也不错,但是在这种情况下可以帮助您。
jippie 2012年

1
请参阅上面的评论:“ mdadm会警告您,您正在尝试添加比其他设备大得多的设备。”
jippie 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.