Recentemente, configurei uma máquina com o Ubuntu Server para hospedar servidores de jogos. Eu instalei um plug-in de backup para cada servidor de jogo que cria backups freqüentes de arquivos do mundo do jogo em uma pasta específica na máquina. Também estabeleci uma cron
tarefa para copiar automaticamente esses backups para minha pasta do Dropbox todas as noites usando o rsync com a -a
opção
Depois de alguns meses, minha conta do Dropbox atingiu seu limite de armazenamento e eu percebi que não seria capaz de manter tantos backups. Por isso, configurei o plug-in de backup do servidor de jogos para não reter tantos backups e esperei alguns dias para ver se conseguiria. exclua os backups mais antigos, conforme programado semanalmente. O plug-in de backup acabou fazendo seu trabalho e excluiu os backups mais antigos, então eu esperava que a rsync
tarefa cron excluísse posteriormente os backups mais antigos da minha pasta do Dropbox para corresponder à pasta de origem, mas não o fez. Então, eu tenho algumas perguntas:
Por padrão,
rsync
apenas adiciona arquivos à pasta de destino que foram adicionados à pasta de origem e altera os arquivos que foram alterados na pasta de origem, mas NÃO exclui os arquivos que foram excluídos da pasta de origem?Se for esse o caso, qual é a melhor maneira de
rsync
fazer isso? Quero que a pasta de destino reflita perfeitamente a pasta de origem, e isso significa excluir todos os arquivos que foram excluídos da pasta de origem.
Vejo algumas opções listadas na página de manual rsync
que podem ajudar, mas como não estou familiarizado.
source/* dest/
não funcionará.--delete
ou--delete-after
ele não será excluído devido a alguns erros: "Erro de IO encontrado - pulando a exclusão do arquivo". Para resolver este add--ignore-errors
opção e depurar os erros separadamente-n, --dry-run
opção antes de executarrsync
, especialmente quando se trata de opções como estas (--delete
). Isso evitará qualquer possível dor de cabeça :).-a
implica-r
.O comando rsync não excluirá nenhum arquivo enquanto você usa algumas de suas opções
delete
nesse comando. Portanto, se algum arquivo ou pasta tiver sido adicionado à fonte, ele será sincronizado para o destino sem nenhuma exclusão.Eu sugiro que você use
rsync
para fazer backup de arquivos de origem efind ... rm
para excluir arquivos por período de tempo ou tamanho dos arquivos:O bloco de código acima, faça um backup da fonte e exclua todos os arquivos cuja última modificação foi de mais de 2 meses.
ATUALIZAR
Como acho que as
delete
opções são apenas para o TARGET que, se alguns arquivos forem removidos da fonte,rsync --delete
remova-os do TARGET. E adelete
opção byafter
ebefore
, conforme mencionado em sua página de manual:Significa que:
--delete-after receiver deletes after transfer, not during
Significa que:
NOTA : o
--delete-{before/after}
implemento apenas no TARGET.fonte
Este comando copiará os dados de incremento e os manterá sincronizados com o servidor remoto.
rsync -avWe ssh --delete-before (source) root@localhost:(destination) rsync -avW --delete-before -e ssh (source) root@localhost:(destination)
Exemplo:
fonte
rsync: Failed to exec --delete-before: No such file or directory (2)
Se houver algum erro durante uma scync rsync, rsync não vai apagar corretamente os arquivos que ele deve ter, mesmo se você usou
--delete
,--delete-after
ou--delete-before
.É por isso que é importante resolver os erros do rsync.
A maioria dos meus erros ocorreu devido ao uso da
--perms
opção durante a sincronização com um sistema de arquivos não Linux. Quando substituí--perms
por--no-perms
, esses erros desapareceram e a exclusão funcionou.--perms
está ok quando você está sincronizando de um sistema de arquivos Linux para outro sistema de arquivos Linux, mas se estiver sincronizando do Linux para um sistema de arquivos não Linux (como NTFS, FAT),--perms
ocorrerá erros porque o rsync não pode definir permissões do Linux em um sistema de arquivos Linux. sistemas de arquivos não-linux . Novamente, erros = sem exclusão.- Ao sincronizar a uma partição não-Linux, eu uso
--no-perms
para evitar esses erros que sabotagem--delete
,--delete-after
ou--delete-before
.Se você ainda receber erros depois disso e não conseguir descobrir como fazer com que esses erros ocorram, poderá executar um comando exclusivamente dedicado à exclusão dos arquivos fora de sincronia:
O comando acima excluirá itens fora de sincronia, mas não sincronizará nenhum arquivo. Portanto, você deve sincronizar novamente depois disso. Esse comando é baseado nesta resposta , exceto que eu adicionei o
--ignore-errors
argumento também, portanto, ele seria excluído mesmo se houver erros.fonte