rsync: crea un file temporaneo durante il trasferimento?


37

Per quanto posso vedere rsync non crea il file nella directory di destinazione fino a quando non è completo.

Ciò deve significare che crea il file in una directory temporanea da qualche parte e copia il file nella directory di destinazione al termine.

Prima di tutto, è corretto?

Se vero, è possibile per rsync impostare di non utilizzare una directory temporanea e creare invece il file nella directory di destinazione e continuare a scriverlo fino al completamento?

Risposte:


46

Sì, crea un file temporaneo.

Secondo la pagina man è possibile specificare la directory in cui è archiviato il file temporaneo con il parametro -T come in

-T, --temp-dir = DIR crea file temporanei nella directory DIR

La risposta alla seconda parte della tua domanda è disponibile anche qui:

--a posto

Questa opzione cambia il modo in cui rsync trasferisce un file quando è necessario aggiornare i dati del file: invece del metodo predefinito per creare una nuova copia del file e spostarlo in posizione quando è completo, rsync invece scrive i dati aggiornati direttamente nella destinazione file.


4
Nota importante! La domanda presuppone che rsync "copi il file in posizione", mentre la documentazione di rsync specifica che rsync lo sta effettivamente "spostando in posizione", che è una DISTINZIONE IMMORTANTE . Ciò garantisce che il file venga visualizzato nella posizione di destinazione in modo atomico . Ciò è utile per prevenire le condizioni di competizione in cui un'altra applicazione è in attesa della visualizzazione del file di destinazione e lo apre immediatamente per la lettura, ma il file non viene copiato.
Ogre Salmo33,

15

Crea un file temporaneo, per impostazione predefinita nella directory di destinazione e denominato .<FILE_NAME>.<RANDOM_STRING>. Quindi, se stai copiando foo.txt, creerà un file tmp chiamato .foo.txt.GV4H3( GV4H3è la stringa casuale che sarà diversa ogni volta che lo eseguirai). Puoi controllare questo comportamento usando queste rsyncopzioni:

   --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.

Si prega di leggere le parti pertinenti della rsyncpagina man (di seguito è riportato solo un piccolo estratto dell'ampia sezione sull'uso --partial-dir).


5

rsync crea file temporanei nella directory di destinazione. Quel file è chiamato come il sorgente ma con un'estensione. Potrebbe essere così:

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

L'estensione viene rimossa dopo che il file è stato verificato come una copia esatta dell'origine. Durante il processo di ridenominazione vengono impostati i permessi e i tempi di modifica. Quindi è possibile che non visualizzi il file a causa delle autorizzazioni. Assicurati di disporre dell'autorizzazione sufficiente per visualizzare tutti i file e quelli non di tua proprietà per poter visualizzare i file temporanei.



@ ЯрославРахматуллин rsync può anche essere eseguito in modalità demone. Oppure può essere programmato come cronjob. In entrambi i casi è possibile che l'utente con il quale rsync è in esecuzione non sia l'utente che desidera visualizzare il file temporaneo. In tal caso è possibile che si tratti di un problema di autorizzazione.
Simon

1
Il file temporaneo potrebbe iniziare con ".". In questo caso, è .foo.bar.hzmkjt7.
interskh,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.