time - orden - rsync options
Suma de comprobación Rsync solo para archivos del mismo tamaño (2)
Al determinar si se transfieren archivos (o con --dry-run
, si se --dry-run
archivos), rsync siempre transferirá archivos que difieren en el tamaño del archivo. Sin embargo, cuando los archivos tienen el mismo tamaño, rsync tiene varias opciones:
- con
--size-only
: nunca transfiera archivos - con
--ignore-times
: siempre transfiere archivos - predeterminado: si las marcas de tiempo difieren, transfiera los archivos
- con
--checksum
: calcular sumas de comprobación y transferir archivos si difieren
El comportamiento que desea sería una combinación de los dos últimos: "si las marcas de tiempo difieren, calcule sumas de comprobación y transfiera archivos si las sumas de comprobación también difieren". Esta no es actualmente una opción en rsync.
Desafortunadamente, al mirar el código fuente de rsync, parece que no sería trivial agregar esta funcionalidad. Actualmente, si se utilizan sumas de comprobación, la rsync remota recopila información sobre el tamaño, la marca de tiempo y el control y las envía juntas. El comportamiento deseado requeriría que la rsync remota envíe primero el tamaño y la marca de tiempo, y cuando la rsync local determine que se necesita una suma de comprobación, regrese al archivo para obtener la suma de comprobación. Pero el aspecto completo de "la rsync remota vuelve al archivo" no está presente en el código actual, y primero tendría que escribirse.
Cuando ejecuta una transferencia real, el segundo paso se puede realizar efectivamente durante el proceso de transferencia: la transferencia de archivos que no difieren es muy eficiente. Entonces, el comportamiento predeterminado de rsync sería suficiente. Al usar --dry-run
el mejor enfoque sería ejecutar primero rsync con comportamiento predeterminado, reunir el --dry-run
y luego ejecutar rsync de nuevo, con --checksum
, en los archivos encontrados en la primera ejecución.
Hay un montón de hilos relacionados con la suma de comprobación de rsync, pero ninguno parece abordar esta necesidad, que sería la forma más efectiva y rápida de sincronizar, al menos en mi caso:
- mismo tiempo y mismo tamaño ► archivo de salto (sin transferencia, sin suma de comprobación)
- diferentes tamaños ► archivo de transferencia (sin suma de comprobación)
- diferentes tiempos y el mismo tamaño ► realizar suma de comprobación ► transferencia solo si las sumas de comprobación difieren
Me di cuenta de que la opción --checksum
realmente puede tomar mucho tiempo para duplicar una carpeta, si hay una gran cantidad de archivos. Al utilizar esta opción solo, se ejecutará una suma de comprobación en cada archivo, lo que es muy seguro pero muy lento. Además, inducirá sobrecarga de acceso de lectura para calcular la suma de comprobación.
La opción --ignore-times
no es lo que quiero, si el tiempo y el tamaño coinciden, la posibilidad de que los archivos sean diferentes es insignificante, estoy dispuesto a correr el riesgo de no transferir.
La opción --size-only
está incompleta, ya que existe una buena posibilidad de que los archivos que tienen el mismo tamaño pero diferentes veces pueden ser archivos diferentes (por ejemplo, cambiar un carácter en otro puede no afectar el tamaño, solo el tiempo de edición).
¿Hay alguna manera de realizar la duplicación según la combinación anterior, con rsync (¿me perdí algo en las páginas de manual) o con otras herramientas de Linux?
Gracias.
La respuesta corta ... lo hace.
same time and same size ► skip file (no transfer, no checksum)
Bueno y rápido, pero no exacto, rsync lo ofrece por defecto. El archivo puede ser modificado y el tiempo / tamaño sigue siendo el mismo. (los tiempos se pueden restablecer) Puede usar -c si es paranoico.
different sizes ► transfer file (no checksum)
Simplista ... ¿y si es un archivo de 2 gigas ... y la única diferencia es 1 línea al final? La suma de comprobación puede resolver eso y ahorrar el tráfico de la red. Puede usar -c si confía en la comparación de tiempo / tamaño.
different times and same size ► perform checksum ► transfer only if checksums differ
Por supuesto.
No lo veo, pero recuerdo que rsync solía tener un problema si había más ... Creo que era alrededor de 130,000 archivos. Tal vez ese problema fue solucionado.
Si tiene tantos archivos en un directorio, probablemente tenga problemas mayores ... extiéndalos en diferentes directorios y realice múltiples rsyncs en esos múltiples directorios.
Muchos archivos pequeños (en la mayoría de los sistemas de archivos) tienen muchos problemas de fragmentación interna y es mejor que archives los archivos y sincronices el archivo ... necesitas un archivador que permita actualizar el archivo en lugar de volverlo a crear todo el tiempo .
Tal vez, si no se actualizan muchos de estos archivos ... encuentre los cambiados después de una fecha (busque --nevery file) y luego rsync solo esos archivos. (si confías en los tiempos)
¿Por qué esta pregunta fue ignorada por tanto tiempo?