CD-R gravados não são idênticos à imagem iso de entrada, por quê?

5

Eu tenho o problema que às vezes quando eu gravar uma imagem ISO para um CD-R com:

sudo wodim -v driveropts=burnfree -data dev=/dev/scd0 input.iso

Depois, leia-o novamente com:

sudo dd if=/dev/cdrom of=output.iso
dd: reading '/dev/cdrom': Input/output error
...

Que acabo com duas imagens iso que não são idênticas, ou seja, o output.iso está com 2048 bytes no final. No entanto, quando monto a imagem iso ou CD-R e comparo os arquivos reais no ponto de montagem, ambos são idênticos.

Esse comportamento esperado é uma queima incorreta dos dados? E, se for esperado, como posso verificar se o processo de gravação foi bem sucedido?

A razão pela qual eu pergunto, em primeiro lugar, é que parece ser um comportamento reproduzível, certas imagens iso saem 2048 bytes, mesmo em gravações repetidas, mas todos os CD-Rs queimados são idênticos.

Além disso, qual é a razão por trás disso:

dd: reading '/dev/cdrom': Input/output error

Como sempre acontece, suponho que seja normal, mas qual é a razão técnica por trás disso? Presumo que os CDs não permitem que o dispositivo detecte o tamanho diretamente, por isso dd lê até encontrar o fim da maneira mais difícil.

Editar: O usuário karol no superusers.com mencionou que o problema de tamanho e o erro de leitura são o resultado do uso de -tao (padrão) no wodim em vez do modo -dao . Eu ainda não pude testá-lo, mas parece a explicação mais plausível até agora.

    
por Grumbel 13.11.2010 / 23:44

2 respostas

3

Na verdade, provavelmente é preenchimento. Verifique os tamanhos dos arquivos, é output.iso um pouco maior?

Veja o final de output.iso :

dd if=output.iso bs=1 seek=658562000 count=1071 | hexdump -C

Eu estou supondo zeros?

Você pode tentar executar ls -l input.iso para obter o tamanho exato e, em seguida:

dd if=output.iso bs=1 count=<INPUT.ISO SIZE> | md5sum

Observe que isso será muito lento, já que você está lendo um byte de cada vez. Se o tamanho for divisível por um inteiro, substitua esse inteiro pelo 1 em bs=1 e divida o count por esse número. Até 2 bytes por vez serão muito mais rápidos!

Quanto à sua segunda pergunta, o erro de entrada / saída acontece quando dd atinge o final do dispositivo. Nada para se preocupar.

    
por Nicholas Knight 14.11.2010 / 00:05
0

Esse problema pode estar relacionado ao seu uso do dd. Tente adicionar conv=direct ao usar o dd para ler o disco, por exemplo:

sudo dd if=/dev/cdrom of=output.iso conv=direct

Isso diz ao dd para usar O_DIRECT para sua E / S, ignorando a camada de bloco do kernel. (Normalmente, a camada de bloco lê pedaços de 4KB mesmo se o programa de chamada solicitar menos. Talvez essa tenha sido a causa do erro na metade do tempo, para discos com um número ímpar de setores ???)

    
por user9919 30.01.2011 / 20:06

Tags