IO error encountered — skipping file deletionの対処法

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の削除処理が走らない場合の対処法でした。

ご質問がある場合は,コメント欄にお寄せください。

コメント