我最近决定扩展配置有 mdadm raid1 卷的 NAS。由于磁盘槽位有限,其流程大致为:
- 拉出其中一张磁盘并将其更换为更大的磁盘
- 问题
mdadm /dev/md0 --add /dev/sda1
- 等待新磁盘上的重新同步完成
- 拉出另一个磁盘并更换它
- 问题
mdadm /dev/md0 --add /dev/sdb1
- 等待重新同步完成
- 问题
mdadm /dev/md0 --grow --size=max
步骤 7 是必要的,因为否则 md0 将保持旧大小,即使它现在完全位于更大的磁盘上。
我的问题是,为什么mdadm
在第 7 步之后需要再次重新同步?它正在同步什么数据,从哪里同步到哪里?旧卷上的所有数据在步骤 2 和 5 之后的重新同步过程中已完全同步,因此步骤 7 后唯一的新数据是替换磁盘后半部分上的任何垃圾。
答案1
即使是 RAID 1 上的“垃圾”也需要相同。这与创建 MD 阵列后发生的重新同步相同,请参阅初始数组创建在内核维基上。
初始重新同步(以及增长后重新同步)的最大原因是进行检查和修复工作——分支之间的差异会在检查期间导致错误。
如果您确定磁盘的内容相同(例如它们已归零),则可以--assume-clean
与增长操作一起使用。来自 mdadm 联机帮助页:
当使用 --grow --size= 将数组大小调整为更大的大小时,新空间通常会以与创建时重新同步整个数组相同的方式重新同步。从 Linux 版本 3.0 开始,--assume-clean 可以与该命令一起使用以避免自动重新同步。