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

为什么 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

基本上,我将前两个磁盘划分为根、交换和数据分区。我将第 3 和第 4 个磁盘划分为一个大数据分区。我将前两个磁盘设置为相互镜像,将后两个磁盘设置为相互镜像。非常简单。

我看到的奇怪行为是,当我启动新安装的机器时,它会多次同步某些 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(同样相当合理),并在 md0 完成后执行 md1。到目前为止一切顺利。然后,我不知道为什么,它在启动 md1 的同时启动了 md3 的另一个同步。然后在 md1 完成后,跟进 md2 的另一个同步。这些是完整同步,与原始同步一样长。实际上更长。md3 的同步分别运行 31 分钟和 37 分钟,md2 的同步分别运行 21 分钟和 25 分钟。

所以问题是,为什么它需要多次同步?我还没有看到它启动第三次(目前),但我不确定是否应该期待它。更重要的是,我不知道这是否表明在将系统投入生产环境之前我应该​​修复某种问题。我在任何日志中都没有看到任何看起来像错误的东西,没有任何迹象表明第一次同步有问题,实际上,除了奇怪的额外同步之外,没有任何异常。

有人可以解释一下吗?


更新:为了诊断这个问题,我重做了几次启动。我注意到它不是 100%。有一次(只有一次)它根本没有同步交换分区 (md1)。那一次,它只同步了其他每个分区一次。

也许是在同一物理磁盘上同时设置多个 raid 分区而加剧了某些竞争条件?

答案1

我的系统(CentOS 5.6,2 个物理磁盘上的 3 个 RAID 分区)每周运行一项名为 raid-check 的作业。在 /var/log/messages 中,检查基本上是我唯一一次看到 md sync 进程。

raid-check 是 mdadm 软件包的一部分,由 /etc/sysconfig/raid-check 启用。脚本本身位于 /etc/cron.weekly 中,名为 99-raid-check。如果您查看该脚本,您会看到一些 /proc 和 /sys 文件,这些文件指示阵列是否被视为干净、是否正在同步等。也许那里有一些线索。

我确信您已经查看过了,但是 /proc/mdstat 可以吗?

答案2

我无法确定我所看到的行为的原因。我怀疑这只是一个错误。它在 CentOS 5.6 上非常容易重现,在使用 kickstart 安装机器后立即发生。我认为这是由初始 raid 创建引起的。我还没有看到在它进行初始舞蹈后发生任何冗余重新同步。

我也在 CentOS 6.0 上测试过,发现问题不存在。我只能假设在两个内核版本之间修复了某种错误。

无论如何,这似乎不是一个严重的问题。如果我注意到我的任何 5.6 服务器在初始安装后进行更多重新同步,我会重新审视这个问题,但现在我有更重要的事要做。:-)

相关内容