Em geral, como foi mencionado em um comentário aqui e no encadeamento de listas de e-mail que você vinculou, os discos rígidos modernos que estão tão distantes que têm blocos defeituosos insubstituíveis devem ser descartados. (Você explicou por que você está interessado nisso, mas vale a pena notar para outros leitores.)
Eu não acho que exista algo no LVM para evitar bloqueios ruins como tal; Normalmente, você lidaria com isso abaixo do LVM, na camada do dispositivo. Uma maneira de lidar com o problema é usar o mapeador de dispositivos: crie uma tabela que permita mapear o setor para pular todos os blocos defeituosos e construa um dispositivo usando isso. Tal tabela seria algo como
0 98 linear /dev/sda 0
98 98 linear /dev/sda 99
(isso cria um dispositivo de 196 setores, usando /dev/sda
, mas ignorando o setor 98). Você dá isso para dmsetup
:
dmsetup create nobbsda --table mytable
e, em seguida, crie um PV no dispositivo /dev/nobbsda
resultante (em vez de /dev/sda
).
Usando este método, com um pouco de planejamento para frente, você pode até mesmo lidar com setores defeituosos no futuro, da mesma forma que o firmware de uma unidade: deixe alguns setores livres no final da unidade (ou até mesmo espalhados pela unidade) se você quiser espalhar o risco) e usá-los para preencher os furos deixados pelos setores com falha. Usando o exemplo acima, se considerarmos os setores a partir de 200 para serem setores sobressalentes, e o setor 57 se tornar ruim:
0 57 linear /dev/sda 0
57 1 linear /dev/sda 200
58 40 linear /dev/sda 58
98 98 linear /dev/sda 99
A criação de uma tabela de mapeamento de dispositivos usando uma lista de setores defeituosos, conforme fornecida por badblocks
, é deixada como um exercício para o leitor.
Outra solução que funcionaria com uma configuração existente do LVM seria usar pvmove
capacidade de mover extensões físicas para mover LVs de áreas ruins. Mas isso não impede que essas áreas sejam reutilizadas sempre que um novo LV for criado ou um LV existente redimensionado ou movido.