최근에 볼륨의 일부 파일이 이상하게 잘린 것을 발견했습니다. 더 정확하게는 길이가 0인 파일로 대체되었습니다.
다행스럽게도 이러한 파일은 여러 위치에서 하드 링크되어 있으며 링크의 약 절반만이 겉보기에는 동일한 속성을 가진 길이가 0인 파일로 실제로 덮어쓰여집니다.
그런데 백업을 살펴보니 이전 백업 이전에 문제가 발생한 것을 발견했습니다. 해당 볼륨의 경우 파일을 삭제해서는 안 되며 대부분 그냥 추가되기 때문에 간단한 미러 백업으로 충분합니다. 하지만 파일이 실제로 삭제된 것이 아니기 때문에 단순히 rsync
삭제하지 말라고 할 수는 없습니다.
rsync
로컬 측에서는 길이가 0이지만 원격 측에서는 길이가 0이 아닌 파일을 동기화하지 않도록 지시하는 방법이 있습니까 ?
물론 길이가 0인 파일을 찾아 제외하는 몇 가지 코드를 작성할 수도 있지만 이는 시간이 더 많이 걸리는 단계이며(현재 파일 시스템을 두 번 전체 검색하는 중) 합법적으로 재동기화해야 하는 파일을 제외할 수도 있습니다. 예상 길이가 0인 파일이 있는 경우).
답변1
rsync
옵션이 있습니다 --min-size
:
--min-size=SIZE don't transfer any file smaller than SIZE
따라서 --min-size=1
빈 파일을 무시하는 것으로 충분합니다.
전송해야 하는 파일이 없는 경우(대상 측에 0바이트 크기의 파일이 없는 경우) 이 방법이 도움이 됩니다.
AFAIK에는 소스 및 대상 크기에 따라 특별한 조치를 취하도록 rsync에 지시할 방법이 없습니다.
답변2
--min-size=1
참고: 길이가 0인 파일로 파일을 덮어쓰지 않으려면 "크기가 0보다 작은 파일은 허용되지 않음"을 설정해야 합니다 . 매뉴얼 페이지가 잘못되어 "SIZE보다 작거나 같은 파일을 전송하지 마십시오"라고 명시되어 있지 않는 한