Sincronize pastas remotas no Linux


6

Qual é a maneira mais simples de sincronização incremental unidirecional de uma pasta presente em um sistema Linux.

+1 para usar a linha de comando. +2 por não usar o rsync (parece ter alguns problemas no meu sistema)


3
Quais são exatamente os seus problemas com o rsync?
innaM

5
Como rsyncmuito provavelmente é a resposta mais simples, explique quais problemas você está tendo com isso. (Os problemas podem transbordar para qualquer outra solução, de qualquer maneira.)
Telêmaco

Necro, sim, mas: sshfs também pode funcionar para qualquer um que esteja olhando para essa questão.
IronEagle

Respostas:


7

O csync é um sincronizador de arquivos especialmente projetado para você, o usuário normal.

O csync é uma biblioteca e envia o cliente de linha de comando por padrão. É sem servidor e permite a sincronização através de sftpou samba.

Exemplos de uso:

csync /home/csync smb://csync:secret@rupert.galaxy.site/Users/csync
csync /home/csync sftp://csync@krikkit.galaxy.site:2222/home/csync

O csynccomando é fornecido pelo csync-owncloudpacote do Ubuntu. ( sudo apt-get install csync-owncloud libcsync-plugin-sftp libcsync-plugin-smbse você quiser também)
ThorSummoner

Então, isso executa uma sincronização única por demanda. Não encontrei nenhuma informação sobre como usar isso para monitorar e sincronizar continuamente um diretório.
ThorSummoner

7

Eu acho que você deve resolver seus problemas com o rsync, que é a ferramenta de sincronização para os unix.

rsync -uav --delete /loal/path example.com:/remote/path

Nota: para sincronização bidirecional, você pode usar uníssono e csync .


+1, mas esta foi apenas uma resposta parcial para mim. Se você precisar usar rsyncsobre o ssh, usersync -uav --delete -e ssh remoteuser@remotehost:/remote/dir /this/dir/
zelanix

2

É assim que eu faria uma sincronização unidirecional com ferramentas simples.

No início, tar todo o conjunto de arquivos e copiá-los para o ponto de destino.
Além disso, configure um marcador no diretório base.

touch /Source/base/directory/last-sync-time.txt

Agora, queremos continuar sincronizando da origem ao destino.

No próximo intervalo de tempo para sincronização direta (da origem ao destino),

# The backup script
cd /Source/base/directory
tar cfj -N ./last-sync-time.txt backup.tar.bz2 .
scp backup.tar.bz2 user@backup-server:/Backup/Directory/
touch /Source/base/directory/last-sync-time.txt
rm -f backup.tar.bz2
  1. O tar-N ./filename informa para arquivar apenas arquivos modificados ou criados depois que foi modificado / criado. filename
    • Usando uma referência local para o tempo confirma que você não cometer erros; se um backup não foi feito por algum motivo, o próximo irá acumulá-lo
    • Você pode configurar esse script como uma entrada do cronjob na máquina de origem
    • Eu estou supondo que você vai usar scpcom autenticação de chave pública
    • Além disso, supondo que você pode alcançar o backup-serversempre que este script é emitido.
    • Para ser mais seguro, você pode adicionar verificações para confirmar se o backup foi armazenado e, em seguida, emitir o touchcomando
    • Você também pode optar por inserir comandos para expandir os backups sobrepostos aos anteriores no ponto de destino; Ou mantenha tar.bz2arquivos incrementais .

0

Eu uso este script curto para monitorar e sincronizar continuamente um diretório com a pasta sftp remota;

#!/bin/sh
dir1=/home/user/folder
 while inotifywait -qqre modify "$dir1";
 do
    csync /home/user/folder sftp://remoteuser:remotepass@remoteaddress:remoteport/remotefolderpath
done
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.