将 Linux 软件 raid 从 raid5 转换为 raid6

将 Linux 软件 raid 从 raid5 转换为 raid6

我目前有一台文件服务器,其中有 3 个 1.5TB 磁盘,组成一个 RAID5 阵列。由于磁盘已满,我又买了 3 个磁盘(每个也是 1.5TB)。

现在我想切换到 RAID6,因为 6TB 空间足够了,而且我希望 raid6 的安全性更高。虽然我有完整备份 - 即我可以简单地创建一个新阵列并恢复备份 - 但我希望切换而不恢复备份。这可能吗?如果可以,怎么做?

答案1

您正在寻找的术语是“RAID 级别迁移”。

根据,这是可能的。我还没有这样做,但该过程看起来您应该将新驱动器作为热备用添加到现有阵列,然后使用 mdadm 更新 raid 级别和 raid 设备数量。

您需要一个最新的 mdadm 来执行此操作:mdadm-2.6.9(例如 centos 5.x)似乎不支持它,但 mdadm-3.1.4(例如 ubuntu 11.10)支持:

   Grow   Grow (or shrink) an array, or otherwise reshape it in some way.  Currently supported growth options including changing the active size of component devices and
          changing the number of active devices in RAID levels 1/4/5/6, changing the RAID level between 1, 5, and 6, changing the chunk size and  layout  for  RAID5  and
          RAID5, as well as adding or removing a write-intent bitmap.

例如,首先向 RAID5 阵列添加新的热备用设备 /dev/sdg:

$ sudo mdadm --manage /dev/md/md0 --add /dev/sdg

然后转换为 RAID6 阵列并重建为干净状态。--raid-devices 4 告诉您新阵列中总共有多少个驱动器。

$ sudo mdadm --grow /dev/md/md0 --raid-devices 4 --level 6

不过我不知道这会有多快。根据我在硬件 RAID 控制器上进行 RAID 级别迁移的经验,从头开始创建新阵列并将备份恢复到其中会更快。

答案2

强制性警告:做好故障计划。准备好备份,并考虑可能的停机时间。

另外,之前在虚拟机或类似设备上测试过,这是我的笔记,我很久没有这样做了。这可能不完整。

  1. 您将需要将add磁盘加入阵列:

    mdadm --manage /dev/md0 --add /dev/sdf  
    

    对三个磁盘中的每一个执行此操作,并相应地替换设备名称。

  2. 扩大数组:

    mdadm --grow /dev/md0 --level 6 --raid-devices 6 
    

答案3

使用该--backup-file选项,这样在断电的情况下,您可以在重启后继续扩展设备并确保不会丢失数据。

mdadm --grow /dev/md0 --level=raid6 --raid-devices=6 --backup-file=/root/mdadm5-6_backup_md0

备份文件应该保存在文件系统上,而不是您要扩展的阵列的一部分。

--backup-file=在没有备用设备可用的情况下,当用于增加 RAID5 或 RAID6 中的 RAID 设备数量,或用于缩小、更改 RAID 级别或布局时,需要使用 RAID 设备--grow。请参阅下面有关 RAID 设备更改的“增长模式”部分。该文件必须存储在单独的设备上,而不是正在重塑的 RAID 阵列上。

--continue--freeze-reshape是组装选项的补充。当--grow操作因阵列组装期间的使用而中断且未自动重新启动时,需要此选项。此选项与、 ( ) 命令和设备--freeze-reshape一起使用,以继续待定的重塑。重塑继续所需的所有参数都将从阵列元数据中读取。如果初始命令需要设置选项,则继续选项也需要提供完全相同的备份文件。-G--grow--grow--backup-file=

与选项一起传递的任何其他参数--continue将被忽略。

答案4

似乎每个人都建议先将一个磁盘添加到阵列中,然后移动到 RAID6,然后添加剩余的磁盘并扩大 RAID6。请记住,这会导致两次耗时的磁盘上所有数据的重新排列。更糟糕的是,添加一个磁盘并从 RAID5 移动到 6 的步骤非常慢,因为它必须在原地完成。因此,mdadm 模块必须读取一个数据块,将其写入备份文件,然后同步该文件,然后用重新排列的数据覆盖同一块,然后同步该块,然后移动到下一个块。

此备份文件对于在重组过程中断电和/或磁盘发生故障的情况非常重要。虽然对于许多算法而言,原地重组比异地重组要好,但对于 RAID 重组而言并非如此,因为存在额外的安全要求。如果没有这些,您就不会进行 RAID5 或 RAID6。

相反,如果您从 RAID5 升级到 RAID6 并合并更多空间,则作业的“读取”部分(遵循原始 RAID5 布局,磁盘较少)将比“写入”部分进展得更快。使用缓慢的就地逻辑处理前几个块后,mdadm 可以自由发出读取和写入,并且只需每隔这么多块更新元数据中的“已处理”指针即可。

因此,我强烈建议一步完成所有操作:

mdadm --manage /dev/mdN --add /dev/sdd /dev/sde /dev/sdf
mdadm --grow /dev/mdN --raid-devices 6 --level 6 --backup-file /path/to/file

在目前的大型驱动器上,这将花费很长时间,但您可以在阵列重塑期间继续使用阵列。不过,性能比正常情况要差。

相关内容