我已使用 mdadm 成功配置了 raid 1 阵列。两个驱动器都有一个 raid 分区和一个安装了 GRUB 的 uefi 分区。
当我执行“cat /proc/mdstat”时,我有一个带有 2x UU 的工作阵列。
但是,当我执行以下操作时,我的数组就消失了:
- 断开 sda 的 sata 和电源线
- 使用 sdb 降级启动,关闭
- 然后再次连接sda,断开sdb
- 使用 sda 降级启动,关机
- 再次连接两个磁盘并运行 cat /proc/mdstat
结果 = 数组消失:
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
- 断开 sda 的 sata 和电源线
- 使用 sdb 降级启动,关闭
- 然后再次连接sda,断开sdb
- 使用 sda 降级启动,关机
当你这样做时,两个驱动器将要存在差异。这将通过元数据中的不同时间戳来标记。这是有意为之且预期的行为。您不再拥有一致的阵列,因此一个驱动器将被标记为失败。
Linux 无法知道哪个驱动器是正确的,因此您必须手动将驱动器添加到阵列。可能有一个驱动器实际上发生故障,但您设法从该驱动器启动,因为错误远离系统文件使用的区域。它可能具有最新的签名,但有故障。
或者可能正好相反。这不应该自动化——这可能会覆盖您想要保留的数据。
我不确定您希望它如何表现,但当您遇到不一致时,这是 RAID 1 阵列的合理行为方式:手动解决。
由于 md 是块层协议,它有将所有内容从一个驱动器写入另一个驱动器,以保证内容确实相同。如果您想要更高级别(例如文件系统级别)的冗余,您可以看看 btrfs 或 zfs,它们都具有此方向的高级功能。
无论如何,这听起来像是一个xy问题,所以我有点好奇你为什么甚至希望它能工作——因为我不认为 RAID 是为了解决你试图解决的任何问题。