Dizendo ddrescue para verificar os dados lidos?

1

Estou tendo um comportamento muito estranho ao ler arquivos de dados de um CD: Os dados são inconsistentes se eu fizer várias cópias do mesmo arquivo do CD. Eu não sei o motivo (não há notificações de erros de leitura e outros CDs funcionam bem na mesma unidade).

Erros acontecem em lugares diferentes a cada vez, portanto, meu palpite é que esses erros podem ser reparados se eu fizer várias cópias do arquivo e levar cada byte com o valor com o qual a maioria das cópias concorda.

Eu tentei usar o ddrescue, mas ele não detectou nenhum erro (ele obtém dados incorretos, mas não detecta erros). No entanto, se o ddrescue verificou os dados que lê, então obviamente encontraria inconsistências.

Então, posso usar o ddrescue (ou outra ferramenta) para reparar os arquivos deste CD verificando os dados copiados e repetir a cópia quantas vezes forem necessárias para adivinhar qual é o valor correto para cada byte?

Obrigado!

    
por cesss 16.03.2016 / 17:01

1 resposta

0

Verifique seu hardware

Eu não tenho uma boa solução, mas normalmente, se os dados são lidos de maneira diferente de um CD-ROM, soa mais a um problema de hardware do que a um problema no CD defeituoso, já que os CDs envolvem ECC, o que significa que o setor pode ser lido ou não e, se puder ser lido, mostrará dados estáveis.

Talvez também use a ddrescue option -d para acessar a origem, porque alguns sistemas operacionais podem distribuir dados aleatórios depois que um erro de leitura ocorreu na readahead (que é feito em segundo plano).

Tente usar um computador diferente que não compartilhe qualquer hardware do outro computador e veja se você ainda tem esse resultado intrigante.

Mas observe: É possível executar duas execuções de ddrescue para criar duas imagens diferentes, porque se houver erros de leitura, talvez partes diferentes da origem tenham sido recuperadas. (Você escreve, não há erros. Talvez as coisas sejam diferentes com a opção -d .)

Ferramenta para comparar ddrescue images

Se você pode excluir hardware defeituoso e quiser comparar a imagem com a fonte novamente sem puxar outra imagem, talvez você possa tentar minha ferramenta ddrescue-verify para diagnosticar as diferenças.

ddrescue-verify is source only (and probably Linux only), so you need to know how to use a development/compile system

Hoje, ddrescue-verify não foi projetado para ser uma ferramenta de diagnóstico fácil de usar. Ele foi criado para ser capaz de verificar rapidamente se a imagem foi tirada corretamente em um link de rede lento, portanto, em uma situação em que você definitivamente não pode esperar que a imagem completa seja transferida pela linha lenta mais de uma vez.

Se a documentação existente para ddrescue e ddrescue-verify não for suficiente para você, receio não poder ajudá-lo (sem tempo, desculpe). A única coisa que posso oferecer é um trecho do Wiki que se adapta um pouco às suas necessidades:

O comando original para criar a imagem a partir da fonte era algo como seguir, executado no diretório de trabalho atual:

ddrescue -d /dev/source image.img image.log

Agora crie os dados de verificação:

ddrescue-verify image.img image.log > image.verify

Agora, execute o processo de verificação / comparação:

ddrescue-verify -udis0 /dev/source image.verify > image.diff

Isso é rápido, pois ddrescue-verify tries ignora as partes source , que estão marcadas como ilegíveis no image.log (daí a opção -d ).

A saída mostrará as diferenças.

Você também pode pesquisar image.diff para ver as diferenças. Este arquivo tem o mesmo formato que o arquivo de log ddrescue com as diferenças marcadas como "não lidas", então você pode analisá-lo com ddrescuelog .

possivelmente: Puxe as diferenças para a imagem

Para inserir as diferenças, você também pode fazer o seguinte:

# The next 2 commands take a snapshot of your original image
# Probably use lvm or ZFS snapshot to not duplicate all data:
cp image.img image.orig.img
cp image.log image.orig.log
# Now pull in the differences
cp -f image.diff image.log
ddrescue /dev/source image.img image.log

Agora você atualizou as image.img e image.log para as alterações encontradas. Isso é rápido, já que isso apenas tenta ler apenas as partes alteradas (a diferença é detectada em cada padrão de 1MB, portanto, copiará um pouco mais).

Observação: essa última etapa foi criada para que você possa repetir todo esse processo quantas vezes precisar.

Esta não é uma solução completa

Sinto muito não poder apresentá-lo com uma solução completa. Mas a recuperação de dados por adivinhação em uma situação pouco clara não é nada, o que pode ser feito imediatamente.

No entanto, usando snapshots (eu recomendo o ZFS ou o BTRFS, já que eles são muito mais rápidos que o LVM) em combinação com uma maneira de comparar e puxar as diferenças, você talvez possa descobrir o que está correto e o que não é.

    
por 03.12.2016 / 14:57