Unison: 업데이트에는 항상 "copyprog"를 사용하세요.

Unison: 업데이트에는 항상 "copyprog"를 사용하세요.

여러 클라이언트 간에 파일을 동기화하기 위해 Unison을 사용하고 있습니다. 각 클라이언트는 동일합니다. 즉, 한 클라이언트가 파일을 업데이트할 때마다 다른 모든 클라이언트도 이를 업데이트해야 함을 의미합니다.

파일은 중앙 집중식 클라우드 서버에 저장됩니다. 각 클라이언트는 루트가 아닌 SSH를 통해 중앙 집중식 클라우드 서버에 액세스할 수 있습니다. 클라이언트 사이에는 링크가 없습니다.

파일의 소유권을 유지하는 것이 중요합니다. 이러한 이유로 저는 --rsync-path="rsync --fake-super"아래를 사용합니다. 이렇게 하면 확장된 파일 속성에 소유자/그룹이 저장되므로 후속 동기화 중에 클라이언트에서 소유권을 복원할 수 있습니다. 하지만 소유권을 유지하는 더 좋은 방법이 있다면 알려 주시기 바랍니다. 그렇게 하면 아래 문제가 해결될 수도 있습니다.

구성의 관련 조각은 다음과 같습니다.

copythreshold = 0
copyprog      = /usr/bin/rsync -avzX --rsync-path="rsync --fake-super" --inplace -e ssh
copyprogrest  = /usr/bin/rsync -avzX --rsync-path="rsync --fake-super" --inplace --partial -e ssh

나는 다음과 같은 행동을 관찰했습니다.

  1. 파일이 있을 때만들어진copyprog, 파일 전송을 위해 rsync에서 구성됩니다 .

    user.rsync.%stat이제 새로 생성된 파일에 클라우드 서버에 속성 집합(소유자/그룹 포함)이 있으므로 이는 매우 좋습니다 . 다른 클라이언트의 지속적인 동기화는 소유권을 유지합니다.

  2. 그러나 파일이고쳐 쓰다copyprog, 에서 구성된 rsync를 사용하지 않습니다. 나는 Unison이 사용자 정의 내장 전송 논리를 수행한다고 믿습니다.

    user.rsync.%stat이제 클라우드 서버에서 속성이 손실되므로 이는 좋지 않습니다 . 이제 다른 클라이언트의 지속적인 동기화는 소유권을 잃습니다.

copyprog업데이트에도 항상 사용되도록 Unison을 구성할 수 있나요 ? 문서에는 다음이 언급되어 있습니다.

copythreshold가 0으로 설정되면 Unison은 모든 작업에 외부 복사 유틸리티를 사용합니다.전체 파일옮기다.

아쉽게도 업데이트에 대한 언급은 없습니다.

답변1

나는 당신이 보고 있는 문제를 재현하고 매우 자세한 디버그 출력과 OCaml을 살펴보았습니다.copy.ml코드(언어에 익숙하지 않음)를 사용했지만 해당 copyprog설정에서 작동하지 않는 명확한 이유를 찾을 수 없습니다.

하지만,이것2017년 2월 질문에 따르면 copyprog는 새 파일에서만 작동합니다.( copyprogrest중단을 계속하는 데 사용됨 copyprog). 이 문제를 해결하면 문제도 해결될 수 있습니다. 이제 향상된 것으로 표시됩니다. 거기에 새로운 질문을 게시하여 사용 사례를 제공할 수도 있습니다.

관련 정보