2010-09-22 11 views
13

Estoy tratando de averiguar cómo si rsyncing archivos es atómico. No pude encontrar ninguna confirmación al respecto. Debido a que rsync solo puede enviar deltas, tuve la impresión de que también actualiza solo partes de los archivos en vivo.¿Las operaciones de rsync son atómicas a nivel de archivo?

Por el otro lado, DJB recomienda rsync para sincronizar archivos en vivo .cdb y encontré esta publicación (http://lists.samba.org/archive/rsync/2002-April/002210.html), ambas implican que el nuevo archivo se creó y luego se transfiere a la ubicación correcta.

¿Alguien me puede señalar a una fuente oficial confirmando una u otra?

Respuesta

11

Rsync crea un nuevo archivo temporal que contendrá los bloques de la copia local (recepción) y los bloques que requiera desde la copia de envío. Cuando haya terminado, el archivo temporal se coloca en su lugar reemplazando al original.

Los detalles completos están aquí;

http://rsync.samba.org/how-rsync-works.html

+0

No respondió la pregunta real. - ¿Esto significa que la actualización de cada archivo individual es atómica? – zrajm

+0

Sí, si considera que una operación de traslado de archivos dentro del mismo directorio es atómica. –

+1

"Considerar"? Atómico vs no atómico debe ser una cuestión de hecho, no de opinión, creo? :) ¿Quiere decir que hay casos en los que el cambio de nombre de un archivo en un directorio (en un disco local) es * no * atómico? Si es así, ¿cuándo sucedería eso? – zrajm

1

Sin, rsync no escribe archivos de forma atómica.

Durante la transferencia, un archivo temporal oculta se está creando en el mismo directorio de destino (.[original-filename].[6-random-characters]) que contiene el archivo transferido en su estado actual.

Si llegara a perder la conexión durante la transferencia o rsync encuentros cualquier otro problema, causando que la conexión se cierra, antes de matar el proceso rsync asegúrese de copiar el archivo temporal con el fin de mantener todos los paquetes ya transferidos . Simplemente puede cambiar el nombre del archivo temporal (elimine el "." Inicial y el final ".xxxxxx" para obtener el nombre del archivo original).

Cuestiones relacionadas