파일 시간 때문에 rsync의 --link-dest 옵션이 링크되지 않습니다.

파일 시간 때문에 rsync의 --link-dest 옵션이 링크되지 않습니다.

다음 테스트 사례를 고려해보세요.

mkdir a
echo 'blah' > a/test
mkdir b
echo 'blah' > b/test

rsync -r --link-dest=/tmp/b /tmp/a/ /tmp/c

예상대로 rsync는 c/test다음의 하드링크를 생성합니다 b/test(참조 횟수 참고 2).

# ls -l c/test
-rw-r--r-- 2 root root 16 Jan  6 19:43 test

이제 이것을 보십시오:

rm -r c # start over
touch b/test
rsync -r --link-dest=/tmp/b /tmp/a/ /tmp/c

하드링크가 생성되지 않습니다.

# ls -l c/test
-rw-r--r-- 1 root root 16 Jan  6 19:50 test

그만큼맨페이지말한다(내 강조):

파일은 모두 동일해야 합니다.보존된파일이 서로 연결되도록 하기 위한 속성(예: 권한, 소유권).

그러나 기본적으로 파일 시간은 그렇지 않다고 생각합니다.보존된따라서 여기서는 아무런 차이가 없어야 합니다.

무슨 일이 일어나고 있나요? 이것은 버그인가요? 어떡해?

내 목표는 모든 동일한 파일을 하드 링크하여 저장소의 여러 분기를 호스팅하는 연속 통합 서버에서 공간을 절약하는 것입니다. 그래서 내 실제 명령은 다음과 같습니다
rsync -r --link-dest=/ci/master /ci-runner/build/ /ci/branch-123.
즉, 시간에 신경 쓰지 않는다는 의미이므로 touch모두 현재 시간 이전으로 생각했지만 rsync다소 조잡한 솔루션이 될 것이며 터치도 재귀적으로 작동하지 않는 것 같습니다.

답변1

크기와 타임스탬프를 기준으로 파일 전송을 결정하는 rsync의 "빠른 확인" 알고리즘의 결과가 표시됩니다. 다음에 자세히 설명되어 있습니다 man rsync.

Rsync는 크기나 마지막 수정 시간이 변경된 파일을 찾는 "빠른 확인" 알고리즘(기본값)을 사용하여 전송해야 하는 파일을 찾습니다. 다른 보존된 속성(옵션에서 요청한 대로)의 모든 변경 사항은 빠른 검사에서 파일의 데이터를 업데이트할 필요가 없음을 나타내는 경우 대상 파일에 직접 적용됩니다.

당신은 선택할 수 있습니다:

  • 타임스탬프를 무시하고 변경된 크기만을 기준으로 파일을 전송하려면 이 --size-only옵션을 사용할 수 있습니다.

    rsync이는 파일 크기가 동일하게 유지되도록 변경된 경우 변경된 파일을 전송하지 않음 을 의미합니다 .

  • rsync파일 내용이 실제로 동일한지 확인 하려면 --checksum. 이로 인해 상당한 속도 저하가 발생할 수 있습니다.

"빠른 확인" 알고리즘은 일반적으로 속도와 정확성 사이에서 적절한 절충안을 제공하므로 기본값입니다.

관련 정보