Lvm
LVM 可以標記/避免壞塊嗎?
由於btrfs 不跟踪壞塊,因此作為解決方法,此 btrfs 郵件列表文章建議使用底層 mdadm RAID0 配置來支持壞塊。
可以為此目的使用 LVM 代替 mdadm 嗎?
一般來說,正如在此處的評論和您連結到的郵件列表執行緒中所提到的,現代硬碟驅動器到目前為止已經存在不可替換的壞塊應該被丟棄。(您已經解釋了您對此感興趣的原因,但對於其他讀者來說值得注意。)
我認為 LVM 中沒有任何東西可以避免這樣的壞塊。通常你會在設備層解決 LVM 下面的問題。解決問題的一種方法是使用設備映射器:創建一個表,給出跳過所有壞塊所需的扇區映射,並使用它建構一個設備。這樣的表看起來像
0 98 linear /dev/sda 0 98 98 linear /dev/sda 99
等等(這將創建一個 196 扇區設備,使用
/dev/sda
但跳過扇區 98)。你把這個給dmsetup
:dmsetup create nobbsda --table mytable
然後在生成的
/dev/nobbsda
設備上創建一個 PV(而不是/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 大小或移動時重新使用這些區域。