Então, qual é o caso de adicionar conv=sync,noerror
faz diferença ao fazer backup de um disco rígido inteiro em um arquivo de imagem? É conv=sync,noerror
um requisito ao fazer coisas forenses? Se sim, por que é o caso com referência ao linux fedora?
Editar:
OK, então se eu dd sem conv=sync,noerror
e dd
encontro erro de leitura ao ler o bloco (vamos dimensionar 100M), o dd simplesmente pula o bloco 100M e lê o próximo bloco sem escrever nada ( dd conv=sync,noerror
grava zeros em 100M de saída - e daí neste caso ?)?
E se o hash do disco rígido original e do arquivo de saída for diferente se for feito sem conv=sync,noerror
? Ou isso é apenas quando ocorreu um erro de leitura?
Respostas:
conv=sync
dizdd
para preencher cada bloco à esquerda com nulos, para que, se devido a um erro, o bloco completo não possa ser lido, o comprimento total dos dados originais seja preservado, mesmo que nem todos os dados possam ser incluídos na imagem . Dessa forma, você pelo menos sabe como os dados estão danificados, o que pode fornecer pistas forenses e, se você não consegue tirar uma imagem devido a bloqueios ou qualquer outra coisa, não pode analisar nenhum dado. alguns são melhores que nenhum.conv=sync,noerror
é necessário para impedir add
parada por erro e a execução de um despejo.conv=sync
é praticamente sem sentido, sem noerror.http://linuxcommand.org/man_pages/dd1.html
http://vlinux-freak.blogspot.com/2011/01/how-to-use-dd-command.html
fonte
dd conv=sync,noerror
(ouconv=noerror,sync
) corrompe seus dados.Dependendo do erro de E / S encontrado e do tamanho do bloco usado (maior que o tamanho do setor físico?), Os endereços de entrada e saída não ficam sincronizados, mas acabam com os desvios incorretos, o que torna a cópia inútil para imagens do sistema de arquivos e outros coisas onde as compensações são importantes.
Muitos lugares recomendam o uso
conv=noerror,sync
ao lidar com discos defeituosos. Eu costumava fazer a mesma recomendação. Funcionou para mim, quando tive que recuperar um disco defeituoso há algum tempo.No entanto, os testes sugerem que isso não é realmente confiável de forma alguma.
Use
losetup
edmsetup
para criar umA error B
dispositivo:Os dispositivos de loop A, B são assim:
Portanto, é A, B com números crescentes que nos ajudarão a verificar as compensações posteriormente.
Agora, para colocar um erro de leitura entre os dois, cortesia do mapeador de dispositivos Linux:
Este exemplo cria
AerrorB
como em2000
setores deA
, seguidos por2*48
setores de erro, seguidos por2000
setores deB
.Apenas para verificar:
Por isso
A127999\n
, ele lê até , uma vez que cada linha possui 8 bytes que totalizam 1024000 bytes, que são nossos setores de 2000 bytes de 512 bytes. Tudo parece estar em ordem ...Será que vai misturar?
Resultados:
Somente a partir dos tamanhos dos arquivos, você pode dizer que as coisas estão erradas em alguns tamanhos de bloco.
Checksums:
dd
concordaddrescue
apenas com tamanhos de bloco alinhados à nossa zona de erro (512
,4K
).Vamos verificar os dados brutos.
Embora os dados em si pareçam estar presentes, obviamente eles não estão sincronizados; as compensações estão completamente fora de sintonia para bs = 16K, 1M, 42,64K ... somente aquelas com compensação
2088576
estão corretas, como pode ser verificado no dispositivo original.Esse comportamento esperado é de
dd conv=noerror,sync
? Eu não sei e as duas implementações quedd
eu tinha disponíveis nem sequer concordam uma com a outra. O resultado é muito inútil se você usoudd
com uma opção de tamanho de bloco de desempenho.O acima foi produzido usando
dd (coreutils) 8.25
,BusyBox v1.24.2
,GNU ddrescue 1.21
.fonte
ddrescue
vez dedd
trabalhar com unidades com setores defeituosos?sync
argumento diz para manter a saída no comprimento correto. Não funciona se você usar o tamanho do bloco errado, então não faça isso.iflag=fullblock
parece salvá-lo. Emboramd5sum
s de imagens feitas comiflag=fullblock
ainda sejam diferentes (é claro! Porque o número de bytes que foram ignorados devido ao erro de leitura é diferente - ou seja, a quantidade de\0
s nas imagens é diferente), mas o alinhamento é salvo comiflag=fullblock
:grep -a -b --only-matching B130000
retorna2088576
para todas as imagens.