Linux用Rsync:ファイルの同期、コピー、バックアップ
9分で読めます - 2025年5月24日

Linux での rsync を使ったインクリメンタル転送、SSH を使ったリモート同期、cron を使ったスケジュールバックアップ、trailing-slash の罠を避ける方法。
Linux用rsync:プロのようにファイルを同期、コピー、バックアップする方法
Rsyncは、Linuxシステム間でファイルをコピーするための標準的なツールです。これは cp または scp よりも高速で、ネットワーク切断からの復旧が可能であり、実際に変更された部分のみを転送します。この記事では、rsyncの機能、知っておくべきオプション、最も頻繁に使用する例、およびcronでのスケジュール設定方法について解説します。
rsyncとは何ですか?
rsyncは、場所間でファイルをコピーおよび同期するためのコマンドラインユーティリティです。ローカル環境、SSH経由のリモートホスト、またはrsyncデーモンに対して動作します。 cp または scpとの主な違いは、rsyncがまずソースと宛先を比較し、その差分のみを転送する点です。100GBのディレクトリで200MBが変更された場合、rsyncは200MBのみを転送します。 cp と scp はすべてを転送します。
rsyncは、最近のLinuxディストリビューションにはすべて標準で含まれています。もしインストールされていない場合は、次のように実行してください: apt install rsync または dnf install rsync.
cpやscpではなくrsyncを使う理由
rsyncが、単純なコピー以外のあらゆるコピー作業において優れている3つの理由:
- 増分転送が可能である。以降の実行では、ファイル全体ではなく変更されたバイトのみが転送される。バックアップやミラーリングにおいて、これにより一晩かかる作業が数分で完了する。
- 中断に強いため、
--partial、転送が途中で止まった50GBのファイルは、最初からやり直すのではなく、中断した箇所から再開されます。 - メタデータを保持します。アーカイブモード(
-a)は、権限、所有権、シンボリックリンク、タイムスタンプを保持します。システムファイル、ソースツリー、および属性が重要なあらゆるものにとって不可欠です。
小さなファイルの単発コピーであれば、 scp で十分です。繰り返し行う場合、帯域幅を大量に消費する場合、または再開が必要になる可能性がある場合は、rsyncを使用してください。
一般的な rsync オプション
実際に使用することになるオプション:
| オプション | 機能 |
|---|---|
-a | アーカイブモード。パーミッション、所有権、シンボリックリンク、タイムスタンプを保持します。 -rlptgoD. |
-v | Verbose。転送中のファイルを一覧表示します。 |
-z | 転送中の圧縮。低速または通信コストの高い回線では有用ですが、LAN や既に圧縮済みのコンテンツではあまり有用ではありません。 |
-P | を組み合わせる --partial および --progressを組み合わせたもの。中断された転送を再開し、リアルタイムの進行状況を表示します。 |
--delete | 送信元には存在しないファイルを転送先で削除します。完全なミラーリングには必須です。 |
--exclude | パターンに一致するファイルをスキップします。 |
--exclude-from=FILE | ファイルから除外パターンを読み込む。多数の --exclude フラグを連鎖させるよりもすっきりしている。 |
--dry-run | 何も転送しなかった場合にどうなるかを表示します。 |
--bwlimit=KBPS | 帯域幅の使用量を 1 秒あたりのキロバイト単位で制限します。営業時間中に実行されるバックアップに便利です。 |
--checksum | サイズや変更日時ではなく、チェックサムでファイルを比較します。処理速度は遅くなりますが、特殊なケースも検出できます。 |
-e ssh | 転送に SSH を使用します。最近のほとんどのインストール環境では暗黙的に有効です。 |
デフォルトの動作はファイルサイズと最終更新日時を比較するもので、高速でほぼ常に正確です。以下の場合に切り替えてください --checksum デプロイプロセスで内容が変更されずにタイムスタンプが書き換えられる場合、またはビットレベルの破損が疑われる場合は、
rsync の例
ローカルでディレクトリをコピーする:
rsync -av /source/path/ /destination/path/SSH経由でリモートサーバーに同期する:
rsync -avz /local/dir/ user@remote:/remote/dir/破壊的な操作を行う前にドライランを行う:
rsync -avz --dry-run /local/dir/ user@remote:/dir/2つのディレクトリをミラーリングし、宛先での削除を含める:
rsync -av --delete /source/ /destination/ログと一時ディレクトリを除外する:
rsync -av --exclude='*.log' --exclude='tmp/' /src/ /dest/中断される可能性のある大容量転送を再開する:
rsync -avP user@remote:/backups/big.img /local/SSHセッションが切断された場合は、同じコマンドを再度実行してください。 -P、rsyncは最初からやり直すのではなく、中断した箇所から再開します。
オフピーク時のバックアップでは、アップリンクが飽和しないよう帯域幅を50 MB/sに制限します:
rsync -avz --bwlimit=50000 /local/dir/ user@remote:/dir/末尾のスラッシュに注意
rsyncで最もよくある間違い:
rsync -av /source /destination/ # copies the 'source' directory INTO /destination
rsync -av /source/ /destination/ # copies the CONTENTS of /source into /destinationソースパスに末尾のスラッシュがある場合、「このディレクトリ内のすべて」を意味します。末尾のスラッシュがない場合は、「このディレクトリ自体」を意味します。 --dry-run で実行してください。特に --delete.
cron を使用した rsync の自動化
定期的なバックアップを行うには、次の3つの条件が必要です:
バックアップ先へのパスワード不要のSSHアクセス。cronジョブはパスワードを入力できません。鍵を生成し、バックアップホストにコピーします:
ssh-keygen -t ed25519 ssh-copy-id user@backup-hostcrontab内のワンライナーではなく、スクリプトを作成します。テストやログ記録が容易になります:
#!/bin/bash LOG=/var/log/rsync-backup.log rsync -az --delete /etc/ user@backup:/backups/$(hostname)/etc/ >> "$LOG" 2>&1実行可能にするには
chmod +x.これを実行するためのcronエントリを作成します。次のように編集します:
crontab -e:0 2 * * * /usr/local/bin/rsync-backup.shこれでスクリプトが毎晩 02:00 に実行されます。
本番環境では、次の2つの改良を行う価値があります。スクリプトを flock で囲み、長時間実行されるジョブが翌晩の実行と重ならないようにし、出力を logger を介して出力をパイプし、障害が発生した場合はシステムジャーナルに記録されるようにして、監視システムで検出できるようにします。
まとめ
rsyncは、オプションの学習に費やした時間がほぼ即座に報われる数少ないLinuxツールの一つです。主なポイントは以下の通りです:
- 増分転送と再開機能により、rsyncは1回以上実行するあらゆる作業に最適な選択肢となります
-aアーカイブモードでは、-z圧縮については、-P再開と進行状況の確認、--delete完全なミラーリング- ソースパスの末尾のスラッシュに注意してください。特に
--delete - cronやSSHキーと組み合わせて、手間のかからない定期バックアップを実現
施設間でデータを移動させる大規模なバックアップジョブの場合、帯域幅無制限のVPSでrsyncを実行すれば、転送容量の制限によってバックアップのウィンドウが制約されることはありません。
パワフルで無制限のVPSが重要な理由
無制限VPSは固定ポート速度で定額帯域幅を提供します。従量制プランとの違いや、どのような場合にお得なのか、購入前に確認すべきことなどについて説明します。
7分で読めます - 2025年5月9日
Linuxのメモリ管理:スワップ、OOMキラー、Cグループ
12分で読めます - 2026年5月31日

ご質問またはカスタムソリューションが必要ですか?
柔軟なオプション
グローバル・リーチ
即時展開
柔軟なオプション
グローバル・リーチ
即時展開