L'uso di rsync mentre il sorgente viene aggiornato è sicuro?


19

È sicuro da usare rsyncquando il filesystem di origine è montato e scrivibile, supponendo che possa essere ben modificato mentre rsync è in esecuzione? Presumo che in condizioni di gara potrei non ricevere le ultime modifiche, ma c'è qualche rischio di corruzione?


1
Sei preoccupato per la coerenza (tra i file, come un file di dati e alcuni file di metadati associati, il registro o alcuni di questi) o la corruzione (all'interno di un singolo file) in caso di modifiche?
un CVn

Bene, non avevo considerato la coerenza tra i file. Suppongo che non rsyncpossa davvero fare nulla al riguardo, solo un'istantanea può, ma sono più preoccupata per la corruzione all'interno di un file.
brianmearns,

Risposte:


20

L'uso rsyncè abbastanza sicuro sui file system montati in lettura-scrittura. Quando rsyncviene avviato, crea un elenco di file e quindi inizia a copiare quei file. Questo elenco di file non viene aggiornato durante l'esecuzione. I dati effettivi vengono quindi copiati.

Ciò significa che quando un file cambia dopo rsync aver creato l'elenco dei file, copierà il nuovo contenuto. Tuttavia, quando un nuovo file viene aggiunto dopo rsyncaver creato il suo elenco di file, questo nuovo file non viene copiato. Se un file viene eliminato dopo rsyncaver creato l'elenco dei file, rsync avviserà che non è stato possibile copiarlo. Tieni presente che rsyncnon è un'istantanea, ciò significa che è difficile dire in quale momento rsynccopiati i dati.

Le istantanee del file system o del gestore del volume (ad esempio utilizzando ZFS o LVM), invece, vengono create istantaneamente e sono un'istantanea coerente del file system in un momento ben definito che può quindi essere copiato su un altro host. rsyncnon offre questo tipo di coerenza.

EDIT: Come altri hanno sottolineato nei commenti, c'è una possibilità che rsyncpotrebbe effettivamente corrompere il tuo file. Quando rsync inizia a leggere un file e un'applicazione sta scrivendo quel file contemporaneamente, potresti finire con un file corrotto.


2
Aggiunta una nota sui file eliminati. Probabilmente darei un altro voto se potessi per l'istantanea del gestore di volumi + suggerimento rsync. L'unica cosa che sento che manca questa risposta è il comportamento di rsync quando i file sul sorgente vengono cambiati nel mezzo della copia. Dubito che gestisca bene, però.
un CVn

Concordato. Se si desidera che determinati file siano coerenti, è necessario il supporto del sistema operativo?
Thorbjørn Ravn Andersen,

1
Questa risposta si applica a condizione che l'applicazione sul lato di origine prima scriva su un file temporaneo, quindi lo sposta in posizione. Se l'applicazione apre un file esistente per la scrittura mentre rsync sta leggendo quel file, rsync potrebbe copiare un mix corrotto tra la vecchia e la nuova versione.
Gilles 'SO- smetti di essere malvagio' l'

@Gilles Grazie per averlo sottolineato. Ho aggiornato la mia risposta. È correlato a rsync o si verifica a qualsiasi applicazione che legge mentre un'altra applicazione scrive nello stesso file?
Marco,

1
@Marco Ciò accadrebbe con qualsiasi applicazione, a meno che entrambi non utilizzino un protocollo di blocco (unix non ha blocchi obbligatori, solo blocchi consultivi, cioè blocchi che funzionano solo se tutti li usano). Ecco perché il normale protocollo per la modifica di un file se la modifica simultanea è un problema è scrivere un file temporaneo e spostarlo in posizione.
Gilles 'SO- smetti di essere malvagio' l'
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.