Reformule SW RAID1 a partir de um novo HDD e um disco rígido antigo com blocos defeituosos

3

Eu tenho um SW RAID1 e acabei de substituir o / dev / sda por um novo HD, já que o antigo falhou.
Agora, ao tentar recriar a matriz RAID, descobri que o HDD "bom" (/ dev / sdb) tem blocos defeituosos, evitando que o mdadm reanime novamente a matriz.

Enquanto eu poderia fazer backups, substituir / dev / sdb bem e reinstalar o servidor completamente Eu queria saber se há alguma maneira que eu poderia "enganar" mdadm em ressincronizar a matriz RAID e, em seguida, substituir / dev / sdb com um novo HDD.
Pelo que eu posso imaginar, os badblocks estão localizados em uma área não utilizada de / dev / sdb que é usada apenas quando se tenta recriar o array RAID.

    
por Alex Flo 15.08.2013 / 11:24

2 respostas

3

Você pode verificar se os blocos afetados e os setores defeituosos subjacentes no disco são realocados para a área "setores de reserva" ? O setor defeituoso deve ser realocado quando a operação de gravação falhar. Verifique com smartctl:

 smartctl -a /dev/sdb | grep -i reallocated

A última coluna deve conter um número total de setores realocados. Se houver zero, tente ler o setor defeituoso:

hdparm –-read-sector XXXXXXXX /dev/sdb

Ele deve retornar um erro de E / S . Caso contrário, recomendo pular a próxima seção .

O erro significa que o setor ainda não foi realocado. Então você pode tentar realocá-lo à força escrevendo-o. Lembre-se de que todos os dados armazenados neste setor serão perdidos após essa etapa :

hdparm –-write-sector XXXXXXXX --yes-i-know-what-i-am-doing /dev/sdb

A propósito, o número de setor XXXXXXXX deve ser obtido a partir de mensagens do kernel (comando dmesg ou de / var / log / messages). Como você tinha blocos ruins durante a ressincronização, deveria haver algumas mensagens relacionadas semelhantes a:

... end_request: I/O error, dev sdb, sector 1261071601

Em seguida, tente verificar com o smartctl novamente. O contador aumentou? Se assim for tentar lê-lo com hdparm. Agora, ele deve lê-lo sem nenhum erro, já que ele deve ser realocado. Feito.

Finalmente, você pode continuar com o mdadm e adicionar o disco ao seu espelho degradado.

    
por 15.08.2013 / 15:19
4

Uma estratégia melhor seria usar o ddrescue para copiar o drive ruim para o bem. Esta ferramenta tenta ler a unidade inteira, fazendo releituras e "aparando" blocos ilegíveis. Também produz log, que é usado para salvar o progresso, mas, no final, conterá a lista de blocos inválidos. Você pode, então, analisar essa lista e escrever em todos os blocos ruins para ver se a unidade sobreviverá ao remapeamento de todos eles. Se assim for, você pode mdadm --zero-superblock e depois apenas adicioná-lo como uma nova unidade ao seu raid degradado1. BTW, para os atuais drives de alta capacidade é bastante normal produzir blocos ruins "soft" de tempos em tempos. Basta fazer sua verificação de raid semanalmente, e você ficará bem, a menos que o mesmo bloco fique ilegível em duas unidades, o que é muito improvável.

    
por 11.02.2014 / 20:22