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

MacのrsyncでOperation not permitted?失敗パスと起動元を先に照合

コード23は部分転送の要約。送信元読み取り、保存先書き込み、属性変更を分け、実際のTerminal・SSH・定期実行の条件を確認します。

rsyncの操作・パス・属性エラーを分けるオリジナル図。
オリジナル編集イラスト:パスアクセス、保存先変更、属性失敗を区別。 Watch at Ease

rsyncのコード23だけでは失敗した権限は分からない。先行する操作とパスが重要で、元ディレクトリーを開くこと、保存先の改名、時刻設定は別だ。MacでTerminalから成功しても、定期ジョブやリモートSSHに同じプライバシー権限がある証明にはならない。

実ログから失敗台帳を作る

操作、完全パス、送信元か保存先か、コンピューター、実行条件を記録する。opendirはディレクトリーアクセスで、open失敗の読み書きは完全なメッセージとフラグで確認する。パスは両側にあり得る。rename・chown・chgrp・failed to set timesは別の保存先能力だ。内容コピー後も属性失敗が残る場合がある。

stderr全文とrsync終了値を保存し、外側スクリプトの成功表示だけを見ない。実ジョブでcommand -v rsync、rsync --version、id、pwdを記録する。秘密を含み得る環境全体でなく必要値と秘匿化した引数だけを共有する。新しい実行ファイルだけではフォルダーを許可できない。

起動元と拒否された側を確認

対話実行では実際の端末アプリ、定期実行では起動アプリやサービス、ユーザー、作業場所、マウントを確認する。対話シェルの設定や権限を継承するとは限らない。手動成功は比較であって定期ジョブ修復ではない。

SSHでは遠隔側のrsyncは遠隔ログインユーザーで動く。拒否パスが遠隔MacならローカルTerminalだけの変更では不十分だ。モジュール設定を持つrsync daemonとも区別し、sender/receiver表示だけで判断しない。

必要な公式設定だけを変える

Appleはシステム設定→プライバシーとセキュリティ→ファイルとフォルダでアプリ・場所ごとのアクセスを説明する。コピーに必要な範囲を確認する。遠隔ログインは一般→共有→リモートログインで、遠隔ユーザーのフルディスクアクセスと許可ユーザーを別に設定する。

広いディスク許可は全コード23の必須修復ではない。管理端末や起動元不明なら台帳を管理者へ渡す。保護無効化、プライバシーDB編集、再帰的所有権変更では補わない。通常権限、ファイルシステム、要求属性も別に診断する。

同じ起動条件で検証し原本を残す

導入版でオプションを確認し、小範囲のdry runで変更一覧を見る。実データは送られないため、全読み取り・書き込み・属性成功の証明にはならない。同じ起動元と遠隔経路で使い捨てサンプルを非削除で実コピーする。

バイトと必要属性を比較し、予定ジョブの全ログと終了値を確認する。時刻や所有権失敗があれば、開けるだけで完全アーカイブとは言えない。原本と良いバックアップを残し、削除やignore-errorsで隠さない。読者のMacは未実測だ。

起動条件と実コピー検証を結ぶオリジナル図。
オリジナル編集イラスト:実行条件を合わせサンプルで検証。 Watch at Ease