🐧 Linux 総合学習プラットフォーム
ストレージ/ファイルシステム ・ 中級

rsyncでバックアップ

rsyncは、変更があった部分だけを送るバックアップ専用のコピーツールです。cpのように毎回全部を丸ごと運ぶ必要がないので、2回目以降のバックアップが驚くほど速く終わります。途中で切れても再開できる強さと、ssh越しに遠く離れたマシンへも送れる柔軟さを併せ持ちます。ここでは安全に使うための一番大事な作法、末尾スラッシュと--deleteの扱いを中心に学びます。

バックアップを取る、と聞くとcpやcp -rでフォルダを丸ごと別の場所へコピーする方法を思い浮かべるかもしれない。だがそれを毎晩繰り返すとなると話は別だ。データが増えるほど、コピーにかかる時間もどんどん延びていく。

rsyncは、この問題を解決するために作られたコピーツールだ。2回目以降のバックアップでは、前回から変わっていないファイルを飛ばし、変更があった部分だけを送る。だから同じ量のデータでも、cpより圧倒的に速く終わる。

💡
ポイントrsyncはcpと違い、前回から変わった差分だけを転送する。だから2回目以降のバックアップが速い。
🔗
たとえcpでのバックアップは、毎回本棚の本を1冊残らず箱に詰め直すようなもの。rsyncは、前回の箱と見比べて増えた本・変わった本だけを追加で詰めるイメージだ。

速さだけでなく、途中でネットワークが切れても再開できる点、ssh経由で離れたマシンにも送れる点も実務で重宝される理由になる。まずは一番シンプルな使い方から見ていこう。

🔁 基本の書式と主要オプション

rsyncの基本形は rsync [オプション] 送り元 送り先 だ。よく一緒に使われるのが -a と -v の2つになる。

-a はアーカイブモードの略で、ファイルの中身だけでなく、更新日時・所有者・パーミッション・シンボリックリンクといった属性もまとめて保持する。バックアップでは属性が消えると困るので、ほぼ必須のオプションと考えていい。

-v はverboseの略で、何のファイルが転送されたかを画面に表示する。動作確認をしながら進めたいときに付ける。

$ rsync -av ~/docs/ /mnt/backup/docs/ sending incremental file list report.txt notes/memo.txt sent 1,204 bytes received 42 bytes total size is 98,304 speedup is 78.89
送り元フォルダ変更分だけ橙rsync -av送り先フォルダ橙だけ上書き反映

図のように、緑(変更なし)の部分はスキップされ、橙(更新・新規)の部分だけが実際に送られる。これがcpとの決定的な違いだ。

⚠️ 末尾スラッシュで挙動が変わる

rsyncを使い始めた人がほぼ全員つまずくのが、送り元パスの末尾に / を付けるかどうかだ。この1文字で、送り先に作られるフォルダ構造が変わってしまう。

送り元に / を付けた場合(例: ~/docs/)は、docsフォルダの「中身」を送り先へ展開する。付けない場合(例: ~/docs)は、docsフォルダ自体を送り先の中に作ってから、その中に中身を入れる。

つまずき送り元の末尾スラッシュの有無で結果フォルダの階層が変わる。意図せず docs/docs/ のような二重階層ができるのは、たいていこれが原因だ。
rsync -av docs/ dst/ → dst/report.txt(階層1つ浅い)中身だけを dst/ 直下へ展開rsync -av docs dst/ → dst/docs/report.txt(階層1つ深い)docsフォルダごと dst/ の中へ(意図せず二重化しがち)

迷ったら送り元にも送り先にも / を付ける癖にしておくとよい。「中身をそのまま複製する」という一番よくある意図と一致しやすい。意図しない階層ができてしまっても、結果を消してから付け直せばよく、rsync自体を壊す失敗ではない。

🗑️ --delete の意味と危険性

バックアップを重ねていくと、元では削除したのにバックアップ先には古いファイルが残り続けることがある。これを反映したいときに使うのが --delete オプションだ。

--delete を付けると、送り元に無いファイルは送り先からも削除される。送り先を送り元と完全一致させる指定で、便利だが一番怖いオプションでもある。

つまずき送り元と送り先を間違えて指定した状態で --delete を付けると、送り先にしかない大事なファイルが根こそぎ消える。方向を取り違えたまま実行するのが最大の事故パターンだ。
🔗
たとえ--delete なしの同期は「足りない物を補充する」だけの棚卸し。--delete ありは「元の在庫リストに無い物は全部処分する」棚卸しだ。リストの取り違えが命取りになる。

🔍 -n --dry-run で予行演習する

--delete のような破壊的な操作は、いきなり本番実行せず、まず -n または --dry-run を付けて試すのが鉄則だ。

-n を付けると、実際にはコピーも削除もせず、「もし実行したら何が起きるか」だけを表示してくれる。消えてほしくないファイルが無いかを確認してから、-n を外して本番実行する。

$ rsync -av --delete -n ~/docs/ /mnt/backup/docs/ sending incremental file list deleting old_project/draft.txt report.txt (DRY RUN) sent 512 bytes received 88 bytes
💡
ポイント--delete を使う前は必ず -n を付けて予行演習する。deleting と表示された行を見て、想定外の削除が無いかを確認してから本番実行に進む。
コツよく使う組み合わせはコマンド履歴やメモに残しておき、-n を外し忘れないよう「まず-nで実行」を習慣にすると安全だ。

🌐 ssh越しにリモートへバックアップする

rsyncの強みの一つが、ネットワーク越しの別マシンへもほぼ同じ書式で送れることだ。送り先(または送り元)のパスの前に ユーザー名@ホスト名: を付けるだけでいい。

内部ではsshで暗号化して通信するので、社外のサーバーへ送る場合でも内容が漏れる心配は少ない。

$ rsync -av -e ssh ~/docs/ user@backup-server:/srv/backup/docs/ sending incremental file list report.txt
自分のマシン~/docs/ssh で暗号化backup-server/srv/backup/docs/

リモート越しでも差分転送の仕組みは変わらないので、2回目以降は送るデータ量が減り、ネットワーク帯域にも優しい。

📅 世代の考え方——日次・週次で保険を重ねる

ここまでの--deleteは送り先を送り元に「完全一致」させる指定だった。だがこれだけだと、うっかり削除したファイルはバックアップ側からも消えてしまい、保険にならない場面がある。

そこで実務では、同期先を複数持つ「世代管理」という考え方を組み合わせることが多い。日次バックアップは直近7日分、週次バックアップは直近4週分を別フォルダに残す、といった具合だ。下書きを1枚だけ捨てずに引き出しへ残しておくのに似ており、「今」と「少し前」の両方に戻れる道を残す発想になる。

簡単な世代管理は、日付付きのフォルダ名(backup-2026-07-01のような)へrsyncの出力先を変えていくだけでも実現できる。容量は余分に食うが、復旧できる安心感の方が勝ることが多い。凝った運用にしたければ、次に学ぶスナップショットと組み合わせるとさらに強くなる。

rsyncは差分転送・再開・リモート対応という3つの強みを持つ、実務で最も使われるバックアップツールの一つだ。--deleteは必ず-nとセットで扱う、という一点さえ守れば、日々の運用で安心して使い続けられる。

この項目に出てくる用語

差分転送さぶんてんそう
前回から変わった部分だけを送る転送方式。rsyncの高速さの核心。
世代管理せだいかんり
バックアップを1つに絞らず、日次・週次など複数残しておく運用の考え方。

関連コマンド

rsync

▶ 学習アプリでこの続きを学ぶ・演習する