Estou usando dd
para copiar dados de um disco rígido antigo para um novo. Quero ter certeza de que a integridade dos dados é segura.
Nesta resposta , Gilles diz
Se o [dd] foi finalizado com sucesso, o backup está correto, salvo uma falha de hardware…
O que isso significa exatamente? Tem dd
algum tipo de verificação integrada?
Se eu fosse usar o rsync, também executaria uma segunda passagem --checksum
para verificar. Esse tipo de paranóia é justificado?
dd
verification
integrity
Sparhawk
fonte
fonte
rsync
provavelmente seriam os mais simples.Respostas:
dd
ou qualquer outro aplicativo não possui "algum tipo de verificação integrada" no sentido em que você provavelmente está pensando: ele não lê os dados da mídia de armazenamento para comparar com o que foi escrito. Esse é o trabalho do sistema operacional.Não é realmente possível fazer uma verificação de leitura no hardware a partir de um aplicativo. Funcionaria em alguns cenários, mas na maioria dos casos não alcançaria nada. O aplicativo pode ler novamente o que acabou de escrever se estiver gravando diretamente em uma mídia de armazenamento , mas isso normalmente seria lido em um cache na memória, o que não daria nenhuma garantia útil. No exemplo que você cita ,
dd
está gravando em um canal e, nesse caso, não tem controle sobre o que acontece com os dados mais abaixo na linha. No seu exemplo rsync, uma segunda passagem dersync --checksum
é inútil: em teoria, ele pode pegar um erro, mas, na prática, se ocorrer um erro, a segunda passagem provavelmente não reportará nada de errado; portanto, você está desperdiçando esforço em algo que na verdade não fornece uma garantia útil.No entanto, as aplicações não verificar o que acontece com os dados, no sentido de que eles verificar se o sistema operacional tem a responsabilidade aceita para os dados. Todas as chamadas do sistema retornam um status de erro. Se uma chamada do sistema retornar um status de erro, o aplicativo deverá propagar esse erro para o usuário, geralmente exibindo uma mensagem de erro e retornando um status de saída diferente de zero.
Cuidado que
dd
é uma exceção: dependendo dos parâmetros da linha de comandos,dd
pode ignorar alguns erros . Isso é extremamente incomum:dd
é o único comando comum com essa propriedade. Use emcat
vez dedd
, dessa forma, você não corre o risco de corrupção e pode muito bem ser mais rápido .Em uma cadeia de cópia de dados, dois tipos de erros podem surgir.
fonte
dd if=/dev/sdc of=/dev/sdb bs=4M
, então meu entendimento é que os problemas de ignorar erros e velocidade (mais ou menos, em comparação comcat
) são discutíveis. Você está dizendo apenas para verificar o tamanho montandodf
?Não,
dd
não faz uma verificação explícita. Se você quiser / precisar de uma cópia forense do seu disco ou de qualquer parte dele, usedcfldd
uma versão aprimoradadd
desenvolvida pelo Laboratório de Computação Forense do Departamento de Defesa dos EUA.fonte
A única maneira de ter "certeza" é fazer um passo adicional de leitura e comparação (depois de eliminar os caches).
Além disso,
dd
detecta erros de leitura e gravação da mesma maneira que todos os outros programas ... funciona se as unidades (e outros componentes envolvidos) reportarem erros; para unidades que aceitam dados silenciosamente sem realmente escrevê-los, você está sem sorte.Se você não pode confiar no seu hardware, as coisas ficam complicadas ...
fonte
dd
detecção de erros.dd
tem sérios problemas de corrupção de dados, mas casos especiais como esses não faziam parte da questão.dd
. A solução real é usar qualquer coisa, excetodd
porque a corrupção de dados silenciosa é uma especialidadedd
.dd
para ignorar erros. Você não pode culpar exatamente um programa por fazer exatamente o que pediu.dd
para não ignorar erros? E não,conv=noerror
não é uma resposta correta. Veja a resposta de frostschutz para um exemplo. I fazer culpar o designdd
para fazer erros ignorando um modo padrão, e que não pode ser desligado sem saber seus mecanismos internos de forma muito precisa.Sim, o hardware defeituoso pode inserir bits de erro aleatórios nos dados em uma taxa de 1 bit por número de megabytes, isso é possível e ocorre às vezes na prática.
Normalmente, uso o hash md5 ou sha1 para verificar se os dados estão intactos, relendo a origem e o destino, por exemplo:
Isso pressupõe que os dados são muito maiores que o cache do sistema de arquivos; caso contrário, pode ser necessário reiniciar o sistema para verificar os dados reais no meio e não o conteúdo do cache, ou usar outro sistema para isso.
fonte
De
man dd
:dd
verifica se os tamanhos dos blocos de entrada / saída correspondem toda vez que copia um bloco. Caso contrário, ele lida com o erro com um aviso ou erro fatal (substituído pornoerror
). É por isso quedd
funciona praticamente o tempo todo.Ainda assim, ele não substitui a verificação manual da integridade do seu disco. Se a informação é valiosa para você, sim, sua paranóia é justificada . Execute uma verificação manual assim que
dd
terminar.fonte
dd
não funciona praticamente o tempo todo: com obs
parâmetro, ele ignora alguns erros .