Software-Raid
恢復 RAID 陣列中不匹配的扇區
我最近收到一封自動電子郵件,上面寫著“警告:/dev/md3 上的 mismatch_cnt 不是 0”。
我在 CentOS 6.6 上使用 mdadm 執行軟體 RAID5 陣列
在Google搜尋消息時,我發現了這個: -
檢查操作會掃描驅動器中的壞扇區並自動修復它們。如果它找到包含壞數據的好扇區(一個扇區中的數據與另一個磁碟中的數據指示它應該是什麼不一致,例如奇偶校驗塊+其他數據塊會導致我們認為這個數據塊不正確),則不採取任何措施,但會記錄該事件。這種“什麼都不做”允許管理員檢查扇區中的數據以及通過從冗餘資訊重建扇區並選擇要保留的正確數據而產生的數據。
我的問題是,如何檢查數據並選擇要保留的正確數據?似乎沒有任何提及如何在任何地方執行此操作,我不知道這些扇區正在影響哪些文件
愚蠢且耗時的方法:
對於每個磁碟,組裝缺少該磁碟的 RAID,然後安裝它。比較這些掛載的所有文件;如果您發現任何文件有任何差異,那就是您的不匹配。
在您的 RAID 未執行的救援系統中執行此操作。為確保不對 RAID 成員本身進行任何更改,請為它們創建只讀循環設備。
# losetup --find --show --read-only /dev/diska /dev/loop0 # losetup --find --show --read-only /dev/diskb /dev/loop1 # losetup --find --show --read-only /dev/diskc /dev/loop2
在缺少一個磁碟的情況下組裝:
# mdadm --assemble --run --readonly /dev/md42 /dev/loop0 /dev/loop1 mdadm: /dev/md42 has been started with 2 drives (out of 3). # mount -o ro /dev/md42 loop/ # md5sum loop/file 95e3afde4229e266cb49f1d6e3fba705 file
在缺少另一個磁碟的情況下組裝:(並依次為每個磁碟執行此操作,因此每個磁碟都是失去的磁碟一次)
# mdadm --stop /dev/md42 # mdadm --assemble --run --readonly /dev/md42 /dev/loop0 /dev/loop2 mdadm: /dev/md42 has been started with 2 drives (out of 3). # mount -o ro /dev/md42 loop/ # md5sum loop/file 679c261d076f268a880c0fe847739e64 file
所以你有一個不同的文件。其中任何一個可能是正確的,你必須自己決定。
直接定位錯配地址肯定會更聰明;不過,我不知道是否
md
可以強制將這些地址提供給您。然後,您仍然必須在文件系統中找到該地址可能與哪個文件相關。做到這一點的難易程度取決於文件系統。