どーも!marusukeです!
ディレクトリやファイルを差分だけ転送して同期するコマンドrsyncについて説明します!
rsyncコマンドでできること
rsync [オプション] <転送元> <転送先>
rsyncは、ファイルやディレクトリを別の場所へコピー・同期するためのコマンドです。cpとの一番の違いは、すでに転送先にあるファイルとの差分だけを転送するという点です。1回目はすべてのファイルを転送するので時間がかかりますが、2回目以降は変更があった部分だけを送るため高速に動作します。ローカルディスク間のコピーだけでなく、SSH経由でリモートサーバーとの間でも使えるため、バックアップスクリプトの定番コマンドになっています。
rsyncコマンドの使用例
1. ローカルディレクトリ間でコピー・同期する
rsync -av /home/ope/data/ /backup/data/
-a(--archive)は、パーミッション・所有者・更新日時などを保持したまま再帰的にコピーするオプションです。-v(--verbose)で処理内容を表示します。転送元のパスの末尾に/をつけると「ディレクトリの中身」を転送先に同期する、という意味になる点に注意してください(/が無いと、転送先の中に転送元ディレクトリ自体がコピーされます)。
2. リモートサーバーへ同期する
rsync -avz /home/ope/data/ ope@backup-server:/backup/data/
user@host:パスの形式で転送先を指定すると、SSH経由でリモートサーバーに同期できます。-z(--compress)をつけると転送時にデータを圧縮するので、ネットワーク越しの転送で特に効果があります。鍵認証を設定しておけば、パスワード入力なしで自動化スクリプトから実行できます。
3. –delete で完全に同期する
rsync -avz --delete /home/ope/data/ ope@backup-server:/backup/data/
--deleteをつけると、転送元には存在しないファイルを転送先でも削除し、2つのディレクトリを完全に一致させます。バックアップというより「ミラーリング」に近い動きになるため、意図せず必要なファイルを消してしまわないよう、初めて使うときは次の--dry-runで確認してから実行するのがおすすめです。
4. –dry-run で事前に動作を確認する
rsync -avzn --delete /home/ope/data/ ope@backup-server:/backup/data/
-n(--dry-run)をつけると、実際には転送・削除を行わず「何が起こるか」だけを表示します。--deleteと組み合わせて使う前に、まずこのオプションで削除対象を確認しておくと安全です。
5. 特定のファイル・ディレクトリを除外する
rsync -av --exclude 'tmp/' --exclude '*.log' /home/ope/data/ /backup/data/
--excludeで指定したパターンに一致するファイル・ディレクトリは転送対象から除外されます。一時ファイルやログなど、バックアップ不要なものを除きたいときに使います。
主なオプション
| オプション | 説明 |
|---|---|
-a, --archive | パーミッション・所有者・タイムスタンプなどを保持したまま再帰的に転送する |
-v, --verbose | 転送内容を詳しく表示する |
-z, --compress | 転送時にデータを圧縮する(ネットワーク越しの転送で有効) |
-n, --dry-run | 実際には転送せず、動作内容だけを表示する |
--delete | 転送元に存在しないファイルを転送先でも削除し、完全に同期する |
--exclude <パターン> | 指定したパターンに一致するファイルを転送対象から除外する |
-e <コマンド> | 転送に使う接続コマンドを指定する(例:-e ssh) |
-P | 転送の進捗表示と、中断時の再開(--partial+--progress)を有効にする |
補足:大きなファイルの転送中にネットワークが切れた場合、
-P(--partial)をつけておくと途中まで転送されたファイルが残るため、再実行時に続きから転送できます。
関連コマンド
リモートサーバーへのログインや単発のコマンド実行にはsshコマンドの使い方、1ファイルだけを転送したい場合はscpコマンドの使い方もあわせてご覧ください。定期的なバックアップとして自動実行したい場合はcrontabコマンドの使い方を、多重起動を防ぎたい場合はflockコマンドの使い方を参考にしてください。
まとめ
rsyncは、差分だけを転送することで効率よくファイルを同期できるコマンドです。--deleteや--excludeなど強力なオプションもあるぶん、特に本番環境で使う際は--dry-runで事前確認する習慣をつけておくと安心です。
以上です! ここまで読んでいただきありがとうございました!
https://marusuke-blog.com/linux-command-ssh/
https://marusuke-blog.com/linux-comand-scp/
https://marusuke-blog.com/linux-command-crontab/
https://marusuke-blog.com/linux-command-flock/

コメント