Para copiar, use ddrescue
, safecopy
ou dd_rescue
. Todos eles mantêm um registro de áreas com falha, bem como tentam automaticamente até que possam obter os dados.
O uso geral é:
-
ddrescue: (não confunda com o dd_rescue antigo)
ddrescue /dev/sdc3 sdc3.img sdc3.map
Se desejado, repita com
--retrim
ou '--try-again:ddrescue --try-again /dev/sdc3 sdc3.img sdc3.map
Não se esqueça de especificar o arquivo de mapa para registrar áreas ruins.
-
safecopy:
safecopy --stage1 /dev/sdc3 sdc3.img safecopy --stage2 /dev/sdc3 sdc3.img safecopy --stage3 /dev/sdc3 sdc3.img
Após o estágio 3, você terá um arquivo
stage3.badblocks
listando os setores defeituosos individuais.Se você quiser tentar novamente, use:
mv stage3.badblocks stage2.badblocks safecopy --stage3 /dev/sdc3 sdc3.img
-
dd_rescue: (não deve ser confundido com o ddrescue com maior capacidade)
dd_rescue -o sdc3.badblocks /dev/sd3 sdc3.img
(Não tenho idéia se essa ferramenta suporta retomar / tentar novamente com uma segunda chamada, mas pelo menos ela gera um log de badblocks.)
Esses programas enfatizam o máximo possível de dados rápidos e a recuperação lenta para mais tarde. Portanto, não fique surpreso se o "estágio 1" pular megabytes inteiros apenas por causa de um único bloco defeituoso - ele retornará ao estágio 2.
Para emular um disco danificado, pegue o log de badblocks que você acabou de adquirir e aplique-o a esta postagem:
Use
dmsetup
to create a device backed by the "error" target. It will show up in/dev/mapper/<name>
.Page 7 of the Device mapper presentation (PDF) has exactly what you're looking for:
dmsetup create bad_disk << EOF 0 8 linear /dev/sdb1 0 8 1 error 9 204791 linear /dev/sdb1 9 EOF
Or leave out the
sdb1
parts to and put the "error" target as the device for blocks 0 - 8 (instead ofsdb1
) to make a pure error disk.See also The Device Mapper appendix from "RHEL 5 Logical Volume Manager Administration".
— Peter Cordes, https://stackoverflow.com/questions/1870696/simulate-a-faulty-block-device-with-read-errors
(A conversão de um log de badblocks ou um arquivo de mapeamento ddrescue para a sintaxe da tabela dmsetup é deixada como um exercício para o leitor ...)