
由於作為btrfs 不追蹤壞塊,作為解決方法這個 btrfs 郵件列表帖子建議使用底層 mdadm RAID0 配置來支援壞塊。
可以使用 LVM 代替 mdadm 來實現此目的嗎?
答案1
一般來說,正如在一篇文章中所提到的評論在這裡和您連結到的郵件列表線程中,現代硬碟到目前為止已經消失,它們已經具有不可替換的壞塊,應該被丟棄。 (您已經解釋了為什麼您對此感興趣,但其他讀者值得注意。)
我不認為 LVM 中有任何東西可以避免壞塊;通常您會在 LVM 下面的設備層解決這個問題。處理該問題的一種方法是使用設備映射器:建立一個表,給出跳過所有壞塊所需的扇區映射,並使用該表構建設備。這樣的表看起來像
0 98 linear /dev/sda 0
98 98 linear /dev/sda 99
等等(這將創建一個 196 扇區的設備,使用/dev/sda
但跳過 98 扇區)。你把這個給dmsetup
:
dmsetup create nobbsda --table mytable
然後在產生的裝置上建立 PV /dev/nobbsda
(而不是/dev/sda
)。
使用這種方法,透過一些前瞻性規劃,您甚至可以處理將來出現故障的扇區,就像驅動器韌體一樣:在驅動器末端保留一些空閒扇區(或者如果您願意,甚至可以在驅動器周圍點綴)分散風險),然後用它們來填補失敗扇區留下的漏洞。使用上面的例子,如果我們認為從 200 開始的扇區是備用扇區,那麼扇區 57 就會變成壞扇區:
0 57 linear /dev/sda 0
57 1 linear /dev/sda 200
58 40 linear /dev/sda 58
98 98 linear /dev/sda 99
使用由 給出的壞扇區清單建立設備映射器表badblocks
作為讀者的練習。
另一個適用於現有 LVM 設定的解決方案是使用pvmove
移動物理範圍以便將 LV 移出壞區域的能力。但這並不能阻止每當創建新 LV 或調整現有 LV 大小或移動時重新使用這些區域。