¿Es seguro usar rsync mientras se actualiza la fuente?

19

¿Es seguro usarlo rsynccuando el sistema de archivos de origen está montado y se puede escribir, suponiendo que se pueda modificar mientras se ejecuta rsync? Supongo que en condiciones de carrera no puedo obtener las últimas modificaciones, pero ¿existe algún riesgo de corrupción?

brianmearns
fuente
1
¿Le preocupa la coherencia (entre archivos, como un archivo de datos y algún archivo de metadatos asociado, registro o algo así) o la corrupción (dentro de un solo archivo) en caso de cambios?
un CVn
Buen punto, no había considerado la coherencia entre los archivos. No creo que rsyncpueda hacer nada al respecto, solo una instantánea puede hacerlo, pero estoy más preocupado por la corrupción dentro de un archivo.
brianmearns

Respuestas:

20

El uso rsynces bastante seguro en los sistemas de archivos montados de lectura-escritura. Cuando rsyncse inicia, crea una lista de archivos y luego comienza a copiar esos archivos. Esta lista de archivos no se actualiza durante la ejecución. Los datos reales se copian.

Esto significa que cuando un archivo cambia después de rsync haber creado la lista de archivos, copiará el nuevo contenido. Sin embargo, cuando se agrega un nuevo archivo después de rsynchaber creado su lista de archivos, este nuevo archivo no se copia. Si un archivo se elimina después de rsynchaber creado la lista de archivos, rsync le advertirá que no podría copiar ese archivo. Tenga en cuenta que rsyncno es una instantánea, esto significa que es difícil saber en qué momento rsynccopió los datos.

Las instantáneas del sistema de archivos o del administrador de volúmenes (por ejemplo, usando ZFS o LVM), por otro lado, se crean instantáneamente y son una instantánea coherente del sistema de archivos en un punto bien definido en el tiempo que luego se puede copiar a otro host. rsyncNo ofrece este tipo de consistencia.

EDITAR: Como otros han señalado en los comentarios, existe la posibilidad de que rsyncrealmente corrompa tu archivo. Cuando rsync comienza a leer un archivo y una aplicación está escribiendo ese archivo al mismo tiempo, puede terminar con un archivo corrugado.

Marco
fuente
2
Se agregó una nota sobre los archivos eliminados. Probablemente le daría a este otro voto positivo si pudiera para la instantánea del administrador de volumen + sugerencia de rsync. Lo único que siento que falta esta respuesta es el comportamiento de rsync cuando los archivos en la fuente se cambian en medio de la copia. Sin embargo, dudo que lo maneje bien.
un CVn
Convenido. Si desea asegurarse de que los archivos sean consistentes, ¿necesita soporte para el sistema operativo?
Thorbjørn Ravn Andersen
1
Esta respuesta se aplica siempre que la aplicación del lado de la fuente primero escriba en un archivo temporal y luego la coloque en su lugar. Si la aplicación abre un archivo existente para escribir mientras rsync está leyendo ese archivo, rsync puede copiar una combinación corrupta de la versión anterior y la nueva.
Gilles 'SO- deja de ser malvado'
@Gilles Gracias por señalar eso. Actualicé mi respuesta. ¿Está relacionado con rsync o ocurre esto en alguna aplicación que lee mientras otra aplicación escribe en el mismo archivo?
Marco
1
@Marco Eso sucedería con cualquier aplicación, a menos que ambas utilicen algún protocolo de bloqueo (Unix no tiene bloqueos obligatorios, solo bloqueos de aviso, es decir, bloqueos que solo funcionan si todos los usan). Es por eso que el protocolo normal para modificar un archivo si la modificación concurrente es una preocupación es escribir un archivo temporal y luego colocarlo en su lugar.
Gilles 'SO- deja de ser malvado'