rsync와 양방향 동기화


95

폴더 a /와 원격 폴더 A /가 있습니다. 이제 Makefile에서 다음과 같이 실행합니다.

get-music:
 rsync -avzru server:/media/10001/music/ /media/Incoming/music/

put-music:
 rsync -avzru /media/Incoming/music/ server:/media/10001/music/

sync-music: get-music put-music

내가 sync-music을 만들 때, 먼저 서버에서 로컬로 모든 diff를 가져온 다음 그 반대에서 모든 diff를 로컬에서 서버로 보냅니다.

이것은 미래에 업데이트 나 새 파일이있을 때만 매우 잘 작동합니다. 삭제가 있으면 아무 작업도 수행하지 않습니다.

rsync에는 내가 원하는 것을 달성하는 데 도움이되는 --delete 및 --delete-after 옵션이 있지만, 양방향 동기화에서는 작동하지 않습니다.

syn에서 서버 파일을 삭제하려면 로컬 파일이 삭제되었을 때 작동하지만 어떤 이유로 (이후 설명) 서버에 없지만 로컬에 존재하고 삭제 된 파일이있는 경우, 나는 그것들을 로컬에서 제거하고 서버가 복사하지 않기를 원합니다.

상황에 따라 3 대의 기계가 있습니다.

  1. 데스크탑
  2. 공책
  3. 홈 서버

따라서 때때로 서버에 노트북 동기화로 삭제 된 파일이있을 수 있습니다. 예를 들어 데스크톱에서 동기화를 실행할 때 (삭제 된 서버 파일이 여전히 존재하는 경우) 이러한 파일이 삭제되지 않기를 원합니다. 다시 서버에 복사되었습니다.

나는 이것이 데이터베이스와 작업 추적에서만 가능하다고 생각합니다.

더 간단한 솔루션이 있습니까? 감사합니다.


1
나는 이와 같은 문제가 있습니다. 해결책을 찾았습니까, mwm?
mouche

7
나는 지금 실제로했다. 나는 dropbox와 같은 경험을 얻으려고 노력했고 파일 변경을 모니터링하기 위해 unison (rsync 사용) 및 lsyncd를 포함하는 솔루션을 생각해 냈습니다. 나는 또한이 솔루션과 더 많은 트릭을 가진 다른 사람들을 찾았습니다» cerebralmastication.com/2011/04/fast-two-way-sync-in-ubuntu
mwm

요즘 저는 홈 서버에서 로컬로 nextcloud를 사용하고 있습니다. 완벽한 "드롭 박스"솔루션 100 % 내가 관리합니다. android / ios / win / macos / linux / web 클라이언트가 있습니다.
mwm

답변:


63

Unison 사용해보기 : http://www.cis.upenn.edu/~bcpierce/unison/

통사론: unison dirA/ dirB/

Unison은 파일이 다를 때 수행 할 작업을 요청하지만 기본 (비 충돌) 옵션을 허용하는 다음을 사용하여 프로세스를 자동화 할 수 있습니다.

unison -auto dirA/ dirB/

unison -batch dirA/ dirB/ 전혀 질문하지 않고 무시 된 파일 수를 출력합니다 (충돌했기 때문에).


7
Unison은 작은 디렉토리에 사용하기 매우 쉽습니다. 그러나 파일 수가 많은 디렉토리의 경우 극도로 느립니다. rsync가 거의 즉시 복사를 시작하는 경우 unison은 모든 파일을 복사하기 전에 모든 파일을 스캔하기 때문에 복사를 시작하는 데 12 시간 이상이 걸리는 경우가 있습니다.
Brent Faust

1
적어도 git은 사용하기 쉽고 전송 속도가 빠릅니다. blob의 경우 Large File Storage 라는 github에서 개발 한 확장이 있습니다.
wener

1
git의 주요 문제는 대용량 파일이며 실제로 명시 적 커밋을 위해 설계되었다는 것입니다. 둘 다 git-annex, 대용량 파일 저장소 등과 같은 추가 기능을 통해 상당히 개선 될 수 있습니다.
alex

3
@wener 망치로 나사를 사용하거나 드라이버로 못을 사용하지 마십시오. :)
ADTC

2
일치는 훌륭하지만 매우 신뢰할 수 없습니다. 내 사용 사례의 약 50 %에서 간단하지 않았습니다. 가장 일반적인 원인은 버전 간 기능이 부족하기 때문입니다. 권한이없는 컴퓨터의 콘텐츠와 가끔 동기화합니다. 해당 서버의 버전이 저와 다른 경우 unison이 실패합니다. 또한 최근에 동일한 버전의 단일 클라이언트간에 오류가 발생했습니다. 일부 라이브러리의 컴파일 된 버전이 다르기 때문입니다 (이는 우분투 컴퓨터와 라즈베리 파이간에 발생했습니다).
argentum2f



5

원래 질문에는 데스크톱 및 랩톱 및 음악 파일과 관련된 예제 (따라서 아마도 GUI를 사용하고 있음)가 포함되기 때문에 현재까지 최고의 양방향, 다중 플랫폼, 무료 및 오픈 소스 프로그램 중 하나 인 FreeFileSync를 언급하겠습니다. .

GUI 기반이며 매우 빠르고 직관적이며 원격 연결, "충돌"(예 : 유사한 타임 스탬프가있는 파일)을보고 대화식으로 관리하고 양방향 전송, 미러링 및 양방향 전환 기능을 포함하여 필터링 및 기타 여러 옵션이 제공됩니다. 곧.


4

이 시도,

get-music:
 rsync -avzru --delete-excluded server:/media/10001/music/ /media/Incoming/music/

put-music:
 rsync -avzru --delete-excluded /media/Incoming/music/ server:/media/10001/music/

sync-music: get-music put-music

나는 이것을 테스트하고 그것은 나를 위해 일했습니다. Windows7 (rsync 패키지가 설치된 cygwin 사용)과 FreeNAS 파일 서버 (FreeNAS는 rsync 패키지가 사전 설치된 FreeBSD에서 실행 됨)간에 양방향 동기화를 수행하고 있습니다.


3
새 로컬 파일이 삭제되지 않습니까? -u대상에서 최신 파일을 건너 뛰지 만 rsync는 삭제 기간을 추적하는 방법이 없습니다. 따라서이 스크립트는 로컬 파일이 새 파일 (유지해야 함)인지 오래된 것인지 (삭제해야 함)를 어떻게 구분할 수 있습니까? ? 아니면 오해입니까?
Matthemattics 2013-08-26

--delete-excluded대상 디렉토리에는 있지만 소스 디렉토리에는없는 파일을 삭제 합니까 ? 나는 당신이 정의 --exclude=<filename>해야 한다고 생각 했기 때문에 rsync는 이러한 제외를 삭제하지 않습니까? 아니면 rsync가 모든 비 소스 디렉토리 파일을 "제외"로 취급합니까?
Mr_Moneybags 2013-09-17

2
답을 찾았습니다 : 송신 측이 아닌 수신 측의 파일을 삭제하는 것 외에도 rsync는 제외 된 수신 측의 모든 파일을 삭제하도록 지시합니다 (--exclude 참조) rsync.samba.org/ftp /rsync/rsync.html
Mr_Moneybags 2013-09-17

2
내가 이해 한 바에 따르면 대상에 파일을 만든 다음 rsync 명령을 실행하여 소스에서 대상으로 복사하면 타임 스탬프가 사용되지 않기 때문에 대상에서 파일이 삭제됩니다. 이것은 당신이 원하는 것이 아닙니다.
elexhobby

10
@ Lübnah : 맞습니다; 이 솔루션은 전체 양방향 동기화하지 : rsync와 함께이 때문에 --delete-excluded실행되는 서버 는 AS 소스 첫째 : 파일을 로컬 추가가 됩니다 삭제 합니다 (추가 파일 반면 실행되는 동안 서버가 되는 로컬 대상으로 복사). 서버에 다시 동기화되는 유일한 로컬 파일은 서버 에도 존재하고 로컬수정 된 파일입니다 (서버 버전보다 최근에). OP의 시나리오에서는 가능성이 낮습니다. 힌트처럼, rsync실행 사이에 상태를 저장해야하기 때문에 methinks 진정한 양방향 동기화는으로 수행 할 수 없습니다 .
mklement0


1

지금 SparkleShare https://www.sparkleshare.org/를 사용하고 있습니다.

Mac, Linux 및 Windows에서 작동합니다.


시간이 지남에 따라 솔루션을 계속 업데이트합니다. 이제 홈 서버에서 nextcloud를 사용하고 있습니다. linux, mac, windows, android 및 ios에서 nextcloud 클라이언트와 동기화.
mwm

0

두 가지 동기화로 작동하는지 확실하지 않지만 --delete가 작동하려면 --recursive 매개 변수도 추가해야합니다.


1
옵션의 짧은 당량 --recurse이다 -r방공호하는 된다 (압축 옵션 그룹에 포함하여 -avzru).
mklement0 2014-06-07

0

cloudsync 를 사용 하여 원격 폴더와 동기화 된 폴더를 유지할 수 있습니다 .

pip install cloudsync
pip install cloudsync-gdrive
cloudsync sync file:c:/users/me/documents gdrive:/mydocs

원격지가 NFS 인 경우 다음을 사용할 수 있습니다.

cloudsync sync file:c:/users/me/documents/ file:/mnt/nfs/whatevs

-1

Rclone 은 당신이 찾고있는 것입니다. Rclone ( "클라우드 스토리지 용 rsync")은 로컬 파일 시스템을 포함한 다양한 클라우드 스토리지 제공 업체와 파일 및 디렉토리를 동기화하는 명령 줄 프로그램입니다. Rclone은 이전에 Swiftsync로 알려졌으며 2013 년부터 사용 가능했습니다.


그것은 양방향 동기화를 지원하지 않습니다 rclone.org/commands/rclone_sync
마틴 브라운
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.