Je me suis toujours demandé pourquoi rsync
essayait de transférer un fichier vers un emplacement distant où il avait des autorisations de lecture / exécution pour le répertoire cible, mais aucune autorisation d' écriture pour créer le fichier de destination réel. Cela peut être simulé même localement lorsque vous essayez de copier un fichier en tant qu'utilisateur normal vers / , rsync
transférera le fichier entier (prenant également assez de temps pour les fichiers volumineux) et échoue finalement avec
rsync: mkstemp "/.myTargetFile" failed: Permission denied (13)
Il semble donc déjà échouer au démarrage lors de la tentative de création du fichier temporaire (le fichier de points ) lors du transfert. Pourquoi ne le remarque-t-il pas et abandonne-t-il tôt au lieu d'essayer de copier le fichier entier sans avoir aucune autorisation d'écriture?
Et où copie-t-il le fichier s'il ne peut pas créer le fichier temporaire? Je ne vois aucune augmentation de mémoire des processus rsync et aucun fichier correspondant dans / tmp . On dirait qu'il rejette directement les données à destination mais continue toujours le transfert.
la source
--inplace
il transfère tout le fichier jusqu'à ce qu'il remarque le manque d'autorisations d'écriture.--inplace
est très utile lorsque vous avez le droit d'écrire dans un fichier mais pas dans le répertoire contenant.Cela semble être une lacune du protocole rsync actuel, comme expliqué dans le suivi des bogues . Le protocole rsync ne peut pas déterminer à l'avance s'il dispose d'autorisations d'écriture sur la cible. Au lieu de cela, il envoie et vérifie le succès ou l'échec par la suite.
la source
Rsync crée un fichier temporaire dans le même dossier que le fichier cible, donc dans ce cas, vous devez copier certains fichiers dans la
/
mesure où vous ne l'avez pas lancé en tant que root et qui/
n'était normalement accessible en écriture que par root, il échoue donc.Pour savoir quels fichiers sont copiés, passez le paramètre
-v
la source
rsync
crée ses fichiers temporaires dans le même dossier que le répertoire cible. Mais même s'il ne peut pas créer ces fichiers temporaires, il démarre le transfert et échoue ensuite au lieu de vérifier dès le début s'il dispose de toutes les autorisations d'écriture requises. Je veux savoir pourquoi ça se comporte comme ça.