2010-09-22 10 views
13

Sto cercando di capire come se i file rsyncing siano atomici. Non sono riuscito a trovare alcuna conferma al riguardo. Dato che rsync è in grado di inviare solo delta, ho avuto l'impressione che aggiorni anche solo parti dei file live.Le operazioni rsync sono atomiche a livello di file?

Sull'altro hang DJB consiglia rsync per la sincronizzazione dei file live .cdb e ho trovato questo post (http://lists.samba.org/archive/rsync/2002-April/002210.html) che entrambi implicherebbero che il nuovo file è stato creato, quindi spostato nella posizione corretta.

Qualcuno può indicarmi una fonte ufficiale che confermi l'una o l'altra?

risposta

11

Rsync crea un nuovo file temporaneo che conterrà blocchi dalla copia locale (di ricezione) e dai blocchi necessari dalla copia di invio. Al termine, il file temporaneo viene spostato in posizione sostituendo l'originale.

I dettagli completi sono qui;

http://rsync.samba.org/how-rsync-works.html

+0

Non hai risposto alla domanda. - Ciò significa che l'aggiornamento di ogni singolo file è atomico? – zrajm

+0

Sì se si considera un'operazione di spostamento di file all'interno della stessa directory come atomica. –

+1

"Considerare"? Atomico vs non atomico dovrebbe essere un dato di fatto, non un'opinione, penso? :) Intendi dire che ci sono casi in cui la rinomina di un file in una directory (su un disco locale) è * non * atomica? Se sì, quando accadrà? – zrajm

1

No, rsync non scrive i file atomicamente.

Durante il trasferimento, un file temporaneo nascosto viene creato all'interno della stessa directory di destinazione (.[original-filename].[6-random-characters]) che contiene il file trasferito nel suo stato corrente.

Se vi capitasse di perdere la connessione durante il trasferimento o rsync incontri qualsiasi altro problema, causando la connessione da chiudere, prima di uccidere il processo rsync assicurarsi di copiare il file temporaneo al fine di mantenere tutti i pacchetti già trasferiti . È possibile semplicemente rinominare il file temporaneo (rimuovere l'iniziale "." E il trailing ".xxxxxx" per ottenere il nome file originale).