2010-06-25 12:29:20 +0000 2010-06-25 12:29:20 +0000
126
126

Quais são as diferenças entre as opções de eliminação rsync?

Vejo na página rsync man que há uma série de opções delete, mas não compreendo realmente as diferenças entre elas. Quais são as diferenças entre estas 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

Respostas (4)

125
125
125
2010-06-25 14:19:55 +0000
  • --del/--delete_during: Elimina ficheiros do dir de destino à medida que são copiados (guarda memória em comparação com --delete-before: --delete-before: faz uma varredura separada para procurar os apagáveis)

& - --delete: Elimina ficheiros no directório de destino se não existirem no directório de origem.

& - --delete-before: Elimina ficheiros no directório de destino antes de copiar ficheiro com o mesmo nome do directório de origem

  • --delete-during: Apagar ficheiros no directório de destino QUANDO copiar ficheiro com o mesmo nome do directório de origem

  • --delete-delay: Marca apaga durante a transferência, mas espera até a transferência estar completa

& - --delete-after: O receptor apaga depois da transferência, não antes…Se alguma outra parte do rsync moveu ficheiros extra para outro lado, você quer isto em vez de --delete-delay, porque --delete-delay decide o que vai apagar no meio da transferência, enquanto --delete-after verifica no directório por ficheiros que devem ser apagados DEPOIS de tudo estar terminado.

& - --delete-excluded: Apaga ficheiros do directório de destino que são explicitamente excluídos da transferência do directório de origem.

: O ponto de rsync não é copiar, é arquivar. Esta é uma distinção importante. O processamento de ficheiros apagados/alterados é crítico, e em muitos casos matizado.

A bandeira --delete em particular é uma bandeira que já vi estragada muitas vezes. Muitas pessoas usam rsync para mover ficheiros para armazenamento de baixa prioridade, e neste caso quer que os ficheiros que está a mover ainda EXISTEM no directório de destino. Não é isso que apagar faz: --delete certifica-se de que, ao apagar um ficheiro do directório de origem, ele é TAMBÉM apagado do seu directório de destino, para que o seu destino não fique cheio de lixo… Uma vez viu um tipo apagar as suas cópias de segurança, colocando uma nova drive, e não desligando o seu script rsync nocturno. O script viu que o dir de origem estava agora vazio, e apagou todos os ficheiros no dir de destino, para que coincidissem.

A maioria das outras opções são relacionadas com espaço ou performance. Quando apaga os ficheiros é importante se quiser certificar-se de que a transferência é bem sucedida antes de fazer qualquer coisa, mas se o seu dispositivo for demasiado pequeno para lidar com 2 cópias de toda a informação, precisa de apagar à medida que avança, etc. É um pouco louco devido à sua longa história em múltiplas plataformas: algumas opções foram acrescentadas para que as pessoas que estavam habituadas a certos comportamentos não se confundissem.

2
2
2
2013-01-17 18:50:20 +0000

Um outro ponto que vale a pena mencionar é que se o seu directório de origem terminar com /*, então o rsync considerará apenas os ficheiros e não o directório em si (e portanto a ausência de ficheiros que pretende eliminar no destino).

Se estiver a especificar uma opção de eliminação acima, mas o rsync parece não estar a eliminar, então verifique se não está a globalizar acidentalmente e a fornecer uma lista de ficheiros quando se refere ao directório em si.

2
2
2
2010-06-25 12:57:07 +0000

Há duas coisas a acontecer:

  1. quem faz o apagamento
  2. Quando acontece

O remetente ou o receptor pode ser instruído para fazer a eliminação (não tenho a certeza porque é que isto importa). Assim, quando o rsync de um computador se liga ao servidor rsync do outro lado, isto determina quem está efectivamente a emitir o comando de apagar.

Quando acontece é muito fácil… antes significa que todos os ficheiros são apagados, e ENTÃO o rsync copia por cima dos ficheiros. durante os meios, ao passar pela lista de ficheiros, apaga-os quando se trata deles, e depois significa que espera até que todos os ficheiros sejam transferidos e depois apaga o lado remoto. Isto só é importante quando a transferência é interrompida.

0
0
0
2019-12-31 14:32:28 +0000

Por defeito rsync não apaga nenhum ficheiro no lado do destino. Para fazer rsync apagar ficheiros, é necessário utilizar pelo menos uma das opções de apagar.

Se não se importar quando os ficheiros estão a ser apagados, basta usar --delete e deixar a escolha para rsync. Pode combinar --delete com outras opções de apagar (isto não entra em conflito), mas não tem de o fazer, pois todas as outras opções de apagar já implicam --delete.

--delete-before funciona da seguinte forma: rsync procura que ficheiros estão presentes na fonte e que ficheiros estão presentes no destino, apaga todos os ficheiros encontrados no destino mas não na fonte e depois inicia a sincronização real. Esta ordem é útil se o destino tiver pouco espaço de armazenamento, pois primeiro libertará mais espaço em disco no destino antes de começar a transferir quaisquer novos ficheiros. A desvantagem é que rsync necessitará de mais memória para realizar a operação e toda a operação é um processo de duas etapas e, portanto, mais lento.

--delete-during funciona da seguinte forma: rsync começa imediatamente a sincronizar ficheiros e quando se depara com um ficheiro que existe apenas no destino, este é apagado. Desta forma, não há penalização de velocidade e também não é necessária memória adicional. A desvantagem é que pode acontecer que primeiro muitos ficheiros novos sejam copiados para os destinos antes dos ficheiros removidos serem apagados, pelo que o destino pode requerer muito mais espaço de armazenamento em disco durante a operação do que no final, uma vez terminada toda a operação.

--delete-after funciona da seguinte forma: Primeiro sincronizar todos os ficheiros, depois executar a mesma operação que --delete-before executa antes da fase de sincronização. Esta é a pior escolha na maioria dos casos comuns, uma vez que requer mais memória, mais espaço em disco no destino, e é mais lenta uma vez que é um processo de duas etapas; basicamente combina todas as desvantagens dos outros dois métodos. Esta opção existe principalmente para o caso em que se está a utilizar “merge files” (o que são ficheiros fundidos e como eles funcionam está para além do âmbito desta resposta). Como estes ficheiros podem conter regras para ficheiros a serem excluídos durante a eliminação, os novos ficheiros de fusão devem ser copiados antes da fase de eliminação se o seu conteúdo for considerado durante a fase de eliminação. A menos que isso seja um requisito, --delete-after não tem qualquer vantagem.

--delete-delay é uma opção bastante nova (não está disponível em rsync 2.6.9, que ainda é o padrão em macOS 10.15, por exemplo). Funciona como --delete-during, excepto que não apaga ficheiros imediatamente, mas após a sincronização ser feita, pelo que é um híbrido de --delete-during e --delete-after. A vantagem é que é mais rápido que --delete-after, a desvantagem é que requer mais memória durante a sincronização.

--delete-excluded diz a rsync não só para apagar ficheiros que faltam na fonte, mas também para apagar ficheiros no destino que foram excluídos da sincronização (--exclude ou --exclude-from), independentemente de estes ficheiros existirem na fonte ou não.