Siempre me pregunté por qué rsync
intenta transferir un archivo a una ubicación remota donde tiene permisos de lectura / ejecución para el directorio de destino, pero no tiene permisos de escritura para crear el archivo de destino real. Esto se puede simular incluso localmente cuando se intenta copiar un archivo como un usuario normal a / , rsync
transferirá todo el archivo (también tarda bastante en archivos grandes) y finalmente falla con
rsync: mkstemp "/.myTargetFile" failed: Permission denied (13)
Por lo tanto, ya parece fallar en el inicio al intentar crear el archivo temporal (el archivo de puntos ) durante la transferencia. ¿Por qué no se da cuenta de esto y aborta temprano en lugar de intentar copiar todo el archivo sin tener permisos de escritura?
¿Y a dónde copia el archivo si no puede crear el archivo temporal? No puedo ver ningún aumento de memoria de los procesos rsync y tampoco ningún archivo correspondiente en / tmp . Parece que descarta directamente los datos en el destino, pero aún continúa con la transferencia.
fuente
--inplace
él, transfiere todo el archivo hasta notar la falta de permisos de escritura.--inplace
es muy útil cuando tiene derechos para escribir en un archivo pero no en el directorio que lo contiene.Esto parece ser una deficiencia del protocolo rsync actual como se explica en el rastreador de errores . El protocolo rsync no puede determinar de antemano si tiene permisos de escritura en el destino. En cambio, solo envía y comprueba el éxito o el fracaso después.
fuente
Rsync crea un archivo temporal en la misma carpeta del archivo de destino, por lo que, en este caso, debe copiar algunos archivos
/
, ya que no lo inició como root y normalmente/
solo se pudo escribir por root, por lo que falla.Para saber qué archivos se están copiando, pase el parámetro
-v
fuente
rsync
crea sus archivos temporales en la misma carpeta que el directorio de destino. Pero incluso si no puede crear esos archivos temporales, aún así comienza la transferencia y falla después, en lugar de verificar al principio si tiene todos los permisos de escritura requeridos. Quiero saber por qué se comporta así.