将Linux MD RAID 10阵列扩展以使用更大的磁盘。

据我所知,这是可能的,但我无法找到任何关于如何进行的直接答案,而且我不想冒险尝试自己实验以避免数据丢失,所以我在这里询问。 我有一个运行CentOS的家庭服务器,其中包含五个磁盘。其中一个是持有操作系统的SSD。其余四个磁盘是配置为mdraid RAID10的4TB硬盘驱动器。正在使用的文件系统是xfs。 我考虑尝试用8TB的硬盘替换4TB的硬盘。要使此替换发生而无需重新配置新的RAID并且不会丢失数据,需要做什么?
Details output:

[root@fluttershy ~]# mdadm -D /dev/md127
/dev/md127:
        Version : 1.2
  Creation Time : Mon Apr 18 12:46:24 2016
     Raid Level : raid10
     Array Size : 7813771264 (7451.79 GiB 8001.30 GB)
  Used Dev Size : 3906885632 (3725.90 GiB 4000.65 GB)
   Raid Devices : 4
  Total Devices : 4
    Persistence : Superblock is persistent

  Intent Bitmap : Internal

    Update Time : Mon Jun 13 11:04:41 2016
          State : clean 
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

         Layout : near=2
     Chunk Size : 512K

           Name : fluttershy:data  (local to host fluttershy)
           UUID : aa8f857a:g8bd0344:06d2f6d3:bac01a46
         Events : 13440

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync set-A   /dev/sda1
       1       8       17        1      active sync set-B   /dev/sdb1
       2       8       33        2      active sync set-A   /dev/sdc1
       3       8       49        3      active sync set-B   /dev/sdd1
2个回答

对每个磁盘完成以下步骤;根据需要将/dev/sda1替换为其他磁盘。在进行下一个磁盘之前,您必须完成一个磁盘的所有这些步骤。

  • 将磁盘标记为故障状态,使MD停止使用它:mdadm --manage /dev/md127 --fail /dev/sda1
  • 从数组中删除磁盘:mdadm --manage /dev/md127 --remove /dev/sda1
  • 物理替换磁盘。
  • 使用类型0xDA对新磁盘进行分区,其中一个分区跨越整个磁盘。
  • 将新磁盘添加到数组中:mdadm --manage /dev/md127 --add /dev/sda1

一旦添加了替换磁盘,MD将重新构建阵列。确保重建完成之前再进行下一个磁盘。您可以通过运行cat /proc/mdstat来检查阵列的状态。

一旦所有的磁盘都被更换并重新构建了阵列,使用mdadm --grow /dev/md127 --size=max命令扩展阵列以填满所有磁盘的最大容量。然后,您可以从那里调整文件系统以填充扩展的RAID;在您的情况下,请使用xfs_growfs命令。 有关如何扩展MD阵列的更多信息,请参考Linux RAID wiki。 与任何其他磁盘操作任务一样,在开始之前,请务必备份数据。

1也许可以在检查重建进度时添加以下步骤: tim@MushaV3 ~ $ cat /proc/mdstat Personalities : [raid1] [raid10] [raid6] [raid5] [raid4] [multipath] md1 : active raid1 sdb1[0] sda1[1] 131008 blocks [2/2] [UU] bitmap: 0/1 pages [0KB], 65536KB chunk - djsmiley2kStaysInside

你首先会想要逐个替换每个磁盘。 为了做到这一点,你需要“故障”每个磁盘,并用新的8Tb替代品来取而代之。实际上,如果你有多余的端口,你可以添加额外的磁盘,然后使用mdadm的“替换”功能,而不是从阵列中移除一个磁盘,这样失败的风险就会更高。 这个问题详细说明了我能找到的最安全的方法 完成这些操作后,你只需要将现有的文件系统扩展到新创建的空间即可。看起来这个命令是“xfs_growfs”,但是我对xfs没有经验,不能解释具体如何操作。 正如往常一样,备份永远准备好(并且RAID不是备份)。

使用RAID10和mdraid进行设置,额外的空间会被识别吗?我应该一次交换两个硬盘,每次从镜像对中选择一个吗? - Kefka
只有在交换所有的磁盘后,你才需要添加空间,然后它就会被识别出来。 - djsmiley2kStaysInside

  • 相关问题