将新设备添加到 mdadm raid10 - 新设备的扇区较少

将新设备添加到 mdadm raid10 - 新设备的扇区较少

我正在尝试添加两个新驱动器来扩展使用 mdadm v3.4 在使用内核 4.4.6-1 进行 debian 测试时创建的 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

我是否最好将数据从阵列中移出,销毁它,然后用较小的分区创建它,以便我可以包含新驱动器?

答案1

如果您不需要分区表/dev/sd[bd](基本上,如果您不需要从任一驱动器启动),则可以将整个驱动器添加到阵列中;这应该提供足够的部门:

mdadm /dev/md0 --add /dev/sdb /dev/sdd

或者,您可以在新分区上创建一个新的降级阵列,将数据迁移到该阵列,然后逐步将驱动器从旧阵列移动到新阵列。

答案2

所以我想出了一种方法来做到这一点,使用/dev/sdb1/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 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

相关内容