Recuperando dados de um disco rígido que desaparece de / dev ao ler dados em um bloco defeituoso

4

Estou tentando recuperar o máximo de dados possível de uma unidade de disco rígido com falha de 750 GB que está conectada por meio de um compartimento de unidade USB 3.

A unidade em si tem mais de 1500 blocos defeituosos, detectados por badblocks no Linux.

Ele monta perfeitamente no meu computador (executando o macOS 10.12), mas quando os dados de um bloco corrompido são lidos, a unidade fica inativa por alguns segundos, desaparece de /dev e reaparece - como se alguém tivesse desconectado o USB cabo e, em seguida, rapidamente conectou-o novamente.

O primeiro bloco defeituoso ocorre cerca de 136 GiB desde o início do disco, no entanto, este não é o único. Isso é evidenciado pela saída de badblocks , juntamente com quando dd e ddrescue falham.

dd e ddrescue falham assim que leem dados de um bloco defeituoso, pois a unidade desaparece de /dev :

dd if=/dev/rdisk3 of=image.img bs=16m :

ddrescue-v/dev/disk4image.imglogfile:

Anovaexecuçãodeddrescueapósotérminoinicialcomomesmoarquivodelogfazcomqueeletermineimediatamenteenãoavanceaindamais.

Desdequeeusoucapazdeatravessarosistemadearquivoseacessaralgunsarquivosnormalmente, eu escrevi um script para determinar quais arquivos são acessíveis e quais não são Então eu posso copiar os arquivos bons conhecidos do disco. No entanto, isso é lento, e estou preocupado que isso possa danificar ainda mais o disco.

Existe alguma ferramenta semelhante a dd ou ddrescue , que pode recuperar dados desta unidade, que apenas espera que a unidade remonte em vez de sair automaticamente ao ler um bloco defeituoso?

Eu sou capaz de usar tanto o macOS quanto o Linux (Ubuntu), então as soluções para qualquer plataforma funcionariam para mim.

    
por Jack Greenhill 22.10.2016 / 14:34

2 respostas

2

when data from a corrupt block is read, the drive idles for a few seconds, unmounts, and then remounts

Eu tive o mesmo problema com uma unidade que "desapareceria" e depois reapareceria mais tarde. Na verdade, não estava montando, mas ddrescue estava parando quando o dispositivo estava desaparecendo. Eu estava usando no Linux, mas a situação é muito parecida.

Eu sugiro que você use um pouco de programação shell simples e o fato de que a unidade realmente aparece novamente depois de um tempo. Em outras palavras, faça:

while [ 1 ]; do
    ddrescue -v /dev/disk4 image.img logfile
    sleep 3
done

Isso funciona da seguinte maneira:

  • ddrescue é iniciado
  • se parar de executar, o shell aguardará 3 segundos e, em seguida, o iniciará novamente
  • ddrescue é capaz de continuar porque você está fazendo bom uso de seus recursos de registro

Após várias tentativas (acho que o padrão é 3, mas posso estar errado), ddrescue marcará setores como definitivamente ruins e continuará lendo outras partes da unidade. Depois de algumas horas, você verá que ddrescue será feito e poderá matar o loop com Ctrl + C .

    
por 23.10.2016 / 15:18
1

Em Manual GNU ddrescue :

Example 6: While rescuing a partition in /dev/sda1 to the file hdimage, /dev/sda1 disappears from /dev.

ddrescue -f -n /dev/sda1 hdimage mapfile     <-- /dev/sda1 fails here
  (restart /dev/sda or reboot computer and then repeat the above
   command as many times as needed until it succeeds)
ddrescue -d -f -r3 /dev/sda1 hdimage mapfile

A resposta de Andrea Lazzarotto abrange a parte "repetir o comando acima". Há uma etapa adicional no exemplo que usa a opção -d . O manual explica um pouco:

-d
--idirect

Use direct disc access to read from infile, bypassing the kernel cache. (Opens the file with the O_DIRECT flag). Sector size must be correctly set for this to work. Not all systems support this.

É aconselhável ler a seção apropriada do manual . De lá:

Try the --idirect option first. If direct disc access is not available in your system, try raw devices. Read your system documentation to find how to bind a raw device to a regular block device. Some OSs provide raw access through especial device names, like /dev/rdisk.

O MacOS fornece nomes de /dev/rdisk . Em sua pergunta, no entanto, você usa rdisk com dd , mas disk com ddrescue , portanto, parece que você ainda pode se beneficiar da etapa adicional.

Os usuários do Linux encontrarão o comando raw útil. Eles devem se referir a man raw e ao Exemplo 2: usando um dispositivo bruto em a seção já mencionada do manual GNU ddrescue .

    
por 12.03.2017 / 05:51