O uso do rsync enquanto a fonte está sendo atualizada é seguro?

19

É seguro usá-lo rsyncquando o sistema de arquivos de origem estiver montado e gravável, supondo que ele possa muito bem ser modificado enquanto o rsync estiver em execução? Presumo que, em condições de corrida, posso não receber as últimas modificações, mas existe algum risco de corrupção?

brianmearns
fonte
1
Você está preocupado com a consistência (entre arquivos, como um arquivo de dados e algum arquivo de metadados associado, log ou algo parecido) ou corrupção (dentro de um único arquivo) no caso de alterações?
precisa saber é o seguinte
Bom ponto, eu não tinha considerado a consistência entre os arquivos. Suponho que não rsyncpossa realmente fazer nada sobre isso, apenas um instantâneo pode, mas estou mais preocupado com a corrupção dentro de um arquivo.
Brianmearns

Respostas:

20

O uso rsyncé bastante seguro em sistemas de arquivos montados para leitura e gravação. Quando rsyncé iniciado, ele cria uma lista de arquivos e começa a copiar esses arquivos. Esta lista de arquivos não está sendo atualizada durante a execução. Os dados reais são copiados.

Isso significa que quando um arquivo é alterado após rsync a criação da lista de arquivos, ele copia o novo conteúdo. No entanto, quando um novo arquivo é adicionado após a rsynccriação de sua lista de arquivos, esse novo arquivo não é copiado. Se um arquivo for excluído depois de rsynccriar a lista de arquivos, o rsync avisará que não foi possível copiar esse arquivo. Lembre-se de que rsyncnão é um instantâneo, isso significa que é difícil saber em que momento rsyncos dados foram copiados.

As capturas instantâneas do sistema de arquivos ou do gerenciador de volumes (por exemplo, usando ZFS ou LVM), são criadas instantaneamente e são uma captura instantânea consistente do sistema de arquivos em um momento bem definido que pode ser copiado para outro host. rsyncnão oferece esse tipo de consistência.

EDIT: Como outros salientaram nos comentários, há uma chance de que rsyncpossa realmente corromper seu arquivo. Quando o rsync começa a ler um arquivo e um aplicativo está gravando esse arquivo ao mesmo tempo, você pode acabar com um arquivo corrompido.

Marco
fonte
2
Adicionada uma observação nos arquivos excluídos. Provavelmente daria outro voto positivo se eu pudesse pela sugestão de snapshot + rsync do gerenciador de volume. A única coisa que sinto que esta resposta está faltando é o comportamento do rsync quando os arquivos na fonte são alterados no meio da cópia. Duvido que lide com isso bem, no entanto.
um CVn
Acordado. Se você deseja que certos arquivos sejam consistentes, precisa de suporte do sistema operacional?
Thorbjørn Ravn Andersen
1
Esta resposta se aplica, desde que o aplicativo no lado da fonte grave primeiro em um arquivo temporário e depois o mova para o lugar. Se o aplicativo abrir um arquivo existente para gravação enquanto o rsync estiver lendo esse arquivo, o rsync poderá copiar uma mistura corrompida das versões antiga e nova.
Gilles 'SO- stop be evil' (
@ Gilles Obrigado por apontar isso. Eu atualizei minha resposta. Isso está relacionado ao rsync ou ocorre a algum aplicativo que lê enquanto outro aplicativo grava no mesmo arquivo?
Marco
1
@Marco Isso aconteceria com qualquer aplicativo, a menos que ambos usem algum protocolo de bloqueio (o unix não possui bloqueios obrigatórios, apenas bloqueios de aconselhamento, ou seja, bloqueios que só funcionam se todo mundo estiver usando). É por isso que o protocolo normal para modificar um arquivo se a modificação simultânea é uma preocupação é gravar um arquivo temporário e movê-lo no lugar.
Gilles 'SO- deixa de ser mau'