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 em cat
vez 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.