具有外部點陣圖的 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。在其他檔案系統上儲存位圖檔案可能會導致嚴重問題。

相關內容