テクノロジー · 実用ガイド

rsyncがコード23で終了? 権限変更前に失敗した対象を特定する

コード23は少なくとも一つの転送エラーを示すだけです。先行エラーを対象、側、操作、実効ユーザーに結び付け、予定した集合の到着を証明します。

オリジナル概念図:rsyncコード23の背後にあるsender、transport、receiver/generator操作を分ける。
オリジナル概念図:修復前に先行operationを分類する。 Watch at Ease

最後のコード23行は要約です。権限、除外、rsyncオプションを変える前に完全な出力を保存し、最初の具体的な失敗を見つけます。

失敗対象、senderまたはreceiver/generator、ファイル操作、errno、実効ユーザーを一つの台帳にします。その境界だけを直し、実コマンドと予定集合を再検証します。

正確な実行と完全なログを保存

両端、完全なコマンド、rsync版、remote user、作業ディレクトリ、exit statusを記録します。stdout/stderrを最初から保存するかclient logを使います。末尾の23は要約です。

sudo、chmod -R 777、広い除外、ignoreから始めません。対象判明前にidentityやscopeを変えてしまいます。

最初の具体的エラーを分類

各エラーについて正確なpath、sender/receiver/generator、open/stat/mkdir/write/rename/metadataなどのoperation、errno文字列を記録します。

remote認証、protocol、コード24は別分岐です。permission行とfailed verification行は別のtestとrepairが必要です。

同じアカウントで対象を再現

sourceでは各親のtraverse、lookup、link target、readを確認します。destinationでは一時名でtraverse、create、write、close、rename、必要なmetadataを確認します。

rsyncと同じlocal/remote account、mount、container、service contextを使います。記録したoperationに必要なspace、inode、quota、read-only、ACL、mappingだけを調べます。

証明した境界だけを修復

再現したowner、ACL、mount、capacity、missing path、option mismatchを最小限直します。除外は欠落が意図でtransfer contractを明示的に変える場合だけです。

version固有のverification bugならsupported fixed buildか限定optionで比較します。一般のpermission回避策にはしません。

予定集合の到着を証明

修正後に同じ意図の実transferを行いcode 0を要求します。続けてdry-runとitemized changesで予期しない残作業を調べ、必要な場合だけchecksumの追加I/Oを使います。

dry-runはデータを送らず同じsystem call失敗を起こさない場合があるため代替ではありません。実行成功とmanifest無欠落の両方で閉じます。

オリジナル概念図:対象、側、操作、errno、同一account test、closureを示す。
オリジナル概念図:予定したdelivered setを検証する。 Watch at Ease