Rsync que lida com movimentos de forma sensata

10

Eu tenho usado com sucesso o rsync para sincronizar meus diretórios pessoais entre meu laptop e meu netbook (ambos usando ext4 com Linux). Meu único problema com isso é que de vez em quando eu gosto de reorganizar completamente certos diretórios, e o rsync vê isso como exclusões e criação de novos arquivos, o que o torna muito lento e ineficiente.

Alguém sabe de um bom software que lida bem com arquivos?

Descobri que o unison deve ser capaz disso, mas não parece funcionar na prática. Eu testei o unison sincronizando dois diretórios locais, cada um com um arquivo grande, e ele ainda detectou meu movimento como uma exclusão + criação e estava em vigor ainda mais lento que o rsync .

Além disso, se eu me lembro corretamente do meu código fonte do unison alguns meses atrás, ele tentou fazer algo como fazer somas simples - e eu não quero a minha solução ideal fazer somas simples - isso é muito lento em arquivos / diretórios grandes. Eu gostaria de algo que perceba coisas como:

" A última contraparte da fonte deste arquivo parece ter sido excluída e há um novo arquivo em outro lugar na árvore de diretórios de origem que tem o mesmo número de mdate, size e inode, portanto, presumo que isso foi um movimento e um movimento sua contraparte alvo, em vez de fazer uma exclusão + cópia. "

É importante para mim que eu seja capaz de sincronizar essas máquinas rapidamente.

Alguma sugestão?

    
por PSkocik 26.11.2013 / 12:41

5 respostas

6

Você deve dar uma olhada em rdiff-backup ele faz rsync abaixo, mas com a inteligência adicional que você precisa (e faz backups incrementais capazes de reverter, mas você pode configurar para desligar isso).

A última versão é antiga (2009), mas isso é um sinal de estabilidade.

    
por 26.11.2013 / 12:43
3

O Unison faz o que você deseja, mas apenas para sincronização remota. Tente usar ssh://localhost/path/to/dir como uma das raízes.

O Unison baseia suas decisões no conteúdo do arquivo, não monitora os números de inode.

    
por 27.11.2013 / 00:34
1

Você pode manipular arquivos movidos e renomeados com rsync se os sistemas de arquivos no diretório de origem e de destino tiverem suporte para links físicos. A ideia é deixar o rsync reconstruir links antes da transferência real. Você pode encontrar uma boa explicação aqui

Acabamos com uma solução simples que cria uma árvore oculta de hard links dentro do diretório source / target, o script básico poderia ser assim:

# Name of hidden directory
Shadow=".rsync_shadow"

# do real sync
rsync -ahHv --stats --no-inc-recursive --delete --delete-after "$Source"/ "$Target"

# update/create hidden dir of hard links in source
rsync -a --delete --link-dest="$Source" --exclude="/$Shadow" "$Source"/ "$Source/$Shadow"

# update/create hidden dir of hard links in target
rsync -a --delete --link-dest="$Target" --exclude="/$Shadow" "$Target"/ "$Target/$Shadow"

Eu tenho um script de exemplo no GitHub . Mas eu aconselho você a fazer uma grande quantidade de testes antes de usar este método na produção.

    
por 21.05.2014 / 10:19
0

Se você deseja sincronizar arquivos entre múltiplas máquinas, então você pode simplesmente usar um sistema de controle de versão centralizado como o Subversion (ou o FSVS, que usa o SVN como backend). A parte interessante é que tudo em seu / home (que você adiciona ao controle de versão) é versionado e pode ser facilmente sincronizado com outras máquinas ou revertido.

    
por 16.03.2014 / 07:15
0

O lsyncd também lida com arquivos movidos com o comportamento rsync + ssh, embora com um pouco de bugs (eu recebo cerca de 15% de movimentos tratados como delete / copy, ainda para descobrir o porquê). Na maioria das vezes, funciona.

    
por 25.12.2015 / 16:07