mdadm 如何知道更改發生在哪裡?
大約 10 天前,我使用 mdadm 管理的 RAID 1 出現故障。該陣列由 2 個通過 USB 連接的外部 2 TB 硬碟驅動器組成,我懷疑連接鬆動會導致故障。
根據我的 bash 歷史,我輸入了以下命令:
sudo mdadm --manage /dev/md1 --fail /dev/sda1 sudo mdadm --manage /dev/md1 --remove /dev/sda1 cat /proc/mdstat sudo mdadm --manage /dev/md1 --add /dev/sda1 cat /proc/mdstat mailx cat /proc/mdstat
我在網上找到了這方面的說明,但是 iirc,第一個和/或第二個命令失敗了,因為
/dev/sda1
它已經不再是數組的一部分或類似的東西了。在故障和我輸入上述命令之間,數據肯定被寫入陣列的文件系統。
我假設 mdadm 會在我發出第四個命令後將所有數據複製
/dev/sdb1
到,這將花費相當長的時間。/dev/sda1
但是,當我在幾分鐘後檢查最後一行時,它已經完成了。不知道它是如何設法顯然只複製更改的數據,我擔心儲存在我的 RAID 和 sha256summed 上的數據的完整性,
/dev/sda1
除了/dev/sdb1
前 128 MiB,因為我知道前 128 MiB 是不同的。結果發現其餘磁碟分別儲存完全相同的數據,因此 mdadm 確實恢復了陣列的完整性。它怎麼知道哪些部分發生了變化?如果我在發生故障的時間點和我發出上述命令的時間點之間重新啟動,它仍然可以工作嗎?
cat /proc/mdstat
應該向您顯示相應的 RAID 有一個點陣圖。這類似於文件系統的日誌:當系統崩潰(或 RAID 中斷)時,同步功能有一個地方可以檢查哪些數據可能被損壞。其他一切都可以忽略。因此重建速度非常快。點陣圖線的含義
來自https://raid.wiki.kernel.org/index.php/Mdstat
bitmap: 0/10 pages [0KB], 16384KB chunk
它是什麼意思,例如:23/234
這是指記憶體中的點陣圖(基本上是磁碟點陣圖中的記憶體——它允許點陣圖操作更有效)。
如果它是 23/234,則意味著在記憶體點陣圖中分配了 234 個頁面中的 23 個。這些頁面是按需分配的,並在它們為空(全為零)時被釋放。記憶體點陣圖對每個點陣圖塊使用 16 位來計算所有正在進行的對塊的寫入,因此它實際上比磁碟點陣圖大 16 倍。