Bem, há alguns casos:
- Este disco faz parte de uma matriz RAID. Boa. Apenas faça md 'reparar' o array assim:
echo 'repair' > /sys/block/md0/md/sync_action
. Problema resolvido sem perda de dados. (Eu estou supondo que este não é o caso para você, mas você realmente deveria considerar mudar isso.) - Você não se importa com os dados no disco (ou não há nenhum). Apenas use dd para zerar todo o disco.
- Os blocos defeituosos fazem parte do espaço livre no disco. Use, por exemplo,
cat /dev/zero > tempfile
para preencher o espaço livre com zeros. Faça isso como root (há espaço reservado apenas para raiz), provavelmente no modo de usuário único (para que nada quebre a falta de espaço). Depois que ficar sem espaço, remova o arquivo (rm tempfile
). - Os blocos defeituosos fazem parte dos dados (arquivos) ou metadados (estrutura do sistema de arquivos) no disco. Você perdeu dados.
fsck -fc
(executado com o sistema de arquivos desmontado, ou o pior caso em leitura somente durante a inicialização inicial, se for o sistema de arquivos raiz) informará quais arquivos. Substitua-os do backup.
Também é possível que badblocks -n
, que deve ser somente ser feito em um sistema de arquivos desmontado , forçará um remapeamento. Não deve perder nenhum dado (além do que estava nos blocos ruins, que já estão perdidos).
Se você quiser fazer um script baseado na saída de badblocks (o que não é seguro, isso deixa você com problemas silenciosos), é bem fácil. Cada linha de saída de badblocks fornece um número de bloco, baseado no tamanho do bloco (512 no seu exemplo). Use o mesmo tamanho de bloco para% s bs
. O número do bloco é seu seek
para dd. Seu count
é 1 (ou superior, se houver alguns blocos ruins em uma linha). of
é a partição (ou disco) na qual você executou badblocks. Um bom if
é /dev/zero
.