MD RAID 1与外部位图不完全重新同步

我有一个有趣的configuration:具有RAID 1的双引导系统,需要在Windows和Linux中都可见。 Windows安装是Win 7 Enterprise,Linux安装是Kubuntu 10.04。 为了使RAID工作,我使用Windows的“dynamic磁盘”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 

确实是在位图中读取的,随后的重新同步进行得很快,因为大部分块被标记为干净的。 令人困惑的部分是,这种重新同步进一步减less了脏块的数量,但仍然没有删除所有这些。 通过反复停止和重新启动,我可以慢慢地把脏块数减less到0.6%左右,看起来是平稳的。

任何想法可能导致这个? 它在某个地方闻到了一种竞争条件,导致块在同步期间被跳过,或者没有从位图中清除,但是我确实没有证据certificate这一点。 它看起来不像硬件问题,因为这两个驱动器都是新的,并且具有零读取错误和由smartctl -a报告的重新分配的扇区。

我希望我不会用这个快速猜测冒犯你,但是你是否监视了/proc/mdstat文件,以确保在你检查了mdadm -X之前,你已经完成了--build操作?

 # 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上运行。 将位图文件存储在其他文件系统上可能会导致严重的问题。