LinuxやMacを使っている場合,rsyncを使って,定期バックアップをしておられる方も少なくないでしょう。
しかし,コピー先のドライブ使用量だけが増大してしまい,最終的にはディスクが一杯になって,バックアップジョブが失敗してしまうことがあります。
コピー元のドライブで削除されたファイルが,コピー先のドライブでは削除されないことにより,徐々に肥大化していってしまう訳です。
それで,エラーログを見てみると,以下のようなエラーが出ていることがあります。
IO error encountered -- skipping file deletion
これは,コピー元で何らかのI/Oエラーが発生した際に,削除処理を中断させてしまう仕様になっています。
例えば,このI/Oエラーが,特定のファイルに対する権限不足で発生している場合,I/Oエラーが消えることはなく,永遠に削除処理が走らないことになってしまいます。
しかし,バックアップ用途でrsyncをまわしている場合,このエラーを無視して,ファイルの削除処理を継続してくれた方が望ましいと思います。
そのようなときに有効なオプションが,–ignore-errorsというオプションです。
この–ignore-errorsオプションは,I/Oエラーが出た場合でも,削除を続行させるための,ドンピシャなオプションです。
例えば,コピー先マシンでrsyncを走らせる場合には,次のような感じの構文になります。
rsync -avu --delete --ignore-errors User@computername.com:"/Volumes/Src-Drive/Folder/" /Volumes/Dest-Drive/Folder/
a ファイルのパーミッションもすべてコピーする v 転送情報を出力する u 差分ファイルだけ転送する --delete 送信元で削除されたファイルは,送信先でも削除する --ignore-errors I/Oエラーが出た場合でも,削除を続行する
ちなみに,rsyncコマンドを走らせる場合,コピー先のマシンとコピー元のマシン,どちらでジョブをまわすかによって,各マシンにかかる負荷は変わります。
通常,rsyncコマンドを走らせているマシンの方では,2つのプロセスが立ち上がり,相手側のマシンでは,1つのプロセスが走ることになりますので,本番環境でスクリプトを走らせるよりも,できればバックアップ側のマシンで走らせるほうが,理論上望ましいといえます。
以上,IO error encountered — skipping file deletionが出てしまって,rsyncの削除処理が走らない場合の対処法でした。
ご質問がある場合は,コメント欄にお寄せください。
コメント