Vejo na página de manual do rsync que existem várias delete
opções, mas realmente não entendo as diferenças entre elas. Quais são as diferenças entre essas opções?
--del an alias for --delete-during
--delete delete extraneous files from dest dirs
--delete-before receiver deletes before transfer (default)
--delete-during receiver deletes during xfer, not before
--delete-delay find deletions during, delete after
--delete-after receiver deletes after transfer, not before
--delete-excluded also delete excluded files from dest dirs
--delete-before
é descrito como(default)
? Não consigo entender o que(default)
significa.man
página pararsync version 3.1.2 protocol version 31
. No entanto, meu palpite na versão com o texto citado é que, se você usar apenas--delete
ao invés de--delete-WHEN
, é como se você especificasse--delete-WHEN
onde oWHEN
padrão ébefore
.Respostas:
--del/--delete_during
: Exclui arquivos do diretório de destino à medida que são copiados (economiza memória em comparação com--delete-before
:--delete-before
faz uma verificação separada para procurar exclusões)--delete
: Exclui arquivos no diretório de destino se eles não existirem no diretório de origem.--delete-before
: Exclua os arquivos no diretório de destino antes de copiar o arquivo com o mesmo nome do diretório de origem--delete-during
: Exclua os arquivos no diretório de destino AO copiar o arquivo com o mesmo nome do diretório de origem--delete-delay
: A marca é excluída durante a transferência, mas aguarde até a transferência ser concluída--delete-after
: O receptor exclui após a transferência, não antes ... Se alguma outra parte do rsync moveu arquivos extras para outro lugar, você preferiria isso em vez de--delete-delay
, porque--delete-delay
decide o que será excluído no meio da transferência, enquanto--delete-after
verifica o diretório quanto a arquivos que deve ser excluído APÓS tudo terminar.--delete-excluded
: Exclui arquivos do diretório de destino explicitamente excluídos da transferência do diretório de origem.O ponto do rsync não é copiar, é arquivar. Esta é uma distinção importante. O processamento de arquivos excluídos / alterados é essencial e, em muitos casos, diferenciado.
A
--delete
bandeira em particular é uma que eu já vi estragada muitas vezes. Muitas pessoas usam o rsync para mover arquivos para o armazenamento de baixa prioridade e, nesse caso, você deseja que os arquivos que você está movendo ainda existam no diretório de destino. Não é isso que a exclusão faz:--delete
garante que, quando você exclui um arquivo do diretório de origem, ele TAMBÉM é excluído do diretório de destino, para que o seu destino não fique cheio de lixo ... Uma vez que um cara acabou com o backup colocando uma nova unidade e não desativando o script rsync noturno. O script viu que o diretório de origem agora estava vazio e excluiu todos os arquivos no diretório de destino, para que correspondessem.A maioria das outras opções está relacionada ao espaço ou ao desempenho. Quando você exclui os arquivos, é importante se você deseja garantir que a transferência seja bem-sucedida antes de fazer qualquer coisa, mas se o seu dispositivo for muito pequeno para lidar com 2 cópias de todas as informações, será necessário excluir conforme você for, etc. um pouco maluco por causa de sua longa história em várias plataformas: algumas opções foram adicionadas para que as pessoas que estavam acostumadas a determinado comportamento não fiquem confusas.
fonte
delete-after
exclui cada arquivo entre a sincronização ou somente após o diretório inteiro ter sido espelhado? Eu pensei quedelete-after
era suficiente para minhas necessidades, mas não recebo espaço no dispositivo ao fazer backup de uma das minhas unidades.delete-during
sempre o impedeno space left on device
(no Linux). Essadelete-before
é a única maneira garantida de evitá-lo (como ao espelhar uma unidade quase cheia e a unidade de destino também quase cheia).Há duas coisas acontecendo:
O remetente ou o destinatário podem ser instruídos a excluir (não sei por que isso importa). Portanto, quando o rsync de um computador se conecta ao servidor rsync do outro lado, isso determina quem está efetivamente emitindo o comando delete.
Quando isso acontece, é bem fácil ... antes significa que todos os arquivos são excluídos e ENTÃO o rsync copia sobre os arquivos. durante os meios enquanto percorre a lista de arquivos, os exclui quando se trata deles e depois significa que aguarda até que todos os arquivos sejam transferidos e exclui o lado remoto. Isso só importa quando a transferência é interrompida.
fonte
--delete-before
excluir apenas os arquivos que precisavam desaparecer, nem todos os arquivos! Mas eu acho que é possível que o rsync apaga tudo e, em seguida, transfere sobre os dados "novos" (possivelmente inalterado) ...--remove-source-files
.Outro ponto que vale a pena mencionar é que, se o diretório de origem terminar
/*
, o rsync considerará apenas esses arquivos e não o próprio diretório (e, portanto, a ausência de arquivos que você deseja excluir no destino).Se você está especificando uma opção de exclusão acima, mas o rsync parece que não está sendo excluído, verifique se você não está bloqueando acidentalmente e fornecendo uma lista de arquivos quando se refere ao próprio diretório.
fonte