O dd faz algum tipo de verificação?


16

Estou usando ddpara 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 ddalgum tipo de verificação integrada?

Se eu fosse usar o rsync, também executaria uma segunda passagem --checksumpara verificar. Esse tipo de paranóia é justificado?


Defina "a integridade é segura".
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen Quero dizer que a cópia é idêntica à original.
Sparhawk 21/05

Se você tiver apenas arquivos simples, a maneira tradicional de copiar arquivos é usando tar ou cpio. O tar do GNU possui um sinalizador de verificação: gnu.org/software/tar/manual/html_section/tar_81.html . Esses dias rsyncprovavelmente seriam os mais simples.
Thorbjørn Ravn Andersen

1
"barrar uma falha de hardware" indica que não faz nenhuma verificação. Se isso acontecesse, poderia detectar a falha de hardware.
Barmar

Respostas:


20

ddou 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 , ddestá 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, ddpode ignorar alguns erros . Isso é extremamente incomum: ddé o único comando comum com essa propriedade. Use em catvez de dd, 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.

  • Corrupção: um pouco é invertido durante a transferência. Não há como verificar isso no nível do aplicativo, porque se isso acontecer, é devido a um erro de programação ou erro de hardware que provavelmente causa a mesma corrupção ao ler novamente. A única maneira útil de verificar se não ocorreu essa corrupção é desconectar fisicamente a mídia e tentar novamente, de preferência em outro computador, caso o problema esteja com a RAM.
  • Truncamento: todos os dados copiados foram copiados corretamente, mas alguns deles não foram copiados. Este é vale a pena conferir, por vezes, dependendo da complexidade do comando. Você não precisa ler os dados para fazer isso: basta verificar o tamanho.

Acredito que a maioria dos meios de armazenamento usa FEC suficiente para detectar + corrigir um único bit flip.
Gardenhead 20/05

2
Obviamente, se você copiar um disco rígido inteiro com o dd e comparar imediatamente o disco rígido, você sabe que funcionou porque o cache não é grande o suficiente.
20917 Joshua

1
Obrigado pela resposta (+1). Eu provavelmente deveria mencionar que estou usando um método bastante básico 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 com cat) são discutíveis. Você está dizendo apenas para verificar o tamanho montando df?
Sparhawk

4

Não, ddnão faz uma verificação explícita. Se você quiser / precisar de uma cópia forense do seu disco ou de qualquer parte dele, use dcfldduma versão aprimorada dddesenvolvida pelo Laboratório de Computação Forense do Departamento de Defesa dos EUA.


4

A única maneira de ter "certeza" é fazer um passo adicional de leitura e comparação (depois de eliminar os caches).

Além disso, dddetecta 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.

Esse tipo de paranóia é justificado?

Se você não pode confiar no seu hardware, as coisas ficam complicadas ...


É mais complicado que isso , tanto sobre leitura e comparação quanto sobre dddetecção de erros.
Gilles 'SO- stop be evil'

Bem, se você estiver indo tão longe, ddtem sérios problemas de corrupção de dados, mas casos especiais como esses não faziam parte da questão.
Frostschutz 20/05

Esses problemas de corrupção poderiam justificar a verificação dos dados produzidos usando dd. A solução real é usar qualquer coisa, exceto ddporque a corrupção de dados silenciosa é uma especialidade dd.
Gilles 'SO- stop be evil'

2
@ Gilles, ou simplesmente não diga ddpara ignorar erros. Você não pode culpar exatamente um programa por fazer exatamente o que pediu.
Mark

@ Mark E como, ore, para você dizer ddpara não ignorar erros? E não, conv=noerrornão é uma resposta correta. Veja a resposta de frostschutz para um exemplo. I fazer culpar o design ddpara fazer erros ignorando um modo padrão, e que não pode ser desligado sem saber seus mecanismos internos de forma muito precisa.
Gilles 'SO- stop be evil'

2

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:

dd if=/dev/sdb of=~/hd_backup
dd if=/dev/sdb | md5sum
dd if=~/hd_backup | md5sum

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.


É suficiente desmontar / montar o sistema de arquivos para forçar o sistema operacional a gravar o cache do sistema de arquivos no dispositivo.
miracle173

miracle173, mas mesmo após a sincronização, o sistema operacional não mantém em cache o que escreveu? então não tenho certeza se a desmontagem limpará todo o cache da RAM.
18718 Matt

1

De man dd:

Quando concluído, dd exibe o número de blocos de entrada e saída completos e parciais, registros de entrada truncados e blocos de troca de bytes de comprimento ímpar para a saída de erro padrão.

Um bloco de entrada parcial é aquele em que menos do que o tamanho do bloco de entrada foi lido. Um bloco de saída parcial é aquele em que menos do que o tamanho do bloco de saída foi gravado. Blocos de saída parcial para dispositivos de fita são considerados erros fatais. Caso contrário, o restante do bloco será gravado. Blocos de saída parciais para dispositivos de caracteres produzirão uma mensagem de aviso.

ddverifica 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 por noerror). É por isso que ddfunciona 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 ddterminar.


ddnão funciona praticamente o tempo todo: com o bsparâmetro, ele ignora alguns erros .
Gilles 'SO- stop be evil'
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.