Estou tentando copiar dados de um CD bastante danificado usando o seguinte comando:
dd if=/dev/sr1 of=IDT.img conv=sync,noerror status=progress
No entanto, o dispositivo 'of' foi desconectado e o dd parou (saída abaixo).
...
dd: error reading '/dev/sr1': Input/output error
1074889+17746 records in
1092635+0 records out
559429120 bytes (559 MB, 534 MiB) copied, 502933 s, 1.1 kB/s
dd: writing to 'IDT.img': Input/output error
1074889+17747 records in
1092635+0 records out
559429120 bytes (559 MB, 534 MiB) copied, 502933 s, 1.1 kB/s
Posso retomar com:
dd if=/dev/sr1 of=IDT.img conv=sync,noerror status=progress seek=1092635 skip=1092635
Ou os números de busca/pular deveriam ser ambos 1092636
, ou pular/procurar deveriam ser diferentes um do outro, ou algo totalmente diferente?
PS: Eu sei que provavelmente estou usando o comando errado para isso, por exemplo, ddrescue é provavelmente melhor. Mas provavelmente estou preso ao dd agora (?). Não espero mais erros no lado do arquivo de saída.
Responder1
Você encontrou erros de leitura, então as opções conv=sync,noerror
quase certamente alteraram o fluxo de dados, infelizmente tornando seu arquivo de saída inútil ou, pelo menos, uma cópia imprecisa.
Cada vez que há uma leitura incorreta (leitura curta) na entrada, a conv=sync
opção preenche o bloco com bytes NUL. O dd
comando tentará continuar o fluxo de entrada de onde parou, mas a saída agora possui um número desconhecido de bytes NUL inseridos.
Você deve parar de usar dd
e usarddrescue
, que foi criado para recuperar dados de mídias ruins.
Respostas referenciadas para tópicos semelhantes
- O que os dois números significam respectivamente nas estatísticas “a+b records” de dd?
- Ocorreu “Não resta espaço no dispositivo” ao clonar um disco de 1 TB para um disco de 1,2 TB usando dd
- Quando o dd é adequado para copiar dados? (ou, quando read() e write() são parciais)
- O que dd conv=sync,noerror faz?
Responder2
Usarddrescue. Ele pode ler mídia danificada, "preservando" as partes danificadas, enquanto o dd não consegue.
Imagine seus dados originais:
+-+-+-+-+-+-+-+-+-+-+-+-+
|a b c d e f g h i j k l|
+-+-+-+-+-+-+-+-+-+-+-+-+
Após o dano ( X
) eles ficam assim:
+-+-+-+-+-+-+-+-+-+-+-+-+
|a b c X X X X h i j k l|
+-+-+-+-+-+-+-+-+-+-+-+-+
O que dd conv=sync,noerror irá ler:
+-+-+-+-+-+-+-+-+
|a b c h i j k l|
+-+-+-+-+-+-+-+-+
O que o ddrescue irá ler.
+-+-+-+-+-+-+-+-+-+-+-+-+
|a b c 0 0 0 0 h i j k l|
+-+-+-+-+-+-+-+-+-+-+-+-+
Como você pode ver a mensagem original lida por dd está distorcida e se você produzir desta forma a imagem do sistema de arquivos ela ficará inutilizável. Imagem Ddrescue que você pode montar sem problemas, o que o ajudará a acessar dados não danificados como de costume e danificados para serem facilmente colocados de lado e tratados em seguida.