mdadm:在 RAID5 中将小硬盘换成大硬盘,如何分区?

mdadm:在 RAID5 中将小硬盘换成大硬盘,如何分区?

因此,我了解了在 MDADM RAID5 中将较小的硬盘驱动器换成较大的硬盘驱动器的方法:

发生故障并移除一个驱动器。

mdadm -f /dev/md0 /dev/sdd1
mdadm -r /dev/md0 /dev/sdd1

关机,更换硬盘,分区并重新添加阵列

mdadm --add /dev/md0 /dev/sdd1

等待重新同步并继续处理所有剩余的驱动器。

最后扩大阵列

mdadm --grow /dev/md0 --size=max

我的问题是如何对新的更大驱动器进行分区?我在网上看到不同的说明,我知道其中大多数都已过时,所以我想看看最近是否有人这样做过。

  1. 将新驱动器分区为与阵列中的旧驱动器相同的大小

  2. 将新驱动器分区为驱动器的最大大小。

我的设置非常简单,4 个驱动器,每个驱动器为 RAID5,大小为 350GB。每个驱动器上只有一个分区,并构建一个阵列。这是一个数据存档磁盘,因此不需要多个阵列或分区。

我正在考虑的另一种方法是备份到一个驱动器,构建一个 3 驱动器阵列,然后将备份驱动器添加到该阵列。即:

  • 删除一个驱动器(350GB)
  • 添加新驱动器(1TB)
  • 将我的所有数据备份到新驱动器中(我的 raid 数据将适合新驱动器)
  • 取出剩余的 3 个(350GB)旧驱动器
  • 放入剩余的 3 个 (1TB) 新硬盘
  • 构建 3 驱动器阵列
  • 将数据从第一个新驱动器复制到阵列
  • 擦除备份磁盘并添加到阵列,使其成为 4 个驱动器。

这样是不是更安全?更快?你觉得呢?

答案1

最终,您将需要有“raid 分区”来获得磁盘的最大大小;无论您在重建时执行此操作还是在更新阵列后重新分区都没有关系。

我最近做了类似的事情,速度相当快。请注意,您可以设置 raid 重建速度 (/proc/sys/dev/raid/speed_limit_min/max),默认情况下,它仅限于后台重建。

请注意,您的计划中缺少一个步骤:您需要指示 md 层顶部的东西也增长(文件系统、lvm pv 或......)

但是,如果你能做到(可以让系统停机更长时间,投入更多时间,并且有足够的磁盘插槽),将所有内容复制到备份磁盘上可能更安全。数据始终清晰可见,这让我感到很欣慰。

答案2

当前版本的 md 工具支持在保持 RAID(以及冗余)工作的同时更换设备。

您需要能够在计算机中添加至少一个设备,但此后,您不需要在重建期间将阵列保持在降级状态数小时(或数天,对于当前的多 TB HDD)。

首先,您需要将一个磁盘作为备用磁盘添加到阵列(假设 RAID 中有 4 个驱动器):

mdadm /dev/md0 --add /dev/sde1

然后,告诉 Linux 开始将数据移动到新驱动器:

mdadm /dev/md0 --replace /dev/sda1 --with /dev/sde1

替换完成后,该设备被标记为故障,因此需要将其从阵列中删除:

mdadm /dev/md0 --remove /dev/sda1

对阵列中的其他驱动器重复此操作。

如果您有能力连接多个附加驱动器,则可以同时对所有驱动器执行此操作,同时保持阵列在线并具有完全冗余。因此,以下是一组有效的命令:

mdadm /dev/md0 --add /dev/sde1 /dev/sdf1 /dev/sdg1 /dev/sdh1
mdadm /dev/md0 --replace /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1 --with /dev/sde1 /dev/sdf1 /dev/sdg1 /dev/sdh1

等到完成,删除旧驱动器:

mdadm /dev/md0 --remove /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1

答案3

最简单/最安全的方法是使用更大的磁盘阵列

  • 将所有数据复制到外部驱动器
  • 移除所有小磁盘并用大磁盘替换它们
  • 在更大的磁盘上创建新阵列
  • 复制数据

这也会为您提供两份数据副本:一份在外部驱动器上,另一份仍在您移除的较小驱动器集合上。(请仔细跟踪哪个磁盘是哪个!)

我认为您不能通过添加磁盘来扩展 RAID-5 阵列。您将创建一个 3 磁盘 RAID-5 阵列,将数据复制到新阵列后,您能做的最好的事情就是将第四个磁盘标记为热备用……这与 4 磁盘 RAID-5 阵列并不完全相同。

答案4

我问了自己同样的问题,只是用 4x 400 GB 磁盘 RAID5(我们称之为 /dev/md1)替换为更大的磁盘(介于 2 到 4 TB 之间)。在此基础上使用 LVM。

我想到了一个不太优雅的解决方案,如下所示:

移除一个磁盘(根据磁盘的 SMART 值,最好是移除最容易出错的磁盘),将其替换为新磁盘。对新磁盘进行分区,其中一个分区大小与旧磁盘相同,另一个分区用于剩余部分。将相同大小的分区添加到 RAID /dev/md1 并等待重新同步完成。

然后对下一个磁盘重复同样的操作。现在您有两个额外的未使用的分区。在它们上启动新的 RAID 5。将新的 RAID5(例如 /dev/md2)作为物理卷(PV)添加到 /dev/md1 上使用的卷组。在更换两个磁盘后,您已经拥有更多可用的冗余磁盘空间。

对第三和第四个磁盘执行相同操作,将它们作为附加磁盘添加到 /dev/md2,然后在设备上运行 pvresize。

不过,我怀疑我会按照这个帖子中已经建议两次的方式去做:把所有的东西(目前约占 RAID 的 1.2 TB 中的 700G)放在一个外部磁盘上(可能是新的磁盘之一),然后启动一个有三个磁盘的新 RAID5 阵列,将数据复制回来,然后添加最后一个用作临时存储的磁盘。

相关内容