rsync は、変更されていないデータを不必要に転送せず、ファイルやディレクトリツリーを同期します。ただし効率がよいからといって、すべての実行が安全なわけではありません。コピー元の構文、末尾スラッシュ、メタデータ、除外、削除ポリシーによって結果が決まります。
ネットワーク共有 · レッスン 2
rsync
rsync によるローカルまたは SSH 経由のディレクトリ同期を、事前確認して安全に実行・検証する方法を学びます。
コピー元とコピー先を読む
ローカルで source/ の内容を destination/ へ同期します。
$ rsync -a -- source/ destination/
source/ の末尾スラッシュは「このディレクトリの内容をコピーする」という意味です。スラッシュがない rsync -a source destination/ は、destination/source を作成または更新します。スラッシュの付け方を変えるときは、必ず結果のパスを事前確認してください。
rsync -a source/ destination/ のコピー元にある末尾スラッシュは、何を意味しますか?
アーカイブモードを理解する
アーカイブモード -a は、一般に -rlptgoD と要約される、再帰処理とメタデータ保持のオプション群に相当します。権限とプラットフォームの対応範囲内で、シンボリックリンク、権限、更新時刻、グループ、所有者、デバイスまたは特殊ファイルを保持します。
アーカイブモードだけでは、ハードリンク、ACL、拡張属性は保持しません。それぞれ通常は -H、-A、-X が必要です。また、履歴世代も自動的には作りません。
-a だけでは保持されないメタデータはどれですか?
転送を事前確認する
影響の大きい同期を行う前に、dry run で変更内容を項目別に表示します。
$ rsync -a --dry-run --itemize-changes -- source/ destination/
dry run は現在のスキャンに基づく動作を予測しますが、本番コマンドの前にファイルが変化しないとは保証しません。正確なコマンドを保存して出力を確認し、両エンドポイントを確認してから --dry-run を外して実行してください。
--dry-run --itemize-changes から何が得られますか?
SSH 経由で同期する
一般的なリモートオペランドを使って、リモートホストへ送信またはリモートホストから取得します。
$ rsync -a -- source/ alice@example.net:/srv/data/
$ rsync -a -- alice@example.net:/srv/data/ destination/
現代の rsync はこの形式で通常 SSH を使いますが、設定済みリモートシェル、ホスト鍵、アカウント権限、リモート側の rsync の有無を確認してください。-z の圧縮は、帯域の狭い回線で圧縮しやすいデータには役立ちますが、圧縮済みデータには CPU を浪費する場合があります。
リモートデータをローカルディレクトリへ取得するオペランド順はどれですか?
削除を破壊的操作として扱う
--delete は、同期対象範囲内でコピー元にないコピー先エントリを削除します。エンドポイントの逆指定、誤ったスラッシュ、不適切な除外によって、有効なデータを消す可能性があります。承認前にテスト用コピー先で事前確認し、復元可能なバックアップを確保し、マウント状態を確認して、最大削除数の制限も検討してください。
本番実行後は終了状態とログを調べ、想定ファイル数とメタデータを比較し、代表的な内容または復元をテストします。rsync の同期だけでは、望ましくない削除や破損も複製されるため、完全なバックアップ戦略にはなりません。
同期中に --delete が行う可能性のある操作はどれですか?
レッスン完了
rsync を完了しました
これで、破壊的になり得る例外を見落とさず、rsync 操作を事前確認して検証できます。
末尾スラッシュで意図するディレクトリ配置を表す。
必要に応じてアーカイブモードに含まれないメタデータオプションを追加する。
本番同期前に項目別の dry-run 出力を確認する。
SSH の身元とエンドポイントの方向を検証する。
削除とバックアップ保存を明示的なポリシーとして扱う。