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?


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.


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'
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.