Eu gostaria de ter uma cópia sincronizada de uma pasta com todas as suas subárvores.
Deve funcionar automaticamente desta forma: sempre que eu crio, modifico ou apago coisas da pasta original, essas alterações devem ser aplicadas automaticamente à pasta de sincronização.
Qual é a melhor abordagem para essa tarefa?
BTW: estou no Ubuntu 12.04
O objetivo final é ter uma cópia de backup separada em tempo real, sem o uso de links simbólicos ou montagem. Eu usei o Ubuntu One para sincronizar dados entre meus computadores e, depois de um tempo, algo deu errado e todos os meus dados foram perdidos durante a sincronização.
Então, pensei em adicionar mais uma etapa para manter uma cópia de backup dos meus dados:
- Eu mantenho meus dados armazenados em uma "pasta A"
- Preciso da resposta à minha pergunta atual para criar uma sincronização unilateral da "pasta A" para a "pasta B" (
cron
um script comrsync
? Poderia ser?). Preciso que seja unilateral de A para B, quaisquer alterações em B não devem ser aplicadas a A. - O que eu simplesmente mantenho sincronizado a "pasta B" com o Ubuntu One,
desta forma qualquer mudança em A será aplicada a B, que será detectada do U1 e sincronizada com a nuvem. Se algo der errado e o U1 excluir meus dados em B, sempre os tenho em A.
Inspirado pelos comentários de lanzz, outra ideia poderia ser executar o rsync na inicialização para fazer backup do conteúdo de uma pasta no Ubuntu One, e iniciar o Ubuntu One somente depois que o rsync for concluído.
O que você acha disso? Como saber quando termina o rsync?
fonte
rsync
via cron.Respostas:
Você pode usar
inotifywait
(com osmodify,create,delete,move
sinalizadores habilitados) ersync
.while inotifywait -r -e modify,create,delete,move /directory; do rsync -avz /directory /target done
Se você não tem
inotifywait
em seu sistema, executesudo apt-get install inotify-tools
fonte
-e ssh user@remote:/target
arsync
se você quiser usar o SSH como o transporte para aceder ao seu computador remoto.rsync -avz --delete --exclude-from=.rsyncignore /directory user@server:path
. No entanto, queria escrever uma resposta simples..git
pasta.modify,create,delete,move
Você precisa de algo assim: https://github.com/axkibe/lsyncd É uma ferramenta que combina rsync e inotify - o primeiro é uma ferramenta que espelha, com as opções corretas definidas, um diretório para o último bit. O último diz ao kernel para notificar um programa sobre mudanças em um diretório ou arquivo. Diz:
Mas - de acordo com a Digital Ocean em https://www.digitalocean.com/community/tutorials/how-to-mirror-local-and-remote-directories-on-a-vps-with-lsyncd - deveria estar em o repositório Ubuntu!
Tenho requisitos semelhantes e esta ferramenta, que ainda não experimentei, parece adequada para a tarefa.
fonte
Apenas uma modificação simples da resposta @silgon:
while true; do inotifywait -r -e modify,create,delete /directory rsync -avz /directory /target done
(a versão @silgon às vezes trava no Ubuntu 16 se você executá-lo no cron)
fonte
Você pode aproveitar as vantagens do fschange . É uma notificação de alteração do sistema de arquivos Linux. O código-fonte pode ser baixado do link acima, você pode compilá-lo sozinho.
fschange
pode ser usado para controlar as alterações do arquivo lendo os dados de um arquivo proc (/ proc / fschange). Quando os dados são gravados em um arquivo, fschange relata o intervalo exato que foi modificado em vez de apenas dizer que o arquivo foi alterado. Se você está procurando uma solução mais avançada, sugiro verificar o Resilio Connect . É multiplataforma e oferece opções estendidas de uso e monitoramento. Por ser baseado em BitTorrent, é mais rápido do que qualquer outra ferramenta de sincronização existente. Foi escrito em seu nome.fonte
Eu uso este programa gratuito para sincronizar arquivos e diretórios locais: https://github.com/Fitus/Zaloha.sh . O repositório também contém uma demonstração simples.
O bom ponto: é um script bash shell (um arquivo apenas). Não é uma caixa preta como outros programas. A documentação também está lá. Além disso, com alguns talentos técnicos, você pode "dobrar" e "integrá-lo" para criar a solução final que desejar.
fonte