동일한 소스를 동일한 대상으로 병렬로 재동기화하는 것이 안전합니까?

동일한 소스를 동일한 대상으로 병렬로 재동기화하는 것이 안전합니까?

내 응용 프로그램은 rsync를 사용하여 네트워크 드라이버에서 로컬로 파일을 캐시로 복사하여 성능을 향상시킵니다.

하지만 내 응용 프로그램은 rsync와 같이 병렬로 실행될 수 있으므로 2개의 인스턴스가재동기화동일한 소스 및 디렉터리에 대해 병렬로 실행됩니다.

대상이 완전히 동기화되지 않는 문제에 직면했습니다(하위 디렉터리 하나를 비워 둡니다). 그래서 나는 그것이 rsync의 문제인지 의심스럽습니다.

  • rsync는 동일한 소스의 파일을 동일한 대상으로 병렬로 복사하는 것이 안전합니까?
  • 그러한 작업의 정확성을 보장하는 데 사용할 수 있는 옵션이 있습니까?

내가 사용하는 옵션은 다음과 같습니다.

rsync -a --copy-unsafe-links --delete

답변1

rsync를 병렬로 실행하는 것이 안전할 수 있지만 효율적이지는 않습니다. rsync가 처음에 전송할 파일 목록을 구성하기 때문에 파일이 두 번 전송될 가능성이 높기 때문입니다. 물론 동일한 파일이 두 rsync에 의해 동시에 전송될 가능성은 항상 희박하지만 나중에 내용은 동일해야 합니다.

이중 실행을 방지하기 위해 일반적으로 잠금 파일을 확인하는 스크립트를 작성하고 그렇지 않으면 touch마지막에 제거됩니다. 옵션으로 스크립트를 중단하거나 오류가 발생한 경우 스크립트에서 트랩을 사용하여 잠금 파일을 정리할 수 있습니다(셸 내에서 'help Trap' 사용). 내가 아는 한, rsync 자체에는 그러한 잠금 메커니즘이 없습니다(어쨌든 구현하기 어려울 것입니다).

관련 정보