Como apagar um disco rígido com setores não graváveis?


21

Então, eu tenho um disco rígido que está falhando. Quero apagar os dados antes de enviá-los para substituição. Estou tentando usar dd if=/dev/zero of=/dev/sdXX, mas ele pára no primeiro erro de gravação. Como sobrescrever a unidade com zeros, ignorando erros de gravação? conv=noerrorparece afetar apenas o arquivo de entrada.


um relatório de bug no banco de dados Debian sobre esse comportamento, mas parece que ele ainda não foi implementado.
Bobby

Será badblockstambém parar em erros? Talvez você possa fazer uma escrita destrutiva com isso?
oKtosiTe

Agora também corri destrutivo badblockspara ter certeza de quantos blocos ruins existem antes de devolver o disco na segunda-feira. Também apagou o disco com sucesso, mas levou quase 50 horas.
TestUser16418

Respostas:


18

tente ddrescue em vez de dd - ele tenta mais com erros


11
O ddrescue apagou com sucesso o disco inteiro, ignorando os erros de gravação. Muito obrigado.
precisa

15

Parâmetros que usei com o ddrescue para apagar a unidade /dev/sdb(preenchida com zeros de /dev/zero) e registrar a saída no arquivo log.txt:

ddrescue --force /dev/zero /dev/sdb log.txt

Para limpar com dados aleatórios, use: ddrescue --force / dev / urandom / dev / sdX tmp.log
Bastion

Como você sabe quando é feito? Eu fiz e deixei correr por cerca de 20 minutos e permaneceu em 0,00% resgatado. É um SSD NVMe com blocos defeituosos que estou tentando apagar ... o utilitário Samsung Secure Erase não funcionou para mim.
user1960364 6/12

3

Se você apenas deseja limpar a unidade, tente dban

Do site:

O Darik's Boot and Nuke ("DBAN") é um disco de inicialização independente que limpa com segurança os discos rígidos da maioria dos computadores. O DBAN excluirá automática e completamente o conteúdo de qualquer disco rígido que possa detectar, o que o torna um utilitário apropriado para destruição de dados em massa ou de emergência.


Eu ia sugerir isso.
qroberts

3

Para o registro, o dd também tem uma opção conv=noerrorpara ignorar erros. Se você tiver erros em um arquivo de entrada e, quando não estiver em uso /dev/zero, poderá usar conv=noerror,notruncou conv=noerror,syncimpedir que o dd trunque o arquivo de saída onde existem erros no arquivo de entrada.

Para sua consulta, você pode tentar este comando:

dd if=/dev/zero of=/dev/sdXX conv=noerror  

Para acelerar o processo e, potencialmente, evitar que a unidade morra no meio do caminho, tente também aumentar o tamanho de byte do padrão 512 (que faz com que o dd leia setor por setor, que é lento) para algo maior, como 4K ( oito vezes maior):

dd if=/dev/zero of=/dev/sdXX bs=4K conv=noerror  

Nota: Com um tamanho de byte maior, os erros ignorados podem deixar seções de dados legíveis um pouco menos que o tamanho de byte que você escolher, mas ainda é improvável que alguém possa obter algo dessas seções depois que todo o disco for executado no processo.

Além disso, tenho certeza de que os fabricantes de discos rígidos descartam adequadamente os discos rígidos devolvidos para substituição na garantia, caso a unidade falhe antes que você consiga concluir completamente o processo de substituição.


man ddmostra "noerror" significa "continuar após erros de leitura"
Kevin Smyth

1

Definitivamente, não é uma solução para usuários avançados, mas se os erros de gravação forem raros, convém continuar manualmente após a ocorrência.

Teoricamente, você poderia escrever algo para fazer isso automaticamente, mas não é tão trivial, e eu prefiro escrever uma ferramenta para fazer o truque do que me preocupar com o script dd.

   seek=BLOCKS
          skip BLOCKS obs-sized blocks at start of output

11
... ou use o dd-rescue ...
Antti Haapala

... o dd-rescue manipularia erros de gravação corretamente?
Qdot 06/07/19
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.