rsync siempre usa sumas de verificación para verificar que un archivo se transfirió correctamente. Si el archivo de destino ya existe, rsync puede omitir la actualización del archivo si la hora y el tamaño de la modificación coinciden con el archivo de origen, pero si rsync decide que los datos deben transferirse, las sumas de verificación siempre se usan en los datos transferidos entre los procesos rsync de envío y recepción . Esto verifica que los datos recibidos son los mismos que los datos enviados con alta probabilidad, sin la pesada sobrecarga de una comparación de nivel de bytes a través de la red.
Una vez que se reciben los datos del archivo, rsync escribe los datos en el archivo y confía en que si el núcleo indica una escritura exitosa, los datos se escribieron sin daños en el disco. rsync no vuelve a leer los datos y se compara con la suma de verificación conocida como una verificación adicional.
En cuanto a la verificación en sí, para el protocolo 30 y más allá (admitido por primera vez en 3.0.0), rsync usa MD5 . Para protocolos más antiguos, la suma de comprobación utilizada es MD4 .
Si bien durante mucho tiempo se consideró obsoleto para los hashes criptográficos seguros, MD5 y MD4 siguen siendo adecuados para verificar la corrupción de archivos.
Fuente: la página man y mirando el código fuente rsync para verificar.
-c
bandera: "Tenga en cuenta que rsync siempre verifica que cada archivo transferido fue reconstruido correctamente en el lado receptor al verificar una suma de verificación de todo el archivo que se genera a medida que se transfiere el archivo, pero que después de la transferencia la verificación no tiene nada que ver con esta opción antes de la transferencia "¿Es necesario actualizar este archivo?"rsync
no no hacer la verificación posterior a la copia de la copia de archivos locales. Puede verificar que no es asírsync
al copiar un archivo grande en una unidad lenta (es decir, USB) y luego copiar el mismo archivo concp
, es decir:Ambos comandos toman aproximadamente la misma cantidad de tiempo, por
rsync
lo tanto, no es posible que estén haciendo la suma de verificación, ya que eso implicaría volver a leer el archivo de destino del disco lento.La
man
página lamentablemente es engañosa sobre esto. También verifiqué esto con: una vez questrace
la copia está completa,rsync
no emiteread()
llamadas en el archivo de destino, por lo que no puede ser suma de verificación. Una más que puedes verificar es con algo comoiotop
: vesrsync
haciendo lectura y escritura simultáneamente (copiando desde el origen al destino), luego sale. Si se verificara la integridad, habría una fase de solo lectura.fuente
rsync -c
nuevo si quieres forzarlo a verificar.rsync
realiza una comparación de suma de comprobación antes de copiar (en algunos casos), para evitar copiar lo que ya está allí. El objetivo de la comparación de la suma de verificación no es verificar que la copia haya sido exitosa. Ese es el trabajo de la infraestructura subyacente: los controladores del sistema de archivos, los controladores de disco, los controladores de red, etc. Las aplicaciones individuales como lasrsync
que no necesitan molestarse con esta locura. Todo lo quersync
debe hacer (¡y lo hace!) Es verificar los valores de retorno de las llamadas al sistema para asegurarse de que no haya ningún error.fuente
Respuestas rápidas y sucias, directamente a las preguntas.
P: ¿Hará
rsync
la comparación al copiar los archivos entre dos unidades locales? R: Hará una comparación para descubrir qué copiar.P: Si hace una verificación, ¿es una apuesta segura? ¿O es mejor hacer una comparación byte por byte? A: tan seguro como las matemáticas detrás de la suma de comprobación MD5 del archivo. Puede intentar hacer un experimento simple para aprender y confiar en la herramienta.
Respuesta larga: supongo que querías
rsync
hacer una comparación de archivos (poco a poco o por suma de verificación) después de copiar los archivos. Si usted es uno de los pocos que valora la integridad de los datos, puede encontrar útil lo siguiente:la
rsync
carpeta de archivos de código anterior en la primera ejecución y, si se completa sin problemas, se ejecutarársync
nuevamente inmediatamente mientras se realiza la comparación del mismo nombre de archivo utilizando el hash de todo el archivo.fuente
Usando rsync para verificar la integridad de un duplicado
Para garantizar que esta prueba vuelva a leer físicamente los archivos de los medios de la unidad, sugiero apagar ambas unidades y reiniciarlas antes de ejecutar esta prueba. Esto eliminará sus cachés volátiles internos.
Si no también reinicia Linux, al menos debe soltar los cachés ( * ) con:
Luego, para volver a leer ambos árboles y comparar sus sumas de verificación:
La suma de comprobación rsync moderna usa MD5, que es de 128 bits. La probabilidad de que esto no detecte un error en un archivo individual es astronómicamente baja (alguna discusión aquí ), pero no imposible.
fuente
--checksum
hasta que la prueba haya pasado sin ella.