mdraid 重新同步如何工作?

dmn*_*mnc 4 software-raid mdadm dd synchronization

我在一个镜像中有两个驱动器(linux sw raid/mdadm);一个驱动器在过去不知何故离开了镜子,它的内容现在已经有好几天了。此时,我正在使用降级镜像(缺少一个驱动器)并考虑:

  • 将最新驱动器克隆到第二个驱动器 dd
  • 添加第二个驱动器并重新同步,但我不知道重新同步过程如何工作以及哪些数据将被覆盖(该镜像上有 LVM 卷)

我认为dd是安全的方式,无论如何我对重新同步的工作方式很感兴趣。

der*_*ert 10

正确的做法是这样的mdadm --add /dev/md0 /dev/sdb1。使用正确的数组代替 ,md0使用正确的分区代替sdb1

关键是阵列正在运行。它完全明确要复制哪些数据:当前正在运行的数据。如果您启用了位图,则重新同步将相当快,因为​​它只会复制已更改的内容。否则,它将复制所有内容。

如果你非常偏执——或者你担心你的磁盘系统可能丢失了写入,并且位图可能不正确——并且不介意强制完整复制,你可以擦除你想要的磁盘上的超级块添加使用mdadm --zero-superblock /dev/sdb1(再次使用正确的分区)。

如果阵列当前没有运行(例如,如果这是从不干净的关闭中重新组装的),则使用存储在超级块中的更新计数字段来决定复制什么。它可能拒绝重新添加更新计数过高的磁盘(迫使您将超级块归零),但它不会覆盖活动数据。

如果您要使用该dd方法,那么: (a) 您最终会复制超级块,并且最终会得到两个磁盘 1(超级块存储磁盘在阵列中的位置);(b) 你会有一个不一致的副本,除非你在复制过程中停止了阵列(或者可能处于只读模式)。(然后,要修复 a 和 b,您需要擦除超级块并让 mdraid 复制数据,如上所述)。

简而言之,当您决定使用 mdraid(或任何其他 RAID)时,您就为其提供了冗余管理。你几乎不想绕过它。与 LVM 相同:如果您想移动数据,请使用pvmove等。您不使用dd.

PS:“一个驱动器不知何故离开了镜子”不是你应该接受的。有日志;弄清楚它为什么离开了镜子。即使是最新的内核,坏块也不会再丢弃驱动器,因此不应发生随机驱动器丢弃。检查智能状态等。