rsync - 심볼릭 링크를 사용하여 업데이트

rsync - 심볼릭 링크를 사용하여 업데이트

이는 다음과 관련이 있습니다.이 문제하지만 내 생각에는 그 대답이 여기에는 적용되지 않는 것 같다.

디렉터리를 서로 동기화하는 두 개의 서버가 있습니다. 이러한 디렉토리에는 파일과 기호 링크가 포함되어 있습니다. 서버에서두번째, 서버에서 동기화합니다다음 명령을 사용하십시오.rsync -auv A:dir/ dir/

내가 원하는 건: 모든 파일 또는 심볼릭 링크해당 파일이나 심볼릭 링크와 다르며 최신 버전입니다.두번째동기화되었습니다.

실제로 무슨 일이 일어났는가: 모든 파일이 파일은 다음의 해당 파일과 다르며 최신 버전입니다.두번째동기화되었습니다. 임의의 심볼릭 링크이는 해당 심볼릭 링크와 다릅니다.두번째이미 동기화되어 있습니다.타임스탬프와 관련 없음.

매뉴얼 페이지에는 rsync다음이 있습니다(강조됨).

-u, --업데이트

이렇게 하면 rsync가 대상에 존재하고 소스 파일보다 수정 시간이 최신인 모든 파일을 건너뛰게 됩니다. (기존 대상 파일의 수정 시간이 원본 파일과 동일한 경우 크기가 다르면 파일이 업데이트됩니다.)이는 기호 링크나 기타 특수 파일 복사에는 영향을 미치지 않습니다.

따라서 이는 예상된 동작입니다. 왜 이런거야? 해결 방법이 있나요? 또는 서버가 잠시 오프라인 상태가 되어 데이터가 손실된 후 이러한 디렉터리를 동기화 상태로 유지하려는 전반적인 목표를 달성할 수 있는 대체 솔루션이 있습니까?

내 rsync 버전은 3.0.9.

: 저는 2개의 디렉터리를 설정했고 AdirBdir디렉터리에는 서로 다른 내용의 파일과 심볼릭 링크가 포함되어 있습니다.

$ ls -l Adir/ Bdir/
Adir/:
total 0
-rw-r--r-- 1 kevin kevin  5 May 27 18:00 file
lrwxrwxrwx 1 kevin kevin 10 May 27 18:00 symlink -> /some/file

Bdir/:
total 0
-rw-r--r-- 1 kevin kevin  6 May 27 17:00 file
lrwxrwxrwx 1 kevin kevin 16 May 27 17:00 symlink -> /some/other/file

실행 rsync --dry-run -auv Adir/ Bdir/출력은 다음과 같습니다.

sending incremental file list
./
file
symlink -> /some/file

sent 101 bytes  received 21 bytes  244.00 bytes/sec
total size is 15  speedup is 0.12 (DRY RUN)

이것이 바로 제가 기대했던 것입니다. 파일과 심볼릭 링크를 최신 상태로 복사합니다(또는 연습 실행이 아닌 경우). 그러나 실행 rsync --dry-run -auv Bdir/ Adir/결과는 다음과 같습니다.

sending incremental file list
./
symlink -> /some/other/file

sent 104 bytes  received 18 bytes  244.00 bytes/sec
total size is 22  speedup is 0.18 (DRY RUN)

Bdir/symlink그보다 오래된 경우에도 Adir/symlink여전히 동기화됩니다.

답변1

한 가지 해결 방법은 rsync의 심볼릭 링크를 무시하고 별도로 실행하는 것입니다. 예를 들어 tar최신 대상을 덮어쓰지 않도록 요청하는 것입니다. 예를 들어

( cd Adir; find . -type l |
  tar cf - -T- 
) |
tar xvvf - --keep-newer-files -C Bdir

관련 정보