rsync를 사용할 때 일부 파일 손상(즉, 파일 내용이 소스 파일과 일치하지 않음)이 발생합니다. 동기화 중에 썼다면 파일이 손상될 수 있다는 점은 이해하지만, 쓰여지고 있는 것 같지는 않습니다. 부패가 발생할 수 있는 다른 상황이 있습니까?
1. 파일이 동시에 여러 rsync 프로세스에 의해 동기화되고 있습니다.
이는 불필요하고 잠재적으로 위험한 일처럼 보입니다. 그러나 우리는 이것이 필요하다고 가정합니다. 두 개의 rsync 프로세스가 소스를 두 개의 별도 임시 파일에 동기화하기를 원합니다. 완료될 때마다 원자성 이름 바꾸기를 수행하여 대상 파일을 임시 파일로 바꿉니다. 이것이 어떻게 부패로 이어질 수 있는지 이해가 되지 않습니다. 최악의 시나리오에서는 이전 rsync가 마지막으로 완료되어 대상 파일이 잠재적으로 이전 버전의 파일과 동기화되는 것을 볼 수 있습니다.
2. 동기화 중에 소스 파일이 이동되거나 이름이 변경됩니다.
즉, 다른 파일의 이름이 현재 동기화된 파일과 동일한 이름으로 변경됩니다. 소스 측의 rsync 프로세스가 소스 파일을 한 번만 연다고 가정하면 이것이 어떻게 손상을 일으킬 수 있는지 알 수 없습니다. 소스를 대체하기 위해 파일 이름을 바꾸면 rsync로 이미 열린 파일은 변경되지 않습니다. 수정되지 않은 원본 소스에서 계속 실행되어야 합니다(프로세스가 작성되지 않는다고 가정).
rsync가 작동하는 방식에 대해 잘못된 가정을 했을 수도 있습니다. 오류가 있으면 언제든지 수정해 주시기 바랍니다.
답변1
여기서 문제가 정확히 무엇입니까?
rsync
의미 있는 도움을 받으려면 통화 패턴에 대한 세부 정보를 추가해야 합니다 . 나는 rsync
수년 동안 문제없이 사용하고 있습니다. 겉으로 보이는 손상은 모두 이 멀티툴의 부적절한 사용으로 인한 것이라고 봐도 무방할 것 같습니다. 통과하지 못한 경우에는 -c
수정 rsync
시간과 크기를 기준으로 건너뛰게 됩니다. 를 통과하더라도 -c
역시 통과하고 파일이 수신자에서 최신 버전인 경우에는 rsync
업데이트되지 않습니다. 전달 -u
되면 대상 파일이 그 자리에서 업데이트됩니다. 나는 단지 다음과 같은 예가 있음을 보여주기 위해 이러한 예를 제시할 뿐입니다.--inplace
rsync
많은옵션을 rsync
호출하는 방법에 대한 세부 정보를 추가해야 합니다 rsync
.
동기화 중에 썼다면 파일이 손상될 수 있다는 점은 이해하지만, 쓰여지고 있는 것 같지는 않습니다.
추측하는 대신 inotify
파일이 언제든지 하나의 프로세스에 의해서만 업데이트되었는지 확인하기 위해 실행(예: 파일이 포함된 디렉터리에서)해 보는 것은 어떨까요?