두 디렉토리를 동기화하는 소프트웨어 (로컬 / 원격)


답변:


12

rsync 는 확실히이 작업에 적합한 도구입니다. 디렉토리를 동기화 상태로 유지하기 위해 존재하며 상당히 스마트하게 수행 할 수 있습니다. 예를 들어, 가능할 때마다 델타 만 전송하며 ssh 터널을 통해 작동 할 수 있습니다.

디렉토리 트리의 라이브 버전을 호스팅하는 머신 소스/my/tree 와 머신 싱크 와 밀접하게 동기화하려는 머신 싱크가 있다고 가정합니다. 싱크대에 ssh 계정이 있다면 소스 에서 rsync를 다음과 같이 사용할 수 있습니다.

rsync -avz --delete -e ssh /my/tree/ remoteuser@sink:/my/tree

이것은 소스/my/tree 에있는 싱크대 와 정확히 같은 지점에 있다고 가정합니다 . 물론 정확히 같은 지점에 보관할 필요는 없습니다.

명령 행 분석 :

  • -avz: 보관 모드, 자세한 정보 표시, 전송 중 압축 사용
  • --delete: 소스에 없는 동기화 파일을 삭제합니다
  • -e ssh: 연결 방법으로 ssh를 사용하십시오.

물론이 전화는 암호를 만들 때 묻습니다. 자동화 된 방식으로이 작업을 수행하려면 컴퓨터의 계정간에 일부 키를 공유하고 공개-개인 키 암호화를 사용하여 ssh 연결을 만들어야합니다.

이 rysnc에 대한 키 페어를 설정하려면 소스 시스템 에서 다음 명령을 실행하십시오 .

> ssh-keygen -t rsa -b 2048 -f ~/.ssh/my-rsync-key 
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): [press enter here] 
Enter same passphrase again: [press enter here] 
Your identification has been saved in ~/.ssh/my-rsync-key. 
Your public key has been saved in ~/.ssh/my-rsync-key.pub. 
The key fingerprint is: 
2e:28:d9:ec:85:21:e7:ff:73:df:2e:07:78:f0:d0:a0 root@source

> chmod 600 ~/.ssh/my-rsync-key

이 키 쌍이 작동 하려면 싱크 시스템 ~/.ssh/my-rsync-key.pub~<remoteuser>/.ssh/authorized_keys파일에 내용을 추가해야 합니다.

먼저 파일을 싱크 머신으로 복사하십시오 .

scp ~/.ssh/my-rsync-key.pub remoteuser@sink:~

그런 다음 싱크 머신으로 ssh하고 머신에서 원격 사용자로 다음을 실행하여 키를 가져옵니다 .

> if [ ! -d ~/.ssh ]; then mkdir ~/.ssh ; chmod 700 ~/.ssh ; fi
cd ~/.ssh/ 
if [ ! -f authorized_keys ]; then touch authorized_keys ; chmod 600 authorized_keys ; fi 
cat ~/my-rsync-key.pub >> authorized_keys
rm ~/my-rsync-key.pub

소스싱크 머신 사이의 ssh 연결을 잠그는 방법에 대한 추가 정보 는 이 페이지를 참조하십시오 .

당신의에서 소스 시스템이 설치를 실행하여 작동하는지 테스트 할 수 있습니다 :

rsync -avz --dry-run -e "ssh -i ~/.ssh/my-rsync-key" /my/tree/ remoteuser@sink:/my/tree

그것은 rsync의 건식 실행을 할 것입니다. 파일을 연결하고 비교하는 rsync 명령이 표시되면 설정이 올바르게 된 것입니다.

이제이 사이트의 유용한 답변에 표시된 것처럼 LaunchD 구성 파일에서이 rsync 명령을 쉽게 호출 할 수있는 방법이 필요합니다 . 이 호출이 타이트한 루프에서 발생하기를 원하기 때문에 동시에 여러 개의 rsync 사본이 실행되고 있지 않은지 확인해야합니다. flock을 사용하여 bash 스크립트가 싱글 톤임을 보장 하는 뮤텍스를 작성할 수 있습니다 . 머신에서 한 번에 하나의 인스턴스 만 실행됩니다. 디스크에 다음 스크립트를 만들겠습니다.

#!/bin/sh
SINK_INSTANCE=remoteuser@sink
DIR=/my/tree
KEY=~/.ssh/my-rsync-key
LOG = ~/my_rsync.log
LOCK = ~/my_rsync.lock
SOURCE=/my/tree

exec 9>${LOCK}
if ! flock -n 9  ; then
    echo "Another instance of your rsync is already running";
    exit 1
fi

echo "----------" >> ${LOG}
echo `date` >> ${LOG}

rsync -avz --delete -e "ssh -i ${KEY}" \
    ${SOURCE}/ {SINK_INSTANCE}:${SOURCE} 2>&1 >> ${LOG}

로 저장하십시오 ~/my_rsync.sh.

이 스크립트는 rsync를 처리합니다. LaunchD를 통해 설정하고 타이트한 루프로 실행하면됩니다. 여기 에서 지시를 따르고 필요에 맞게 수정 ~/Library/LaunchAgents/my-rsync.plist한 후 텍스트 편집기에서 작성하고 내용을 작성합니다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
 "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>My Rsync</string>
    <key>Program</key>
    <string>/bin/sh</string>
    <key>ProgramArguments</key>
    <array>
        <string>sh</string>
        <string>-c</string>
        <string>while sleep 5s; /Users/my/my_rsync.sh; done</string>
    </array>
    <key>ServiceDescription</key>
    <string>Keep /my/tree synchronized with the machine sink</string>
    <key>KeepAlive</key>
    <true/>
</dict>
</plist>

그것은 일을 처리해야합니다.

일반적인주의 사항이 적용됩니다. 메모리에서 이것을 작성하고 테스트하지 않았습니다. 따라서 맹목적으로 따라 가지 마십시오. 길을 따라 신중하게 테스트하십시오. 의심 --dry-run스러운 경우 rsync 옵션을 사용하십시오 . 그것은 무엇을 인쇄 할 수 있습니다 것입니다 실제로 아무것도하지 않고 했어요.


2

rsync5 초마다 실행하는 대신 lsyncd 데몬을 사용하여 디렉토리 트리를 감시 할 수 있습니다.

OS X에서 작동 /dev/fsevents하지만 플러그인 준비 .deb파일 이 없습니다 . 컴파일하고 설치하는 것은 약간 괴짜입니다. 버전 2.0.6 (곧)을 출시 할 때까지 lsyncd 2.0.5에 알려진 OS X 버그가 있으므로 GIT 헤드를 사용하는 것이 좋습니다.


방금 OSX 고정 버전을 출시했습니다. 아무 일도 일어나지 않았지만 5 초마다 무언가를 실행하여 자원을 낭비해야하는 것과는 달리 Lsyncd는 무언가 발생했을 때만 rsync를 호출합니다.
axkibe

1

rsync 는이를위한 훌륭한 도구이며 Mac OS에 내장되어 있습니다. 두 위치의 차이점을 확인한 다음 네트워크 전체의 델타 변경 사항 만 복사합니다. 여분의 플래그가없는 rsync는 거의 정확하게 원하는 것을 수행합니다.

유일한 변경 사항은 변경 사항을 확인하기 위해 5 초마다 실행해야한다는 것입니다. 이미이 사이트에있는 훌륭한 예제와 함께 launchd를 사용하여이를 수행 할 수 있습니다 . 이 예에서는 스크립트가 계속 실행 된 다음 5 초 동안 휴면 한 다음 다시 실행되는 것처럼 보입니다.

이렇게 자주 실행하는 문제는 도구가 차이점을 확인해야한다는 것입니다. 5 초 동안 너무 많은 변경 사항이있는 경우 해당 변경 사항을 기록하고 전송하는 오버 헤드가 5 초 이상 걸릴 수 있습니다.



0

FolderSync (8.99 App store)를 사용하고 있으며 정말 좋아합니다. 두 개의 창에서 브라우징이 동기화 된 멋진 UI. 나중에 다시 사용할 수 있도록 동기화 작업을 저장할 수 있습니다.

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