두 폴더를 자동으로 동기화하는 방법은 무엇입니까?


92

한 폴더의 모든 하위 트리와 동기화 된 복사본을 갖고 싶습니다.

이 방식으로 자동으로 작동합니다. 원본 폴더에서 항목을 생성, 수정 또는 삭제할 때마다 해당 변경 사항이 동기화 폴더에 자동으로 적용되어야합니다.

이 작업에 대한 최선의 접근 방식은 무엇입니까?

BTW : 저는 Ubuntu 12.04에 있습니다.

최종 목표는 심볼릭 링크 나 마운트를 사용하지 않고 별도의 실시간 백업 복사본을 만드는 것입니다. 컴퓨터간에 데이터를 동기화하기 위해 Ubuntu One을 사용했는데 잠시 후 문제가 발생하여 동기화 중에 모든 데이터가 손실되었습니다.

그래서 내 데이터의 백업 사본을 유지하기 위해 한 단계 더 추가하려고 생각했습니다.

  • 데이터를 "폴더 A"에 보관합니다.
  • "폴더 A"와 "폴더 B"의 단방향 동기화를 만들려면 현재 질문에 대한 답변이 필요합니다 ( ?가 cron있는 스크립트는 rsync? 일 수 있음). A에서 B로만 단방향이어야합니다. B에 대한 변경 사항은 A에 적용되지 않아야합니다.
  • 나는 단순히 "폴더 B"를 Ubuntu One과 동기화 된 상태로 유지합니다

    . 이런 방식으로 A의 모든 변경 사항은 B에 적용되며 U1에서 감지되어 클라우드에 동기화됩니다. 문제가 발생하고 U1이 B에서 내 데이터를 삭제하면 항상 A에 있습니다.

lanzz의 의견에서 영감을 얻은 또 다른 아이디어는 시작시 rsync를 실행하여 Ubuntu One 아래의 폴더 내용을 백업하고 rsync가 완료된 후에 만 ​​Ubuntu One을 시작하는 것입니다.

그것에 대해 어떻게 생각하세요? rsync가 언제 끝나는 지 아는 방법?


무엇을 성취하려고합니까? 폴더가 정말로 분리되어야 합니까? 한 이름을 다른 이름으로 심볼릭 링크하거나 디렉토리를 보조 위치에 바인드 마운트 할 수 없습니까? 또한 이러한 검색 결과를 살펴보세요 .
lanzz

1
cron을 통한 주기적인 방식 을 선호하는 실제 라이브 동기화 (즉, 소스 디렉토리의 파일 변경을 지속적으로 감시) 에 대해 조언 rsync합니다.
lanzz

답변:


103

inotifywait( modify,create,delete,move플래그가 활성화 된 상태에서) 및을 사용할 수 있습니다 rsync.

while inotifywait -r -e modify,create,delete,move /directory; do
    rsync -avz /directory /target
done

inotifywait시스템에 없는 경우 다음을 실행하십시오.sudo apt-get install inotify-tools


3
SSH를 원격 시스템에 액세스하기위한 전송 수단으로 사용하려는 경우 추가 -e ssh user@remote:/target하는 것을 고려할 수 있습니다 rsync.
Falcon

2
감사합니다 @Falcon, 나는 보통 rsync -avz --delete --exclude-from=.rsyncignore /directory user@server:path. 그러나 저는 간단한 답을 쓰고 싶었습니다.
silgon

5
명확히하기 위해 : 이것은 한 번 실행되는 것입니까, 아니면 이것을 bashrc 등에 추가 하시겠습니까?
Brad Johnson

1
전체 while 루프는 필요할 때 동기화하는 프로세스로 간주 할 수 있습니다. 일반적으로 작업중인 프로젝트의 Makefile에 추가합니다. 이런 식으로 저장하려는 서버와 디렉토리를 선택할 수 있습니다. 내 사용 사례 중 하나는 랩톱에서 딥 러닝 알고리즘을 프로그래밍하고이를 동기화하여 더 나은 CPU와 GPU를 갖춘 전용 컴퓨터에서 무거운 프로세스를 수행하는 것입니다. 또한 .git폴더 와 같이 필요하지 않은 파일은 제외 합니다.
silgon

2
이것은, 사용 파일 이름 변경을 처리하지 않습니다modify,create,delete,move
urusha

25

다음과 같은 것이 필요합니다. https://github.com/axkibe/lsyncd rsync와 inotify를 결합한 도구입니다. 전자는 올바른 옵션을 설정하여 마지막 비트에 대한 디렉터리를 미러링하는 도구입니다. 후자는 디렉토리 ot 파일의 변경 사항을 프로그램에 알리도록 커널에 지시합니다. 그것은 말한다 :

몇 초 동안 이벤트를 집계하고 결합한 다음 하나 이상의 프로세스를 생성하여 변경 사항을 동기화합니다.

그러나 - 디지털 오션에에 따라 https://www.digitalocean.com/community/tutorials/how-to-mirror-local-and-remote-directories-on-a-vps-with-lsyncd -이 마땅의 수 우분투 저장소!

비슷한 요구 사항이 있으며 아직 시도하지 않은이 도구가 작업에 적합한 것 같습니다.


1
lsyncd는 처음에는 은색 총알처럼 보였지만 공개 된 문제 가 많으며 macOS 구현은 "오래되고 구식"입니다. 10.12에서 작동하지 못했습니다.
유료 괴짜

@apaidnerd 공정하게 말하면 90 개의 문제가 열려 있고 420 개가 닫혀 있습니다. 하지만 작년에는 10/40 호만 마감되었습니다.
Mateen Ulhaq

8

@silgon 대답의 간단한 수정 :

while true; do 
  inotifywait -r -e modify,create,delete /directory
  rsync -avz /directory /target
done

(@silgon 버전을 cron에서 실행하면 Ubuntu 16에서 때때로 충돌)


2
왜 cron에서 실행합니까?
saygley

우분투는 동기화 프로세스를 재부팅 한 후 특정 작업에 대한 @saygley가 자동으로 실행되어야한다
데니스 쿠진을

5
.. 그럼에도 불구하고 이것은 일반적으로 한 번 시작되어야하고 서버가 가동되는 동안 실행되어야하기 때문에; 대신 rc.local 내에 인라인 된 것을 고려할 것입니다.
saygley

2

fschange 를 활용할 수 있습니다 . Linux 파일 시스템 변경 알림입니다. 소스 코드는 위 링크에서 다운로드 할 수 있으며 직접 컴파일 할 수 있습니다. fschangeproc 파일 (/ proc / fschange)에서 데이터를 읽어 파일 변경을 추적하는 데 사용할 수 있습니다. 데이터가 파일에 기록 될 때 fschange는 파일이 변경되었음을 알리는 대신 수정 된 정확한 간격을보고합니다. 고급 솔루션을 찾고 있다면 Resilio Connect를 확인하는 것이 좋습니다 . 크로스 플랫폼이며 사용 및 모니터링을위한 확장 된 옵션을 제공합니다. BitTorrent 기반이기 때문에 다른 기존 동기화 도구보다 빠릅니다. 그들은 그들을 대신하여 작성되었습니다.


0

이 무료 프로그램을 사용하여 로컬 파일과 디렉토리를 동기화합니다 : https://github.com/Fitus/Zaloha.sh . 저장소에는 간단한 데모도 포함되어 있습니다.

좋은 점 : bash 쉘 스크립트 (하나의 파일 만 해당)입니다. 다른 프로그램과 같은 블랙 박스가 아닙니다. 문서도 있습니다. 또한 일부 기술적 인 재능이 있으면이를 "구부리고" "통합"하여 원하는 최종 솔루션을 만들 수 있습니다.

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