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)

Lakshman Prasad
fonte
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:[email protected]/Users/csync
csync /home/csync sftp://[email protected]:2222/home/csync
Robert Munteanu
fonte
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 .

Hayalci
fonte
+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 .
nik
fonte
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
umetnico
fonte