Eu tenho uma coleção de disquetes antigos de 3,5" dos quais estou procurando recuperar o máximo de dados possível.
O problema é devido à estrutura de alguns dos arquivos, preciso que o comprimento de todos os arquivos seja mantido, o que significa que todos os setores defeituosos devem ser preenchidos (o tl;dr motivo pelo qual alguns arquivos são arquivos Acorn ADFS onde os dados e o código são combinado. O código faz referência aos dados como um deslocamento do início do arquivo. A leitura do formato ADFS não é um problema no Linux, o preenchimento de setores defeituosos é).
Os discos não são lidos há 25 anos, então espero uma leitura imprevisível, setores defeituosos regulares e potencialmente tornando os discos ilegíveis - o que não me importa, desde que a recuperação de dados seja maximizada.
Para fazer isso, espero que sejam necessárias várias passagens para ler o máximo possível.
dd
Eu olhei para dd, com este comando promissor para uma primeira execução:
dd if=/dev/fd0 of=adfs.img conv=noerror,sync
Seguido por chamadas subseqüentes de
dd if=/dev/fd0 of=adfs.img conv=noerror,notrunc
Onde:
noerror significa que os erros são ignorados
sincronizar significa que os setores defeituosos são preenchidos com o caractere nulo
notrunc significa que o arquivo de saída (já existente) não é truncado quando dd é chamado.
No entanto, ao ler a página de manual e esta explicação de notrunc , apesar de notrunc estar definido, dd substitui a saída todas as vezes, resultando em uma saída que ainda representa apenas o que foi lido na última passagem. Quaisquer setores anteriormente lidos corretamente, mas agora danificados, por exemplo, devido à degradação do disquete antigo, serão substituídos por nulos.
Portanto, dd não parece adequado.
resgate
O ddrescue parece promissor, pois pode ser usado com várias passagens, desde que um arquivo de log seja usado para registrar o que foi gravado com sucesso e, em seguida, referido quando a próxima passagem for concluída.
A primeira passagem para ler apenas blocos sem erro
ddrescue -d -p --no-scrape /dev/fd0 output.img log/output.logfile
para a primeira passagem e passagens subseqüentes para preencher os erros
ddrescue -d -r3 /dev/fd0 output.img log/output.logfile
Onde
-d acesso direto ao disco. Ignorar cache do sistema
--no-scrape ou -n pular a fase de raspagem
-p preallocate pré-aloca espaço em disco antes da recuperação, ou seja, o arquivo de saída terá o mesmo tamanho do arquivo/dispositivo de entrada
-r3 repete setores defeituosos 3 vezes (usado na 2ª passagem em diante)
mas o problema é que o ddrescue parece não preencher os setores defeituosos quando eles ocorrem. Com -p definido, parece resultar em todo o preenchimento no final do arquivo, não mantendo os deslocamentos de dados desde o início do arquivo conforme necessário.
Este parece ser o caso, pois o ddrescue é escrito para tentar economizar espaço em disco para que os setores defeituosos sejam truncados e, em seguida, adicionados se os setores defeituosos forem lidos com êxito nas passagens subsequentes. Definir -p apenas cria um arquivo de saída do mesmo tamanho que o arquivo de entrada para economizar espaço, não para preencher os dados. O conteúdo da saída com -p definido ou não definido será, portanto, idêntico, ou seja, não preenchido até o final do arquivo.
Pergunta
Então, minha pergunta é uma parte de três
está correto que o ddrescue NÃO preenche o arquivo recuperado, mesmo com -p definido?
Existe alguma maneira de colocá-lo no bloco? Em minha pesquisa na Internet, li um comentário (irei encontrá-lo novamente e adicionar) que o arquivo de log criado por ddrescue poderia ser usado por um script para preencher os locais relevantes. Alguma ideia de como?
e
- você conhece algum comando / programa / script melhor para fazer o que estou tentando fazer - recuperação máxima de dados por meio de várias passagens de leitura de um disco corrompido com preenchimento de setores defeituosos?
Estou usando o Ubuntu 18.04, a versão dd é (coreutils) 8.28 e a versão GNU ddrescue é 1.22, ambas dos repositórios do Ubuntu.
Obrigado como sempre por qualquer ajuda