btrfs:尋找有關壞扇區/讀取錯誤/中等錯誤的 btrfs 錯誤模式的經驗
在執行使用 HDFS 的 Hadoop 集群時(因此數據已經複製了 3 倍),我們經常遇到 ext4 的問題,因為一些壞扇區(文件系統無法讀取或寫入它們)導致 ext4 以只讀方式重新掛載文件系統。
到目前為止一切順利,我們正在努力更換磁碟,但我偶然發現了 btrfs,它是元數據重複,我很感興趣 btrfs 在這種情況下如何反應?
數據錯誤對我們來說並不重要,因為數據已經校驗和並由 HDFS 複製,但是更健壯的元數據處理(例如,如果元數據不能寫入使用重複的元數據的地方)將是一個好處,因為理論上如果我們切換到 btrfs,只讀重新掛載和所需的 fsck 不應該經常發生……
那麼這裡有沒有人在桌面硬碟上執行任何沒有 raid 的 btrfs 並且可以告訴我文件系統對中等錯誤的彈性如何?
例如,單個磁碟上的元數據複製是用於修復損壞的元數據還是文件系統無論如何都會失敗?
我絕對不是專家,通常對文件系統的經驗很少。所以,拿我用捏(或一把鹽)寫的東西:)
現在拋開免責聲明:Btrfs(據我所知)還不是容錯的,它需要在那個部門認真工作。如果我沒記錯的話,ZFS 應該能更好地滿足您的要求。我自己一直在考慮 btrfs,但我還不熱衷於使用它。順便說一句,opensuse(我認為)為它提供了支持,所以也許你會在那裡找到一些資訊。
如果您在其他地方找到解決方案,請進行更新。
希望,我有一些幫助。
http://en.wikipedia.org/wiki/ZFS
對於 ZFS,數據完整性是通過在整個文件系統樹中使用(基於 Fletcher 的)校驗和或 (SHA-256) 散列來實現的。
$$ 17 $$對每個數據塊進行校驗和,然後將校驗和值保存在指向該塊的指針中,而不是保存在實際塊本身中。接下來,對塊指針進行校驗和,並將值保存在其指針處。這種校驗和一直持續到文件系統的數據層次結構到根節點,根節點也被校驗和,從而創建了一個 Merkle 樹。$$ 17 $$大多數文件系統無法檢測到動態數據損壞或幻讀/寫入(數據寫入/讀取校驗和正確但實際上是錯誤的),因為它們將校驗和與數據一起儲存。ZFS 將每個塊的校驗和儲存在其父塊指針中,以便整個池進行自我驗證。$$ 18 $$ 當訪問一個塊時,無論它是數據還是元數據,都會計算其校驗和並與儲存的“應該”的校驗和值進行比較。如果校驗和匹配,則數據將通過程式堆棧向上傳遞到請求它的程序。如果值不匹配,則如果儲存池通過 ZFS 鏡像或 RAID 具有冗餘,則 ZFS 可以修復數據。
$$ 19 $$如果儲存池由單個磁碟組成,則可以通過指定“copies=2”(或“copies=3”)來提供這種冗餘,這意味著數據將在磁碟上儲存兩次(三次),有效地減半(或者,對於“copies=3”,減少到三分之一)磁碟的儲存容量。$$ 20 $$如果存在冗餘,ZFS 將獲取數據的副本(或通過 RAID 恢復機制重新創建),並重新計算校驗和 - 理想情況下會重現最初的預期值。如果數據通過了這個完整性檢查,那麼系統就可以用已知良好的數據更新有缺陷的副本,從而可以恢復冗餘。