
我有一個我不完全信任的硬碟,但仍然想使用(burstcoin 挖礦,如果我在文件中遇到壞塊,我只會損失幾美分)。
我該如何告訴 btrfs 將某些區塊標記為壞區塊(例如來自badblocks
輸出)?
如果我無法將區塊預先標記為壞區塊,btrfs scrub
那麼將來如果刪除使用它們的文件,是否可以避免由 標識的任何壞區塊?
答案1
可悲的是沒有。
btrfs 不會追蹤壞區塊,也btrfs scrub
不會阻止下一個檔案遇到相同的壞區塊。
此 btrfs 郵件清單帖子建議使用 ext4 與mkfs.ext4 -c
(這“建立一個壞塊列表,然後不會使用這些扇區”)。使用建議mdadm 3.1+ 上的 btrfs 和 RAID0 將無法運作。
看起來LVM 不支援壞塊重新分配。
解決方法是建構一個排除已知不良塊的設備:透過 dmsetup 進行 Btrfs。
未聲明 — 尚無補丁 — 尚未進入內核
目前,btrfs 不追蹤壞塊,這些磁碟區塊很可能會遺失寫入其中的資料。 Btrfs 應該接受 badblocks 輸出格式的列表,將其儲存在新的 btree 中(或可能在當前範圍樹中,使用新標誌),重新定位區塊包含的任何數據,並保留這些區塊,以便它們不能被使用於未來的分配。此外,當發現校驗和錯誤時,可以教導擦洗來測試壞塊。這將使磨砂膏更加有用;校驗和錯誤通常是由磁碟引起的,但是雖然清理檢測到受影響的檔案(在備份情況下提供了重新建立它們的機會),但下一個重複使用壞區塊的檔案將開始出現錯誤。這兩項將與 ext4 功能相符(透過 e2fsck 使用)。
如果狀態發生變化,請發表評論,我將更新此答案。
答案2
這就是我想解決這個限制的方法。一個不完美的解決方案。
- 建立不帶日誌記錄的 ext4 作為檔案系統(標記有壞區塊)
- 在 ext4 之上建立 btrfs 檔案映像。
- 使用循環設備掛載 btrfs 映像。
預計可能會產生一些輕微的額外開銷。