Linux

為什麼 CentOS RAID-1/鏡像分區會同步多次?

  • July 24, 2014

我正在使用 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 塊磁碟分區為一個大數據分區。我將前兩個磁碟設置為相互鏡像,最後兩個磁碟設置為相互鏡像。非常簡單。

我看到的奇怪行為是,當我啟動新安裝的機器時,它不止一次同步了一些突襲。以下是相關的 /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 分鐘。

所以問題是,為什麼它需要多次同步?我還沒有看到它開始第三個(還),但我不確定是否會期待它。更重要的是,我不知道這是否表明我應該在將系統投入生產環境之前解決某種問題。我在任何日誌中都看不到任何看起來像錯誤的東西,沒有任何跡象表明第一次同步有問題,實際上,除了奇怪的額外同步之外,根本沒有任何異常。

任何人都可以闡明這一點嗎?


更新:在嘗試診斷這一點時,我已經重做了幾次 kickstart。我注意到它不是100%。一次(僅一次)它根本不會同步交換分區(md1)。在那種情況下,它只同步了其他每個分區一次。

也許是在同一個物理磁碟上同時設置的多個 RAID 分區加劇了某種競爭狀況?

我一直無法確定我所看到的行為的原因。我懷疑這只是一個錯誤。它在 CentOS 5.6 上非常可重現,在使用 kickstart 安裝機器後立即發生。我認為這是由最初的團隊創建引起的。我還沒有看到在最初的舞蹈之後發生任何多餘的重新同步。

我也在 CentOS 6.0 上測試過,發現問題並沒有在那裡發生。我只能假設在兩個核心版本之間修復了某種錯誤。

無論如何,這似乎不是一個嚴重的問題。如果我發現我的任何 5.6 伺服器在初始安裝後進行了更多的重新同步,我將重新討論這個問題,但現在我有更大的魚要炒。:-)

我的(CentOS 5.6,2 個物理磁碟上的 3 個 RAID 分區)每週都在執行一個名為 raid-check 的作業。在 /var/log/messages 中,檢查基本上是我唯一一次看到 md 同步程序。

raid-check 是 mdadm 軟體包的一部分,由 /etc/sysconfig/raid-check 啟用。該腳本本身位於 /etc/cron.weekly 中,名為 99-raid-check。如果您查看腳本,您會看到一些 /proc 和 /sys 文件,這些文件指示陣列是否被認為是乾淨的、是否正在同步等。也許那裡有一些線索。

我確定您已經看過了,但是 /proc/mdstat 可以嗎?

引用自:https://serverfault.com/questions/308406