rsync
2 つのサーバー間でコマンドを実行するには、次のようにします。
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
...