`rsync`はすべての入力/出力エラーマッピングを削除します。

`rsync`はすべての入力/出力エラーマッピングを削除します。

rsync2 つのサーバー間でコマンドを実行するには、次のようにします。

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
...

関連情報