`rsync`는 모든 입력/출력 오류 매핑을 제거합니다.

`rsync`는 모든 입력/출력 오류 매핑을 제거합니다.

rsync두 서버 간에 명령을 실행하려면 다음을 사용합니다.

rsync -auv -P  --delete --delete-excluded  --stats --progress -e "ssh -i ~/.ssh/$ssh_pkey -p $port -l $user" $server_ip:$src/ $dest/

어떤 단계에서 원본 서버의 HDD에 오류가 발생하고 해당 마운트 지점에 액세스할 수 없게 되었습니다. rsync명령 중에 이런 일이 일어났습니다 . 안타깝게도 대상 폴더의 모든 파일이 명령 --ignore-errors옵션 없이 삭제되었습니다 rsync.

로그는 다음과 같습니다.

rsync: read errors mapping "/data/TEST1/file.tmp": Input/output error (5)
rsync: send_files failed to open "/data/TEST1/file.tmp": Input/output error (5)
.............
rsync: opendir "/data/TEST1/Stranger Things" failed: Input/output error (5)
rsync: send_files failed to open "/data/TEST1/file2.tmp": Input/output error (5)
  3,511,822,850 100%    1.84MB/s    0:30:18 (xfr#36, ir-chk=1013/7161)
WARNING: TEST1/file.tmp failed verification -- update discarded (will try again).
deleting TEST1/file3.tmp
deleting  ...
deleting ...
deleting ...
....

I/O 오류를 확인한 후 rsync 명령은 나머지 파일을 모두 삭제합니다!

이것은 매우 위험한 상황입니다. HDD를 다시 마운트하고 rsync를 다시 시작하면 되기 때문에 지금까지는 손상이 발생하지 않았지만(며칠 정도 소요됨) 다음 번에는 운이 좋지 않을 수도 있습니다.

정확히 무엇이 잘못되었나요? 이런 일이 발생하는 것을 방지하는 방법은 무엇입니까?

답변1

이는 매개변수의 예상되는 동작입니다 --delete. --delete-after불필요한 파일을 삭제하기 전에 전송이 완료될 때까지 기다릴 수 있습니다 .

man rsync

...
     --del                    an alias for --delete-during
           --delete                 delete extraneous files from dest dirs
           --delete-before          receiver deletes before xfer, not during
           --delete-during          receiver deletes during the transfer
           --delete-delay           find deletions during, delete after
           --delete-after           receiver deletes after transfer, not during
           --delete-excluded        also delete excluded files from dest dirs
           --ignore-missing-args    ignore missing source args without error
           --delete-missing-args    delete missing source args from destination
           --ignore-errors          delete even if there are I/O errors
...

관련 정보