Rsync que lida com movimentos sensatos


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 é 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 com arquivos se move bem?

Descobri que o uníssono deve ser capaz disso, mas não parece funcionar na prática. Testei o uníssono sincronizando dois diretórios locais, cada um com um arquivo grande, e ele ainda detectou minha movimentação como uma exclusão + criação e, na verdade, era ainda mais lenta que o rsync .

Além disso, se eu me lembro corretamente da minha observação do código-fonte do uníssono há alguns meses, ele tentou fazer algo como fazer somas sha - e eu não quero que minha solução ideal faça somas sha - isso é muito lento em geral arquivos / diretórios. Eu gostaria de algo que note coisas como:

"A última contraparte de origem 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, tamanho e número de inode, então eu assumirei que essa foi uma mudança e mova sua contraparte de destino adequadamente em vez de excluir ou copiar ".

É importante para mim poder sincronizar essas máquinas rapidamente.

Alguma sugestão?

Respostas:


6

Você deve dar uma olhada no rdiff-backup por rsyncbaixo, mas com a inteligência adicional necessária (e torna os backups incrementais capazes de retroceder, mas você pode configurar para desativá- lo ).

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


2
Alguém tentou isso?
névoa

3

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

O Unison baseia suas decisões no conteúdo do arquivo, não controla os números dos inodes.


1

Você pode manipular arquivos movidos e renomeados com o rsync se os sistemas de arquivos no diretório de origem e destino tiverem suporte para links físicos. A idéia é permitir que o rsync reconstrua os links físicos 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 links físicos dentro do diretório de origem / destino, o script básico pode 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 recomendo que você faça uma grande quantidade de testes antes de usar esse método na produção.


0

Se você deseja sincronizar arquivos entre várias máquinas, pode simplesmente usar um sistema de controle de versão centralizado como o Subversion (ou FSVS, que usa SVN como back-end). A parte boa é que tudo em sua / home (que você adiciona ao controle de versão) é versionado e pode ser facilmente sincronizado com outras máquinas ou revertido.


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 manipulados como exclusão / cópia, ainda para descobrir o porquê). Na maioria das vezes funciona.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.