Estaba leyendo varias guías sobre cómo combinar instantáneas de btrfs con rsync para crear una solución de respaldo eficiente con historial. Sin embargo, todo depende de si rsync --inplace
modifica solo aquellas partes de los archivos que realmente cambiaron, o si sobrescribe todo el archivo secuencialmente. Si escribe todo el archivo, parece que btrfs siempre creará una nueva copia del archivo, lo que haría que la idea fuera mucho menos eficiente.
21
rsync
lee todo el archivo y luego busca y actualiza solo aquellas partes que son necesarias, btrfs copiará solo estos bloques actualizados. Pero sirsync
lee y escribe todo el archivo, entonces será un problema.rsync
no solo sabe que puede evitar escribir todo el archivo, sino que logra hacerlo sin copiarlo completamente en la red. Pequeño programa inteligente.Respuestas:
Si pasa rsync dos rutas locales, se usará de forma predeterminada "--whole-file", y no delta-transfer. Entonces, lo que está buscando es "--no-full-file". También obtiene delta-transfer si solicitó '-c'.
Así es como puedes verificar:
Luego toca un archivo y vuelve a sincronizar
Puede verificar que reutilizó el inodo con "ls -li", pero observe que envió un total de 64K bytes. Intente nuevamente con --no-full-file
Ahora solo has enviado 494 bytes. Puede usar strace para verificar si alguno de los archivos fue escrito, pero esto muestra que al menos usó delta-transfer.
Tenga en cuenta (vea los comentarios) que para los sistemas de archivos locales,
--whole-file
se supone (vea la página del manual para rsync). Por otro lado,--no-whole-file
se supone que a través de una red , por--inplace
sí solo se comportará como--inplace --no-whole-file
.fuente
--inplace
implica--no-whole-file
?--no-whole-file
predeterminado de todos modos?--inplace
no implica--no-whole-file
la versión de rsync que estaba usando en 2013, pero puede repetir este experimento con su propia versión de rsync.inplace
no se trata de 'escanear en busca de bloques iguales / diferentes', se trata de sobrescribir el archivo existente de inmediato, desde el desplazamiento 0. (de lo contrario, se crea una copia temporal, y solo entonces se borra el archivo de destino anterior y se renombra la copia tempopary Probablemente se considere "más seguro" mantener el archivo antiguo el mayor tiempo posible, si el proceso se interrumpe. Por supuesto, esto es peor para el rendimiento, el consumo máximo de almacenamiento (piense en archivos grandes), posiblemente fragmentación ...) ...--no-whole-file
siempre implica--inplace
, de lo contrario, la mayor parte de su ganancia de rendimiento se habría ido. Sin embargo, no pude encontrar esto documentado ...Aquí la respuesta definitiva, supongo, citando la parte correcta del manual:
fuente
--inplace
sobrescribe solo las regiones que han cambiado. Úselo siempre cuando escriba en Btrfs.fuente
-vvv
muestra que omite bloques coincidentesEl algoritmo de transferencia delta de rsync trata de si se transmite todo el archivo o solo las partes que difieren. Este es el comportamiento predeterminado al sincronizar un archivo entre dos máquinas para ahorrar ancho de banda. Esto se puede anular con
--whole-file
(o-W
) para forzar larsync
transmisión de todo el archivo.--inplace
se ocupa de sirsync
, durante la transferencia, creará un archivo temporal o no. El comportamiento predeterminado es crear un archivo temporal. Esto proporciona una medida de seguridad ya que si se interrumpe la transferencia, el archivo existente en la máquina de destino permanece intacto / intacto.--inplace
anula este comportamiento y le dicersync
que actualice el archivo existente directamente. Con esto, corre el riesgo de tener un archivo inconsistente en la máquina de destino si se interrumpe la transferencia.fuente
Desde la página del manual:
Esto me lleva a creer que escribe sobre el archivo en su totalidad: me imagino que sería casi imposible que rsync funcione de otra manera.
fuente
El trabajo teórico sobre rsync in situ se describe en este documento. .
Referencia del trabajo: D. Rasch y R. Burns. In-Place Rsync: sincronización de archivos para dispositivos móviles e inalámbricos. Conferencia técnica anual de USENIX, pista FREENIX, 91-100, USENIX, 2003.
Desde el enlace:
Así que esto parece ser los detalles técnicos de lo que está haciendo rsync --inplace. Según el comienzo del artículo:
Como queda claro por la respuesta de @ dataless , esto implica que
--inplace
está usando el mismo espacio de almacenamiento, pero aún puede copiar todo el archivo en ese espacio. Específicamente, cuando se realizan copias desde / a sistemas de archivos locales, rsync asume la--whole-file
opción. Pero, por otro lado, cuando se trata de sistemas en red, asume la--no-whole-file
opción.fuente