为什么CentOS RAID-1 /镜像分区同步多次?

我正在使用Kickstart设置一个CentOS 5.6服务器。 我有四个磁盘驱动器,sda-sdd。 这些是相关的Kickstart系列:

clearpart --linux --drives=sda,sdb,sdc,sdd --initlabel part raid.11 --size 102400 --asprimary --ondrive=sda part raid.21 --size 16384 --asprimary --ondrive=sda part raid.31 --size 1024 --asprimary --grow --ondrive=sda part raid.12 --size 102400 --asprimary --ondrive=sdb part raid.22 --size 16384 --asprimary --ondrive=sdb part raid.32 --size 1024 --asprimary --grow --ondrive=sdb part raid.41 --size 1024 --asprimary --grow --ondrive=sdc part raid.42 --size 1024 --asprimary --grow --ondrive=sdd raid / --fstype ext3 --device md0 --level=RAID1 raid.11 raid.12 raid swap --device md1 --level=RAID1 raid.21 raid.22 raid /data1 --fstype ext3 --device md2 --level=RAID1 raid.31 raid.32 raid /data2 --fstype ext3 --device md3 --level=RAID1 raid.41 raid.42 

基本上我把前两个磁盘分区为root,swap和一个数据分区。 我将第三和第四个磁盘分区为一个大数据分区。 我设置了前两个磁盘镜像对方,最后两个磁盘镜像对方。 非常简单。

我看到的奇怪的行为是,当我启动新安装的机器时,它不止一次同步一些raid。 这里是相关的/ var / log / messages行:

 Sep 5 15:09:22 dsp-hw1 kernel: md: md3: raid array is not clean -- starting background reconstruction Sep 5 15:09:24 dsp-hw1 kernel: md: syncing RAID array md3 Sep 5 15:09:39 dsp-hw1 kernel: md: md2: raid array is not clean -- starting background reconstruction Sep 5 15:09:39 dsp-hw1 kernel: md: syncing RAID array md2 Sep 5 15:09:53 dsp-hw1 kernel: md: md0: raid array is not clean -- starting background reconstruction Sep 5 15:09:53 dsp-hw1 kernel: md: delaying resync of md0 until md2 has finished resync (they share one or more physical units) Sep 5 15:30:12 dsp-hw1 kernel: md: md2: sync done. Sep 5 15:30:12 dsp-hw1 kernel: md: syncing RAID array md0 Sep 5 15:40:37 dsp-hw1 kernel: md: md3: sync done. Sep 5 15:42:02 dsp-hw1 kernel: md: md0: sync done. Sep 5 16:16:03 dsp-hw1 kernel: md: syncing RAID array md1 Sep 5 16:16:03 dsp-hw1 kernel: md: syncing RAID array md3 Sep 5 16:16:03 dsp-hw1 kernel: md: delaying resync of md2 until md1 has finished resync (they share one or more physical units) Sep 5 16:18:10 dsp-hw1 kernel: md: md1: sync done. Sep 5 16:18:10 dsp-hw1 kernel: md: syncing RAID array md2 Sep 5 16:43:31 dsp-hw1 kernel: md: md2: sync done. Sep 5 16:54:57 dsp-hw1 kernel: md: md3: sync done. 

所以它开始同步md2和md3并行(相当合理),然后一旦md2完成(再次相当合理),md0和md1一旦md0完成。 到现在为止还挺好。 那么,没有理由,我可以看到,它启动md3同时启动md1的同时。 然后,一旦md1完成,跟随另一个md2同步。 这些是完全同步,只要原来一样长。 其实,更长。 md3的同步分别运行31分钟和37分钟,md2的同步运行分别为21分钟和25分钟。

所以问题是,为什么需要多次同步? 我还没有看到它开始第三个(但),但我不知道是否期待它。 更重要的是,我不知道这是否表明在将系统投入生产环境之前,我应该解决某种问题。 我没有看到任何一个日志中的错误,没有任何一个表示第一个同步的问题,除了奇怪的额外同步之外,没有任何exception。

任何人都可以阐明这一点?


更新:在试图诊断这个,我已经重做了几次kickstart。 我注意到这不是100%。 一次(只有一次)它根本不会同步交换分区(md1)。 那个时候,它只会同步其他的每个分区一次。

也许是由于在同一物理磁盘上同时build立了多个raid分区而加剧了一些竞争条件?

我的(CentOS 5.6,2个物理磁盘上的3个RAID分区)每周都运行一个名为raid-check的工作。 在/ var / log / messages中,检查基本上是我看到md同步进程的唯一时间。

RAID检查是mdadm软件包的一部分,通过/ etc / sysconfig / raid-check启用。 脚本本身在/etc/cron.weekly中,被命名为99-raid-check。 如果你看脚本,你会看到一些/ proc和/ sys文件,指出数组是否被认为是干净的,正在同步等。也许有一些线索在那里。

我相信你已经看了,但是/ proc / mdstat好吗?

我一直无法确定我见过的行为的原因。 我怀疑这只是一个错误。 它在CentOS 5.6上非常具有可重复性,在使用kickstart安装机器后立即发生。 我认为这是由最初的RAID创造造成的。 我还没有看到任何多余的resyncs发生后,最初的舞蹈。

我也在CentOS 6.0上进行了testing,发现问题在那里没有发生。 我只能假定在两个内核版本之间修正了一些错误。

无论如何,这似乎不是一个严重的问题。 如果我注意到我的5.6服务器在初始安装后会做更多的resyncs,我会重新讨论这个问题,但现在我有更大的鱼来炒。 🙂