rsync --delete는 삭제된 모든 파일을 삭제하지 않습니다.

rsync --delete는 삭제된 모든 파일을 삭제하지 않습니다.

저는 rsync를 사용하여 여러 시스템을 외장 하드 드라이브나 네트워크를 통해 다른 시스템에 백업합니다. 아이디어는 /dev, /proc, /mnt와 같은 일부 내용을 포함하고 제외되지 않은 원래 파일 시스템의 복사본을 유지한 다음 대상에서 스냅샷을 찍는 것입니다(예: btrfs 또는 zfs 사용). 이를 위해 다음 명령을 사용합니다.

rsync -avP --delete --exclude /dev/* --exclude /proc/* --exclude /mnt/* etc. etc. / backup@fileserver:/mnt/array/backup/machine/

효과는 꽤 좋습니다. 그러나 방금 rsync가 대상의 콘텐츠를 안정적으로 삭제하지 않는다는 것을 알았습니다. 그 결과, 언제든지 소스에 존재하는 것보다 대상에 더 많은 파일이 있었고, 어떤 경우에는 백업이 소스보다 100GB 더 컸습니다. 나머지 파일은 대부분 다양한 소프트웨어 및 라이브러리의 이전 버전인 것 같습니다. 예를 들어 원래 시스템에서 /usr/include/qt/QtWidgets/에는 다음이 포함됩니다.

5.9.2
QAbstractButton
qabstractbutton.h
....

그러나 백업 대상의 동일한 폴더에는 다음이 포함됩니다.

5.6.0
5.6.1
5.7.0
5.7.1
5.8.0
5.9.0
5.9.1
5.9.2
QAbstractButton
qabstractbutton.h

rsync는 새 파일을 잘 복사하는 것 같지만 이전 파일을 모두 삭제하는 것을 잊어버렸습니다. 이상하게도 일부 파일은 삭제되지만(rsync는 항상 동기화 시 삭제된 파일이 많이 보고됨) 많은 파일이 삭제되지 않는 것 같습니다. 결과적으로 내 백업은 필요한 것보다 훨씬 더 많은 공간을 차지하고 모든 추가 파일로 인해 원래 파티션보다 더 많은 공간을 차지하므로 직접 복원할 수 없으며 플랫 파일 패키지 데이터베이스와 같은 것들이 있습니다. 문제가 있으며 이전 버전의 패키지에 대한 중복 항목이 많이 포함되어 있습니다.

여기서 무슨 일이 일어나고 있는지에 대한 아이디어가 있습니까? rsync가 실제로 삭제해야 하는 모든 항목을 삭제하려면 다른 플래그를 rsync에 전달해야 합니까?

답변1

시도해 볼 사항에 대한 몇 가지 제안 사항은 매뉴얼 페이지(정보 섹션 --delete)에서 제공됩니다. 많은 경고와 주의 사항이 있습니다. 이 모든 것을 고려해 보셨나요?

  • "동기화되는 디렉터리"에만 적용됩니다. 나는 이것이 그들이 부모/조상 디렉토리를 복사해야 한다는 것을 의미한다고 생각합니다.

  • 마찬가지로 명시적으로 제외된 항목에는 적용되지 않습니다.

--delete-excluded 전송에서 제외된 파일도 이 옵션을 사용하거나 전송 측에서만 일치하도록 규칙을 표시하지 않는 한 제거되지 않습니다.

  • 발신자가 I/O 오류를 감지하면 대상에 있는 모든 파일의 삭제가 자동으로 금지됩니다. 로 덮으세요 --ignore-errors.

  • 먼저 시도해 보세요 --dry-run. --verbose문제 디렉토리에서 발생하는 모든 것을 결합 하고 다시 확인하십시오.

    이 옵션은 잘못 사용하면 위험할 수 있습니다! --dry-run 옵션(-n)을 사용하여 먼저 실행을 시도하여 삭제하려는 파일을 확인하는 것은 매우 좋은 생각입니다.

따라서 시도를 고려하십시오 --delete-excluded. --ignore-errors및/또는 --dry-run... --verbose반드시 "수정"은 아니지만 적어도 잠재적으로 유용한 데이터를 수집해 보세요.

그리고 --delete-before깃발도 보세요. 실제 전송 전에 수신자 삭제를 수행해야 합니다. 다시 말하지만, 이것이 모든 문제를 해결하지는 못할 수도 있지만 어느 정도 밝혀질 수는 있습니다. 디스크 공간 사용량을 줄이는 데에도 도움이 되는지 알아보는 것도 흥미로울 것입니다.

관련 정보