RSync : 양방향으로 동기화하려면 어떻게합니까?


83

rsync를 사용 하여 양방향으로 두 디렉터리 를 동기화 하고 싶습니다 .

나는 고전적인 의미 (의 동기화를 참조 하지 가 rsync를 매뉴얼에서 의미하는 방법) :
내가 디렉토리를 업데이트 할 두 방향 중 어느가에 따라, 새로운 .

rsync (리눅스 방식에서 선호 됨)로이 작업을 수행 할 수 있습니까 ?
그렇지 않은 경우 어떤 다른 솔루션이 있습니까?


3
나는 serverfault.com 에서 더 나은 답을 얻을 것이라고 믿습니다 .
Esteban Küber

답변:


78

"최신"모드 (-u 또는 --update 플래그)와 -t (파일 수정 시간 복사), -r (재귀 폴더의 경우) 및 -v (상세 출력의 경우)를 사용하여 두 번 실행하면됩니다. 하기):

rsync -rtuv /path/to/dir_a/* /path/to/dir_b
rsync -rtuv /path/to/dir_b/* /path/to/dir_a

이것은 삭제를 처리하지 않지만주기적인 동기화만으로 그 문제에 대한 좋은 해결책이 있는지 확신하지 못합니다.


3
질문이 rsync에 관한 것이기 때문에이 답변을 올바른 것으로 표시하겠습니다.
java.is.for.desktop

2
그러나 당신은 다른 솔루션에 대해서도 물었고 Unison은 더 나은 일을합니다. 그렇지 않으면 다른 도구에 대해 언급하지 않았습니다. rsync 사용을 선호하는 특정 상황이있을 수 있음을 이해합니다.
MaD70

1
쳇, 당신은 6 개의 찬성표를 받고 여전히 불평하고 있습니까? <j / k> Unison은 정말 흥미로운 솔루션입니다. 말씀 해주셔서 감사합니다. :)
jsight

2
나는 불평하는 것이 아니라 설명하고 있습니다. 내가 뭔가를 놓치고 있지 않은지 확인하기 위해 (영어 원어민이 아닌).
MaD70

1
MaD70-문제 없어요 ... 농담이에요. :)
jsight

63

Unison File Synchronizer 를 알고 계십니까?

Unison은 Unix 및 Windows 용 파일 동기화 도구입니다. 파일 및 디렉토리 모음의 두 복제본을 서로 다른 호스트 (또는 동일한 호스트의 서로 다른 디스크)에 저장하고 개별적으로 수정 한 다음 각 복제본의 변경 사항을 다른 복제본에 전파하여 최신 상태로 가져올 수 있습니다. ...

또한 장애에 대해 탄력적입니다.

Unison은 실패에 탄력적입니다. 비정상적인 종료 또는 통신 실패의 경우에도 복제본과 자체 개인 구조를 항상 합리적인 상태로 두도록주의해야합니다.


2
+1. Unison이이를 수행하는 가장 좋은 방법입니다. Double-rsync는 제대로 작동하기 어렵고 삭제를 전혀 처리하지 않습니다.
Avdi

예, Unison은 내결함성이 있습니다. 나는 이것을 강조하기 위해 내 대답을 업데이트하고 있습니다.
MaD70

4
Unison에 대해 들어 보지 못했습니다. 오늘 집에서 백업 스크립트를 다시 실행하도록해야합니다.
Esteban Küber

1
내 대답이 매우 유용하다는 것이 기쁩니다 (이것은 건전한 이론적 기반을 기반으로 한 도구가 어떻게 실용적 일 수 있는지 보여줍니다).
MaD70

다음은 linuxjournal에서 Unison에 대한 짧은 튜토리얼 입니다.
lepe 2014 년

12

당신은 실행해야 rsync두 번 나는 그것을 실행하는 것이 좋습니다 -au:

rsync -au /local/source/* /remote/destination
rsync -au /remote/destination/* /local/source

-a(a for archive)는 다음에 대한 바로 가기입니다 -rlptgoD.

  • -r 하위 디렉토리로 재귀
  • -l 심볼릭 링크도 동기화
  • -p 파일 권한도 동기화
  • -t 또한 파일 수정 시간 동기화
  • -g 파일 그룹도 동기화
  • -o 파일 소유자도 동기화
  • -D 특수 (일반 / 메타 아님) 파일도 동기화

기본적으로를 사용하여 동일한 일대일 사본을 만들려면 rsync항상 -a" 동기화 " 에 대해 이야기 할 때 대부분의 사용자가 예상 하는 대로 사용해야 합니다. 여기에 다른 답변은 때때로 파일의 내용이 변경되지 않았지만 소유자가 변경되었거나 액세스 권한이 변경 rsync되었을 수 있으며이 경우 치명적인 파일을 동기화하지 않을 수 있다는 것을 간과하는 것 같습니다 .

그러나 파일 / 폴더가 이미 대상에 있고 최신 수정 날짜가있는 경우 파일 / 폴더를 완전히 남겨 두라 -u는 메시지도 표시해야 rsync합니다. 하지 않고는 -u rsync동기화 할 파일 / 폴더가 최신인지 아닌지에 관계없이 .

이 솔루션은 삭제 된 파일을 처리 할 수 ​​없습니다. 다음 상황을 고려하면 삭제 처리가 쉽게 불가능합니다. 파일이 소스에서 삭제되었습니다. 이제 rsync해당 파일이 한 번 존재하고 삭제되었는지 (이 경우 대상에서도 삭제되어야 함) 여부를 어떻게 알 수 있습니까? 소스에 존재하지 않았습니다 (이 경우 대상에서 복사해야 함). 이 두 상황은 동일 해 보이 rsync므로 올바르게 반응하는 방법을 알 수 없습니다. 동일한 상황으로 이어질 수 있으므로 다른 방식으로 동기화하는 것은 도움이되지 않습니다. 파일이 소스에 있지만 대상에는 없습니다. 왜? 목적지에 존재하지 않았거나 삭제 되었습니까? 두 경우 모두 rsync.

삭제 된 파일을 안정적으로 동기화 할 수있는 동기화 도구는 일반적으로 모든 이전 동기화 작업에 대한 동기화 로그를 관리합니다. 해당 로그에 한 번 파일이 있고 동기화되었지만 지금은 누락되었다고 표시되면 삭제 된 것입니다. 로그에 따르면 이러한 파일이 없었 으면 동기화해야합니다. 타임 스탬프와 함께 모든 로그 항목을 저장하면 삭제 된 파일이 다시 돌아와 여러 번 삭제 될 수도 있지만 동기화 도구는 항상 수행 할 작업을 알고 결과는 항상 정확합니다. rsync이러한 로그가 없으며 작업의 양면에 대한 현재 파일 상태에만 의존합니다.

그러나 rsync위에서 설명한대로 동기화 도구에 이미 매우 근접한 약간의 POSIX 쉘 스크립팅을 사용하여 동기화 명령을 직접 빌드 할 수 있습니다 . 이러한 도구가 필요했기 때문에 이러한 스크립트를 만드는 과정을 안내 하는 Stackoverflow에 대한 답변 이 있습니다.


아름답게.
Peter Rowntree

6

감사합니다 jsight

rsync -urv --progress dir_a dir_b && rsync -urv  --progress dir_b dir_a

이로 인해 첫 번째 동기화가 끝난 직후 두 번째 동기화가 수행됩니다. 디렉토리 구조가 큰 경우 PC 앞에 앉을 필요가 없기 때문에 시간이 절약됩니다. 구조가 거대하면 장황하고 진행되는 것을 제거하십시오.

rsync -ur dir_a dir_b && rsync -ur dir_b dir_a

1
파일 수정 시간을 복사하려면 -t를 추가해야하는지 궁금합니다. -t를 빼야 할 이유가 있습니까?
chrips

@Chrips 아니요, 그렇게 생각하지 않습니다. 이 답변의 목적은 &&두 명령 사이 를 사용 하여 첫 번째 명령이 성공한 경우 즉시 두 번째 명령을 자동으로 실행할 수 있음을 보여주는 것으로 보입니다. @jsight의 답변에서. 또한 -t이 답변이 게시 된 후 @jsight의 답변이 옵션 을 포함하도록 편집되었다고 생각 합니다.
Ruben9922

1

사용하다 rsync <OPTIONS> [hostname:]source-dir [hostname:]dest-dir

예를 들면 :

rsync -pogtEtvr --progress --bwlimit=2000 xxx-files different-stuff

xxx-files를 different-stuff / xxx-files로 동기화합니다. different-stuff / xxx-files가 존재하지 않으면 생성합니다.

-pogtEtv -파일 메타 데이터를 보존하기위한 다양한 옵션과 v-verbose 및 r-재귀

--progress -실시간 동기화 진행률 표시-대용량 파일 복사시 매우 유용

--bwlimit=2000 -복사 / 동기화의 최대 속도 설정 (bw = 대역폭)

PS rsync는 로컬 컴퓨터의 경우 cp 와 같은 명령을 사용할 수있는 네트워크를 통해 작업 할 때 매우 중요합니다 .

행운을 빕니다!


0

내가 사용하고 rsyncinotifywait. 파일을 변경 rsync하면이 실행됩니다.

inotifywait -m --exclude "$_LOG_FILE" -r -e create,delete,delete_self,modify,moved_to --format "%w%f" "$folder"

inotifywait두 호스트 모두에서 실행해야합니다 . inotifywait 예를 확인하십시오


0

필요한 것은 Rclone 입니다. Rclone ( "클라우드 스토리지 용 rsync")은 다른 클라우드 스토리지 제공 업체 (box, dropbox, ftp 등) 및 로컬 파일 시스템간에 파일 및 디렉토리를 동기화하는 명령 줄 Linux 프로그램입니다. Rlone은 미러 동기화 만 지원합니다.

실시간 동기화를 포함하는 또 다른 그래픽 솔루션은 RealTimeSync 프로그램이 포함 된 FreeFileSync 를 사용하는 것 입니다. FreefileSync는 삭제 처리를 포함하는 양방향 양방향 동기화를 지원합니다.

FreFileSync GUI

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.