mdadm RAID1:您可以增加到 3 个磁盘,然后恢复到 2 个吗?

mdadm RAID1:您可以增加到 3 个磁盘,然后恢复到 2 个吗?

我有一个 Linux (CentOS7) 软件 RAID1 系统,其中两个磁盘已经老化。其中之一已经开始显示出失败的迹象。我希望一次用新磁盘逐步淘汰这些磁盘,但始终保持完全镜像处于活动状态。

我正在考虑为三向镜像添加第三个新磁盘,然后使旧磁盘失效,用另一个新磁盘重复,然后使第二个旧磁盘失效。这样我就总是有一个镜像,而不是在失败事件后等待突袭重建。

这似乎可以与 num-devices=3 一起使用并增长,但是,当我完成后,如何将其“缩小”回两个设备?我似乎找不到我正在尝试的参考。

答案1

正如其他人指出的那样,您最终可能会缩小你的数组通过发出mdadm --grow命令。 (即使此过程的全部目的是降低丢失的可能性,也不要忘记确保您的数据已备份 - 人为错误总会发生)。

请注意,循环设备为您提供了一种方便的方法来测试和改进您的程序。这是一个完整的示例。

创建四个块设备和其中两个的一个RAID1阵列,格式化并挂载它:

$ fallocate -l 521MiB avolume1
$ fallocate -l 521MiB avolume2
$ fallocate -l 521MiB avolume3
$ fallocate -l 521MiB avolume4
$ sudo losetup -f avolume1
$ sudo losetup -f avolume2
$ sudo losetup -f avolume3
$ sudo losetup -f avolume4
$ sudo mdadm --create --run -n 2 -l 1 /dev/md17 /dev/loop0 /dev/loop1
mdadm: Note: this array has metadata at the start and
...
mdadm: array /dev/md17 started.
$ cat /proc/mdstat
Personalities : [raid1] [raid10]
md17 : active raid1 loop1[1] loop0[0]
      532480 blocks super 1.2 [2/2] [UU]
$ sudo mkfs.ext4 /dev/md17
mke2fs 1.46.2 (28-Feb-2021)
...
Writing superblocks and filesystem accounting information: done
$ sudo mount /dev/md17 /mnt

增加数组,添加第三个块设备:

$ sudo mdadm --grow /dev/md17 -n 3 --add /dev/loop2
mdadm: added /dev/loop2
raid_disks for /dev/md17 set to 3
$ cat /proc/mdstat
Personalities : [raid1] [raid10]
md17 : active raid1 loop2[2] loop1[1] loop0[0]
      532480 blocks super 1.2 [3/3] [UUU]

失败并从阵列中删除初始块设备之一:

$ sudo mdadm /dev/md17 --fail /dev/loop0
mdadm: set /dev/loop0 faulty in /dev/md17
$ sudo mdadm /dev/md17 --remove /dev/loop0
mdadm: hot removed /dev/loop0 from /dev/md17
$ cat /proc/mdstat
Personalities : [raid1] [raid10]
md17 : active raid1 loop2[2] loop1[1]
      532480 blocks super 1.2 [3/2] [_UU]

将第四个块设备添加到数组中:

$ sudo mdadm /dev/md17 --add /dev/loop3
mdadm: added /dev/loop3
$ cat /proc/mdstat
Personalities : [raid1] [raid10]
md17 : active raid1 loop3[3] loop2[2] loop1[1]
      532480 blocks super 1.2 [3/3] [UUU]

从数组中删除第二个初始块设备:

$ sudo mdadm /dev/md17 --fail /dev/loop1
mdadm: set /dev/loop1 faulty in /dev/md17
$ sudo mdadm /dev/md17 --remove /dev/loop1
mdadm: hot removed /dev/loop1 from /dev/md17
$ cat /proc/mdstat
Personalities : [raid1] [raid10]
md17 : active raid1 loop3[3] loop2[2]
      532480 blocks super 1.2 [3/2] [U_U]

最后,增大(缩小)数组:

$ sudo mdadm --grow -n 2 /dev/md17
raid_disks for /dev/md17 set to 2
$ cat /proc/mdstat
Personalities : [raid1] [raid10]
md17 : active raid1 loop3[3] loop2[2]
      532480 blocks super 1.2 [2/2] [UU]

答案2

正如 SMART 所建议的,在 RAID10 配置中,我有一个“即将失效”的驱动器。我一直在寻找类似的解决方案,以免在添加新驱动器之前降低阵列性能。我使用mdadm --replace并做了我希望的事情,同步了新驱动器,然后将即将失效的驱动器设置为有故障。注意,在发出替换命令之前需要添加新驱动器作为备用驱动器

$> mdadm /dev/md0 --add /dev/new
$> mdadm /dev/md0 --replace /dev/old

注意:如果在阵列处于降级模式时添加/dev/new,则不会将其添加为备用阵列,而是开始重建阵列。

关于 RAID10 的注意事项:添加和扩展 raid10 不会更改布局,即 n2 --> n3(3way 镜像),因为 mdadm 软件 raid10 中可以存在奇数个磁盘。

答案3

mdadm /dev/<md> --fail <real_dev>    # first fail the disk
mdadm /dev/<md> --remove <real_dev>  # then remove it

相关内容