mdadm 自动从阵列中删除驱动器

mdadm 自动从阵列中删除驱动器

我已使用 mdadm 成功配置了 raid 1 阵列。两个驱动器都有一个 raid 分区和一个安装了 GRUB 的 uefi 分区。

当我执行“cat /proc/mdstat”时,我有一个带有 2x UU 的工作阵列。

但是,当我执行以下操作时,我的数组就消失了:

  1. 断开 sda 的 sata 和电源线
  2. 使用 sdb 降级启动,关闭
  3. 然后再次连接sda,断开sdb
  4. 使用 sda 降级启动,关机
  5. 再次连接两个磁盘并运行 cat /proc/mdstat
  6. 结果 = 数组消失:

    md0 : active raid1 sdb2[1]
          3905908736 blocks super 1.2 [2/1] [_U]
          bitmap: 11/30 pages [44KB], 65536KB chunk
    

我这样做了两次,我受够了这种行为。此时我必须重新创建阵列并重新添加 sda。但是重建阵列需要很长时间,因为它是 4TB 驱动器。

我应该提到的一件重要的事情是,只有一个驱动器(sda)在降级模式下正确启动。另一个驱动器(sdb)在紧急模式下启动。但我找到了如何解决这个问题的方法。问题出在 /etc/fstab 文件中。

UUID=64C3-7807  /boot/efi       vfat    umask=0077      0       1

它指向 sda 的 UUID。更改 fstab 文件中的 UUID 后,我可以正常启动 sdb。也许我可以将两个驱动器都放在 fstab 中?

那么这里发生了什么?或者有没有办法快速重新添加 sda?

答案1

  1. 断开 sda 的 sata 和电源线
  2. 使用 sdb 降级启动,关闭
  3. 然后再次连接sda,断开sdb
  4. 使用 sda 降级启动,关机

当你这样做时,两个驱动器将要存在差异。这将通过元数据中的不同时间戳来标记。这是有意为之且预期的行为。您不再拥有一致的阵列,因此一个驱动器将被标记为失败。

Linux 无法知道哪个驱动器是正确的,因此您必须手动将驱动器添加到阵列。可能有一个驱动器实际上发生故障,但您设法从该驱动器启动,因为错误远离系统文件使用的区域。它可能具有最新的签名,但有故障。

或者可能正好相反。这不应该自动化——这可能会覆盖您想要保留的数据。

我不确定您希望它如何表现,但当您遇到不一致时,这是 RAID 1 阵列的合理行为方式:手动解决。

由于 md 是块层协议,它将所有内容从一个驱动器写入另一个驱动器,以保证内容确实相同。如果您想要更高级别(例如文件系统级别)的冗余,您可以看看 btrfs 或 zfs,它们都具有此方向的高级功能。

无论如何,这听起来像是一个xy问题,所以我有点好奇你为什么甚至希望它能工作——因为我不认为 RAID 是为了解决你试图解决的任何问题。

相关内容