Corrupção de arquivos usando rsync, vários processos de rsync, arquivos de origem movidos / renomeados

1

Estou encontrando alguma corrupção de arquivo ao usar o rsync (ou seja, o conteúdo do arquivo não corresponde ao arquivo de origem). Eu posso entender o arquivo se tornar corrompido se ele está sendo gravado enquanto está sendo sincronizado, mas eu não acho que está sendo gravado. Poderia ocorrer corrupção nesses outros casos?

1. O arquivo está sendo sincronizado por vários processos de rsync simultaneamente.

Isso parece ser uma coisa desnecessária e possivelmente perigosa. Mas vamos supor que seja necessário. Eu imagino que os dois processos de rsync sincronizam a fonte com dois arquivos temporários separados. Quando cada um é feito, ele executa uma renomeação atômica para substituir o arquivo de destino pelo temporário. Não vejo como isso poderia causar corrupção. Na pior das hipóteses, posso ver o último rsync terminando por último e fazendo com que o arquivo de destino seja sincronizado com uma versão potencialmente mais antiga do arquivo.

2. O arquivo de origem é movido / renomeado para a sincronização.

Ou seja, outro arquivo é renomeado para ter o mesmo nome do arquivo que está sendo sincronizado atualmente. Supondo que o processo de rsync na extremidade de origem abra o arquivo de origem uma vez e apenas uma vez, não vejo como isso pode causar danos. Quando um arquivo é renomeado para ocupar o lugar da fonte, o arquivo que o rsync abriu não muda. Ele deve continuar operando na fonte original, não modificada (assumindo que nenhum processo está sendo gravado).

Eu provavelmente estou fazendo suposições incorretas sobre como o rsync funciona. Sinta-se à vontade para corrigir quaisquer erros.

    
por tgnottingham 14.04.2015 / 05:47

1 resposta

0

Qual é exatamente a questão aqui?

Você deve adicionar alguns detalhes ao seu padrão de invocação de rsync para obter qualquer assistência significativa. Eu usei rsync por anos sem problemas. Eu acho que é seguro dizer que qualquer corrupção aparente é devido ao uso indevido desta ferramenta versátil. Se você não passar -c , rsync ignorará com base na hora e no tamanho da modificação. Mesmo se você passar -c , rsync não será atualizado se você também tiver passado -u e o arquivo for mais recente no destinatário. Se você passar --inplace , rsync atualizará arquivos de destino no local. Eu estou apenas dando estes como exemplos para mostrar que há um lote de interações entre as opções de rsync e você realmente precisa adicionar detalhes sobre como você está invocando rsync .

I can understand the file becoming corrupt if it is being written to while being synced, but I don't think it is being written to.

Em vez de adivinhar, que tal executar inotify (por exemplo, no diretório de contêiner do arquivo) para determinar com certeza que o arquivo só é atualizado por um processo a qualquer momento?

    
por 14.04.2015 / 06:03