具有外部位图的 MD RAID 1 未完全重新同步

具有外部位图的 MD RAID 1 未完全重新同步

我有一个有趣的配置:双启动系统,带有 RAID 1,需要在 Windows 和 Linux 中都可见。Windows 安装是 Win 7 Enterprise,Linux 安装是 Kubuntu 10.04。为了使 RAID 正常工作,我使用 Windows 的“动态磁盘”RAID 1 进行设置,并使用没有持久超级块的 MD 和另一个分区上的写入意图位图在 Linux 中启动它。(如果没有此位图,MD 无法知道阵列是否同步,并且每次启动阵列时都会进行完全重新同步。)阵列组装如下:

mdadm --build /dev/md1 -l 1 -n 2 -b /var/local/md1.bitmap /dev/sdb2 /dev/sdc2

我以为第一次运行此命令时,它会重新同步阵列,写出没有脏块的位图,一切都会好起来。但事实并非如此:完成重新同步后,位图大多干净,但约有 5% 的脏块仍然存在,正如

mdadm -X /var/local/md1.bitmap

我没有在 /dev/md1 上安装文件系统或者以任何其他方式触碰它。

然后我发现停止并重新启动阵列:

mdadm --stop /dev/md1
mdadm --build /dev/md1 -l 1 -n 2 -b /var/local/md1.bitmap /dev/sdb2 /dev/sdc2

确实读取了位图,随后重新同步,由于大多数块都标记为干净,因此重新同步过程进行得很快。令人困惑的是,这种重新同步进一步减少了脏块的数量,但仍然没有删除所有脏块。通过反复停止和重新启动,我可以慢慢将脏块数量降至 0.6% 左右,似乎已经趋于平稳。

有什么想法可能导致这种情况?我觉得可能是某个地方存在竞争条件,导致块在同步期间被跳过或未从位图中正确清除,但我真的没有证据证明这一点。这看起来不像是硬件问题,因为两个驱动器都是新的,并且没有读取错误和 smartctl -a 报告的重新分配扇区。

答案1

我希望我的猜测不会冒犯您,但是您在检查之前是否监视过该/proc/mdstat文件以确保--build操作已经完成mdadm -X

# cat /proc/mdstat 
Personalities : [raid1] 
md0 : active raid1 nbd0[3] sda10[0]
      53246315 blocks super 1.2 [3/1] [U__]
      [>....................]  recovery =  1.0% (537088/53246315) finish=203.0min speed=4326K/sec
      bitmap: 1/1 pages [4KB], 65536KB chunk

要检查的第二件事是 /var/local 是否是 ext2/ext3,引用 man:

注意:外部位图仅可在 ext2 和 ext3 上使用。将位图文件存储在其他文件系统上可能会导致严重问题。

相关内容