Discos rígidos com setores defeituosos no Linux

EXT4

Os sistemas de arquivos EXT podem manter uma lista de setores considerados defeituosos, que passam a ser ignorados. A lista não é gerenciada automaticamente pelo kernel e depende do espaço de usuário: e2fsck da suíte e2fsprogs.

O e2fsck (fsck.ext* são links apontando para o binário) oferece dois modos de funcionamento com as opções -c e -cc. O primeiro faz uma varredura somente leitura, enquanto o segundo é de escrita não destrutiva. Roda por baixo do capô[1] o badblocks, outro programa da suíte. No modo de escrita, lê os setores relativos ao bloco em teste, coloca-os na memória, escreve bits aleatórios e depois grava novamente os dados originais nos mesmos endereços LBA.

Todos os discos rígidos não arcaicos realocam por conta, durante escrita, setores ruins à medida que aparecem. Daí a utilidade da opção -cc.

Ao usar -c[c], -k define que setores ruins detectados na verificação atual serão adicionados à lista existente ao invés de substituí-la.

# e2fsck -ccky /dev/sdxy

-y evita ter que ficar respondendo perguntas a cada ocorrência de setor problemático. Assume todas respostas como yes. Fique avisado que o e2fsck zera por completo o bloco, caso esteja sendo usado, ao qual pertencia o setor ruim se este não puder ser lido.

Na criação do sistema de arquivos pelo mke2fs (e seus links de conveniência mkfs.ext*), também é possível usar as opções -c e -cc, com a diferença de -cc ser mapeada à opção -w do badblocks, que realiza teste destrutivo, zerando os setores no final.

XFS

O XFS não mantém uma lista de setores ruins. Se o disco está indo desta para melhor, a única coisa a tentar é rodar badblocks -n (-n ativa o teste de escrita não destrutiva) com o volume desmontado e rezar para que o firmware realoque o que for possível. Como os endereços LBA são mantidos, é transparente para o sistema de arquivos.

# badblocks -n /dev/sdxy

Especificar -b é desnecessário, pois não estamos interessados na eventual lista resultante, que é inútil com o XFS. Só precisamos que o programa desempenhe sua tarefa fazendo, por conseguinte, o firmware trabalhar.

Isso vale para qualquer sistema de arquivos que, igual ao XFS, não tenha o recurso, de questionada utilidade segundo o próprio Ted Ts'o.

Recomendação

Primeira providência é trocar o cabo de dados. Não adiantando, não confie mais em disco que comece a apresentar setores defeituosos. Considere badblocks, e2fsck -c[c] e mke2fs -c[c] paliativos até você jogá-lo fora e colocar outro em boas condições no lugar. Acompanhe os atributos SMART com o aplicativo "Discos" do GNOME ou pelas ferramentas de linha de comando do pacote smartmontools (ver man pages).

Sendo absolutamente necessário manter o hardware defeituoso, se possível, apague-o inteiramente escrevendo zeros e depois particione e crie o sistema de arquivos de novo:

# dd if=/dev/zero of=/dev/sdx bs=1M status=progress conv=fsync,notrunc

Dá também para apagar apenas a área dentro do limite de partições especificando o dispositivo de bloco de cada uma (/dev/sdxy), assim o particionamento é preservado.


[1]
# strace -f -e trace=process -e signal=\!SIGALRM e2fsck <opções> /dev/sdxy

Comentários