【rsyncエラー(code 24)が出た】
はじめに
ある日、移設元サーバと移設先サーバの同期のためにrsync
をした。
以下のようなrsync
スクリプトを実行し、Slackへ通知するようにしていた。
#!/bin/bash
set -eu
--- snip ---
set +e
<rsynスクリプト>
RSYNC_STATUS=$?
if [[ "${RSYNC_STATUS}" = 0 ]]; then
MESSAGE="message=$(hostname): rsyncが成功しました ($RSYNC_STATUS)";
else
MESSAGE="message=$(hostname): rsyncが失敗しました ($RSYNC_STATUS)";
fi
curl <Slackへメッセージ>
もちろん、正常終了の0
を期待していたのだが24
が返ってきた...
rsync
と(code 24)
がよくわかっていなかったので調べた時のメモ。
ざっくりrsync
- ファイル複製・転送を始める前に処理対象(
ファイル名
、タイムスタンプ
,ファイルサイズ
)のファイルリストを作成する - コピー先でrsyncを実行し、コピー元からのファイルリストを分類する
- 同一ファイル
- 存在しないファイル
- 差分があるファイル
- コピー元からコピー先へファイル転送
- 同一ファイルはスキップ
- 存在しないファイルは丸ごとコピー
- 差分があるファイルは差異だけをコピー
- (ファイルリスト作成後にアプリケーションプログラムの一時ファイル等が消失するケースがよくある)
rsyncエラー(code 24)
まず、rsyncコマンドの実行中にエラーが発生することはよくある(?)そうです。
(コピー元をサーバを停止させるとよいと書かれていたが、それはできないサーバでした)
エラー コード 24 は主に、ソース ファイルが消失したために部分的な転送が行われた場合に発生します。
ref. https://bobcares.com/blog/rsync-error-24/
今回のエラーは、以下が考えられることがわかった。
- ファイルリスト作成時に存在していたものが、転送前に削除された
- ファイル名の読み取りエラー
1つ目について、以下のようなことがあるとわかった。
ライブ バックアップ中にファイルが消失するのは、まったく正常なことです。たとえば、多くのアプリケーションは有効期間の短い一時ファイルを作成します。そして、それらは後で削除されます。これは特に、メール サーバーの場合に発生します。メール サーバーでは、電子メール メッセージを含むファイルが常に 1 つのディレクトリから別のディレクトリに移動されます。
ref. https://bobcares.com/blog/rsync-error-24/
結論、よくあることでエラーが出る時と出ない時があるが、深刻には受け止める必要はないらしい...
が、自分は気になったので再実行し、再度失敗したらエラーログを確認して調べることにした。
すると、正常終了した。
rsync
は何度か実行すると、ファイルリストを作成のやり直してくれるだろうか。。
rsync
の仕組みを調べるきっかけになったのはよかった。
はぎれがわるいが、おわり。
参考