dd
o cualquier otra aplicación no tiene "algún tipo de verificación integrada" en el sentido en que probablemente esté pensando: no vuelve a leer los datos del medio de almacenamiento para compararlos con lo que se escribió. Ese es el trabajo del sistema operativo.
Realmente no es posible hacer una verificación de lectura hasta el hardware desde una aplicación. Funcionaría en algunos escenarios, pero en la mayoría de los casos no lograría nada. La aplicación podría leer lo que acaba de escribir si está escribiendo directamente en un medio de almacenamiento , pero eso normalmente se leería desde un caché en memoria, lo que no daría ninguna garantía útil. En el ejemplo que cita , dd
está escribiendo en una tubería, y en ese caso no tiene control sobre lo que sucede con los datos más adelante. En su ejemplo de rsync, una segunda pasada dersync --checksum
no tiene sentido: en teoría podría detectar un error, pero en la práctica, si ocurre un error, entonces el segundo pase probablemente no informará nada malo, por lo que está desperdiciando el esfuerzo en algo que en realidad no brinda una garantía útil.
Sin embargo, las aplicaciones no verifican lo que ocurre con los datos, en el sentido de que se compruebe que el sistema operativo tiene la responsabilidad aceptada para los datos. Todas las llamadas al sistema devuelven un estado de error. Si una llamada del sistema devuelve un estado de error, la aplicación debe propagar ese error al usuario, generalmente mostrando un mensaje de error y devolviendo un estado de salida distinto de cero.
Tenga en cuenta que dd
es una excepción: dependiendo de los parámetros de la línea de comando, dd
podría ignorar algunos errores . Esto es extremadamente inusual: dd
es el único comando común con esta propiedad. Use en cat
lugar de dd
, de esa manera, no corre el riesgo de corrupción y puede ser más rápido .
En una cadena de copia de datos, pueden surgir dos tipos de errores.
- Corrupción: se voltea un poco durante la transferencia. No hay forma de verificar esto a nivel de aplicación, porque si eso sucede, se debe a un error de programación o error de hardware que es muy probable que cause la misma corrupción al leer de nuevo. La única forma útil de verificar que no haya ocurrido tal corrupción es desconectar físicamente los medios e intentar nuevamente, preferiblemente en una computadora diferente en caso de que el problema fuera con la RAM.
- Truncamiento: todos los datos que se copiaron se copiaron correctamente, pero algunos de los datos no se copiaron en absoluto. Éste es digno de la comprobación a veces, dependiendo de la complejidad del comando. No necesita leer los datos para hacer eso: solo verifique el tamaño.