我有一个由 3 个驱动器组成的软件 RAID-5,分别称为 A、B、C。我想用一个容量更大的新驱动器替换旧的 C 驱动器,以最终扩展阵列。这是在运行 mdadm 来管理驱动器的 Ubuntu 16.04 系统上。
在线搜索建议通过设置故障模式使驱动器 C 脱机,将其从阵列中移除,添加新的驱动器 D 并让阵列重新同步。我担心在重新同步过程进行时(对于 1.5 TB 驱动器来说,大约需要一天的时间),阵列很脆弱,如果驱动器 A 或 B 发生故障,阵列可能会丢失。
有没有办法,将新的驱动器 D 添加到阵列并让其先“镜像/同步”驱动器 C 的内容,然后仅使驱动器 C 发生故障/删除,这样阵列就不需要重新同步了?
注意:我根据评论编辑了一些术语以澄清问题
答案1
根据那里接受的答案,只要你至少有 mdadm 3.3 和内核 3.2(据我所知 ubuntu 16.04 有),你首先将设备添加为备用,然后告诉 mdadm 你想用新驱动器替换旧驱动器。
# mdadm /dev/md0 --add /dev/sdc1
# mdadm /dev/md0 --replace /dev/sdd1 --with /dev/sdc1
其中 sdc1 是新驱动器,sdd1 是旧驱动器。
答案2
取决于您使用的具体设备。我能想到的所有潜在选项都要求您能够在所有旧驱动器都连接的情况下插入新驱动器,但一般来说,您可以执行以下任何操作:
- 重新调整阵列以包含新驱动器,然后再次重新调整以移除旧驱动器。几乎任何合理的软件 RAID 实现都应该能够做到这一点,其中大多数也可以在线实现,尽管这样做效率极低。
- 将新驱动器作为热备用驱动器添加到阵列,使旧驱动器发生故障,然后从阵列中删除旧驱动器(因为现在阵列应该将其视为热备用驱动器)。大多数软件 RAID 实现通常都支持这种方式,并且比第一种选择更有效率(它只重建一次奇偶校验,而不是两次)。
- 如果你有一个真的如果您使用的是不错的软件 RAID 实现,或者使用的是 BTRFS(或者可能是 ZFS,我不知道它们是否支持),您实际上可以替换驱动器,甚至无需重建阵列。对于 BTRFS,这将通过命令来实现
btrfs device replace
,该命令本质上相当于在线克隆旧设备。