rsync - crée-t-il un fichier temporaire pendant le transfert?

37

Autant que je sache, rsync ne crée pas le fichier dans le répertoire cible tant qu'il n'est pas complet.

Cela doit signifier qu'il crée le fichier dans un répertoire temporaire et le copie dans le répertoire cible une fois terminé.

Tout d'abord, est-ce correct?

Si la valeur est true, est-il possible pour rsync de ne pas utiliser un répertoire temporaire, mais plutôt de créer le fichier dans le répertoire cible et de continuer à l'écrire jusqu'à ce qu'il soit terminé?

guépard
la source

Réponses:

46

Oui, cela crée un fichier temporaire.

Selon la page de manuel, vous pouvez spécifier le répertoire dans lequel le fichier temporaire est stocké avec le paramètre -T comme dans

-T, --temp-dir = DIR créer des fichiers temporaires dans le répertoire DIR

La réponse à la deuxième partie de votre question peut également être trouvée ici:

--en place

Cette option modifie la manière dont rsync transfère un fichier lorsque les données du fichier doivent être mises à jour: au lieu de la méthode par défaut consistant à créer une nouvelle copie du fichier et à le déplacer à la fin, rsync écrit les données mises à jour directement dans la destination. fichier.

superutilisateur0
la source
4
Note importante! La question suppose que rsync "copie le fichier en place", alors que la documentation de rsync spécifie que rsync "le déplace en place", ce qui est une DISTINCTION IMORTANTE . Cela garantit que le fichier apparaît dans l'emplacement de destination de manière atomique . Ceci est utile pour éviter les situations de concurrence lorsqu'une autre application attend que le fichier de destination apparaisse et l'ouvre immédiatement en lecture, mais que le fichier n'est pas copié.
Ogre Psalm33
15

Il crée un fichier temporaire, par défaut dans le répertoire cible et nommé .<FILE_NAME>.<RANDOM_STRING>. Donc, si vous copiez foo.txt, cela créera un fichier tmp appelé .foo.txt.GV4H3( GV4H3c'est la chaîne aléatoire qui sera différente à chaque fois que vous l'exécuterez). Vous pouvez contrôler ce comportement en utilisant ces rsyncoptions:

   --partial
          By default, rsync will delete any partially transferred
          file if the transfer is interrupted.  In  some  circum‐
          stances  it  is more desirable to keep partially trans‐
          ferred files. Using the --partial option tells rsync to
          keep  the  partial  file which should make a subsequent
          transfer of the rest of the file much faster.

   --partial-dir=DIR
          A better way to keep partial files than  the  --partial
          option  is  to  specify a DIR that will be used to hold
          the partial data (instead of writing it out to the des‐
          tination file).  On the next transfer, rsync will use a
          file found in this dir as data to speed up the  resump‐
          tion  of  the  transfer and then delete it after it has
          served its purpose.

Veuillez lire les parties pertinentes de la rsyncpage de manuel (ce qui suit n’est qu’un extrait de la grande section consacrée à son utilisation --partial-dir).

terdon
la source
5

rsync crée des fichiers temporaires dans le répertoire cible. Ce fichier est nommé comme la source mais avec une extension. Ça pourrait être comme ça:

source: foo.bar 
target temp: foo.bar.hzmkjt7 (hzmkjt7 is just an example) 

L'extension est supprimée une fois que le fichier a été vérifié comme étant une copie exacte de la source. Au cours du processus de renommage, la propriété, les autorisations et l'heure de modification sont définies. Il est donc possible que le fichier ne soit pas visible à cause des autorisations. Assurez-vous que vous avez suffisamment de permission pour voir tous les fichiers ainsi que ceux qui ne vous appartiennent pas afin de voir les fichiers temporaires.

Simon
la source
Un processus crée des fichiers avec les autorisations de l'utilisateur qui l'exécute . Il n'est pas possible de ne pas voir les fichiers à cause d'autorisations dans ce cas.
рослав Рахматуллин
@ ЯрославРахматуллин rsync peut également être exécuté en mode démon. Ou il peut être programmé comme un cronjob. Dans les deux cas, il est possible que l'utilisateur sous lequel rsync est exécuté ne soit pas l'utilisateur qui souhaite voir le fichier temporaire. Dans ce cas, il est possible qu'il s'agisse d'un problème d'autorisation.
Simon
1
Le fichier temporaire peut commencer par ".". Dans ce cas, il s'agit de .foo.bar.hzmkjt7.
interskh