rsync의 심볼릭 링크가 이상하게 동작합니다.

rsync의 심볼릭 링크가 이상하게 동작합니다.

오늘밤 일부 rsync 백업이 예상대로 작동하지 않는 것을 발견했습니다. 자세한 내용은 옵션과 함께 rsync 버전 3.1.2를 사용합니다 -rulv.

간단히 말해서, 우리 서버의 하드 드라이브 중 하나에는 파일로 가득 찬 디렉토리가 있습니다. 그 중 일부는 가끔 다른 위치(실제로는 SSD 캐시)에 심볼릭 링크된 다음 나중에 다시 심볼릭 링크됩니다. 일반 파일로 복원 . (FWIW, 캐시를 가리키기 위해 절대 심볼릭 링크를 사용합니다. 원격 백업 상자에서 샘플을 검색하고 절대 심볼릭 링크가 보존되는지 확인했습니다.)

이제 데이터의 원격 복사본에 로컬 서버에 일반 파일로 복원된 심볼릭 링크가 포함되어 있다는 것을 깨달았습니다. 이는 일반 rsync 프로세스가 원격 심볼릭 링크를 일반 파일로 덮어쓰지 않음을 의미합니다. 또한 어느 시점에서 원격 일반 파일을 심볼릭 링크로 덮어썼음이 분명하므로 프로세스를 되돌리지 않으려는 것이 이상합니다.

rsync 매뉴얼 페이지를 읽었지만 (a) 이 동작을 이해하거나 (b) 이 상황에서 "올바른" 작업을 수행할 수 있는 옵션 조합이 있는지 판단할 수 없습니다. "올바른" 것은 로컬 측에 심볼릭 링크가 있을 때 [성공적으로 발생] 원격 일반 파일을 덮어쓰고 로컬 측이 [아직 발생하지 않음] 일반 파일로 되돌릴 때 원격 심볼릭 링크를 덮어쓰는 것을 의미합니다...

안내해주셔서 정말 감사드립니다!

답변1

미래에 이 장애물에 직면하는 모든 사람의 이익을 위해...

좋아, 위 @meuh의 의견 덕분에 이 옵션이 기본적으로 문제라는 것을 확인할 수 있었습니다 -u(게다가 신중하게 생각하지도 않았습니다!).

심볼릭 링크를 일반 파일로 복원할 때는 복사가 필요하지 않으며 대신 mv심볼릭 링크를 덮어쓰면서 원래 일반 파일을 원래 이름으로 복원합니다. 이는 inode의 mtime이 아닌 ctime만 업데이트하고, rsync가 -u싱크에서 파일이 최신인지 여부를 결정할 때 분명히(그리고 부당하지 않게) mtime을 확인하기 때문에 이전 로컬 일반 파일을 최신 파일과 비교합니다. 원격 심볼릭 링크를 확인하고 이를 무시하기로 올바르게 결정했습니다.

관련 정보