현명하게 움직임을 처리하는 Rsync


10

rsync 를 사용하여 랩톱과 넷북 사이에 홈 디렉토리를 동기화했습니다 (둘 다 Linux와 함께 ext4 사용). 내 유일한 문제는 매번 특정 디렉토리를 완전히 재구성하고 rsync 가이를 새 파일의 삭제 및 생성으로보고 매우 느리고 비효율적이라는 것입니다.

파일 이동을 잘 처리하는 훌륭한 소프트웨어를 아는 사람이 있습니까?

나는 한마음 으로 이것을 할 수 있어야하지만 실제로는 효과가없는 것 같습니다. 나는 각각 큰 파일을 가진 두 개의 로컬 디렉토리를 동기화하여 일제히 테스트 했으며, 여전히 내 이동을 삭제 + 생성으로 감지했으며 rsync 보다 느리게 작동했습니다 .

또한 몇 달 전에 unison 의 소스 코드를 살펴본 결과 정확하게 기억한다면 sha sum을 수행하는 것과 같은 일을 시도했지만 이상적인 솔루션이 sha sum을 수행하기를 원하지 않습니다. 파일 / 디렉토리. 나는 다음과 같은 것을 주목하는 것을 원합니다.

"이 파일의 마지막 소스 파일은 삭제 된 것으로 보이며 소스 디렉토리 트리에 mdate, size 및 inode 번호가 동일한 새 파일이있는 것 같습니다. 삭제 + 복사를 수행하는 대신 대상 상대방을 적절하게 이동하십시오. "

이러한 머신을 빠르게 동기화 할 수 있어야합니다.

어떤 제안?

답변:


6

rdiff-backuprsync아래에 있지만 필요한 추가 인텔리전스를 살펴보아야 합니다 (증분 백업은 롤백 할 수 있지만 끄도록 구성 할 수 있음).

최신 릴리스는 구식 (2009)이지만 안정성의 표시입니다.


2
아무도 그것을 시도?
mist

3

Unison은 원하는 것을 수행하지만 원격 동기화에만 사용합니다. ssh://localhost/path/to/dir뿌리 중 하나로 사용하십시오 .

Unison은 파일 내용을 기반으로 결정을 내리며 inode 번호를 추적하지 않습니다.


1

소스 및 대상 디렉토리의 파일 시스템이 하드 링크를 지원하는 경우 rsync를 사용하여 이동 및 이름이 바뀐 파일을 처리 할 수 ​​있습니다. 아이디어는 실제 전송 전에 rsync가 하드 링크를 재구성하도록하는 것입니다. 여기서 좋은 설명을 찾을 수 있습니다

우리는 소스 / 대상 디렉토리 내에 숨겨진 하드 링크 트리를 생성하는 간단한 솔루션으로 끝났습니다. 기본 스크립트는 다음과 같습니다.

# Name of hidden directory
Shadow=".rsync_shadow"

# do real sync
rsync -ahHv --stats --no-inc-recursive --delete --delete-after "$Source"/ "$Target"

# update/create hidden dir of hard links in source
rsync -a --delete --link-dest="$Source" --exclude="/$Shadow" "$Source"/ "$Source/$Shadow"

# update/create hidden dir of hard links in target
rsync -a --delete --link-dest="$Target" --exclude="/$Shadow" "$Target"/ "$Target/$Shadow"

GitHub에 예제 스크립트가 있습니다 . 그러나 프로덕션에서이 방법을 사용하기 전에 많은 양의 테스트를 수행하는 것이 좋습니다.


0

여러 컴퓨터간에 파일을 동기화하려면 Subversion (또는 SVN을 백엔드로 사용하는 FSVS)과 같은 중앙 집중식 버전 제어 시스템을 사용하는 것이 좋습니다. 좋은 점은 / home의 모든 내용 (버전 관리에 추가)이 버전이 지정되어 다른 컴퓨터와 쉽게 동기화되거나 롤백 될 수 있다는 것입니다.


0

lsyncd는 다소 버그가 있지만 rsync + ssh 동작으로 이동 된 파일을 처리합니다 (약 15 % 이동은 삭제 / 복사로 처리되지만 그 이유는 아직 알지 못합니다). 대부분의 경우 작동합니다.

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