rsync
とscp
を使ったバックアップ
1. なぜバックアップが重要なのか?
今日はITとプログラミングの世界で働くすべての人にとって最も重要なタスクの1つ、データのバックアップについて話します。もしディスクの故障やエラーで大事なデータを失ったことがあるなら、それがいかに深刻なことかを理解しているはずです。そしてまだ失ったことがないなら、私たちはその事態を防ぐためにここにいます!
想像してみてください: 数ヶ月間必死にプロジェクトに取り組んできたのに、ある日突然ハードディスクがストライキを起こしたらどうしますか。それはまるでSQLのクエリの最後にセミコロンを付け忘れるようなものですが、千倍もひどいですよね。システムは時に信頼できず、人間はミスを犯し、ファイルは失われます。バックアップを取れば、そんなイヤなサプライズにあらかじめ備えることができます。
Linux にはバックアップのための強力なツールがいくつかあります。今日はその中の2つ、rsync
と scp
を紹介します。
2. コマンドrsync
: データコピーのための高速で賢いツール
rsync
はデータのコピーと同期化のための最も人気のあるツールの1つだよ。これの強みはスピードと効率性。すべてをコピーする代わりに、rsync
は変更されたファイルだけをコピーするんだ。これが大容量データの定期的なバックアップに最適な理由だね。
rsync
の構文
基本的なコマンド形式はこれ:
rsync [オプション] ソース 宛先
ここで:
ソース
- コピーしたいファイルやフォルダーへのパス。宛先
- データを送る場所。
主なオプションとその機能
よく使われるオプションはこちら:
-a
(archive): すべてのメタデータ(アクセス権、タイムスタンプなど)のコピーを含む。-v
(verbose): 詳細な出力を有効にして、何が起こっているかを確認できるようにする。--progress
: コピーの進行状況を表示(大きなファイルをコピーする場合に便利)。--delete
: ソース側に存在しなくなったファイルを宛先側から削除。完全な同期化に便利。-z
(compress): データを転送前に圧縮して作業を早める(特にネットワーク操作で重要)。
例: ローカルデータのコピー
バックアップ用のフォルダー/backup
を作成しよう。
mkdir /backup
フォルダー/home
の全内容を/backup
にコピーする:
rsync -av /home /backup
この例を解説すると:
-a
はファイルの構造とアクセス権を保持。-v
はプロセスの進行状況を表示。
もし再度このコマンドを実行すると、変更されたものや新しいファイルだけをコピーするよ。
例: リモートバックアップ
次に、バックアップをリモートサーバーに送りたい場合を考えてみよう。そのためにはrsync
はSSHの利用をサポートしている。
rsync -av /backup user@remote_server:/remote_backup
ここで:
user
- リモートサーバーのユーザー名。remote_server
- リモートサーバーのアドレス(例えば、IPアドレスやドメイン名)。/remote_backup
- サーバー上の保存したいデータへのパス。
もしSSHキーを認証のために持っている場合、転送はさらに簡単で安全になるよ。
3. コマンド scp
: シンプルで効率的
scp
(Secure Copy Protocol)は、ローカルマシンとリモートマシンの間でファイルをコピーするためのツールだよ。rsync
より少しシンプルで、完全な同期が不要な場合に適しているよ。
scp
の構文
基本的なコマンドフォーマットは以下の通り:
scp [オプション] ソース 宛先
説明:
ソース
— コピーしたいファイルのパス。宛先
— ファイルを送るアドレス。
主なオプションとその機能
役に立ついくつかのオプション:
-r
: フォルダを再帰的にコピーする。-C
: 転送前にファイルを圧縮する。-P
: デフォルト(22)以外のSSHポートを指定する。
例: ファイルをリモートマシンにコピーする
ローカルコンピュータからサーバにファイルを転送したい場合。例えば、ファイル名はdocument.txt
とするね。
scp document.txt user@remote_server:/remote_folder
もしファイルが/home/user/documents
フォルダにある場合、コマンドは次のようになるよ:
scp /home/user/documents/document.txt user@remote_server:/remote_folder
これでファイルはリモートマシンの/remote_folder
フォルダで利用可能になるよ。
例: サーバからローカルマシンにファイルをコピーする
逆方向のプロセス:
scp user@remote_server:/remote_folder/document.txt /home/user/documents
この場合、document.txt
ファイルはローカルのフォルダに保存されるよ。
4. rsync
とscp
の違い
どちらのコマンドもファイルをコピーできますが、それぞれの特徴があります。
特徴 | rsync | scp |
---|---|---|
速度 | 変更されたデータだけ、大量データの場合に速い | すべてをコピー、ファイルが変更されていなくても |
同期 | 完全な同期サポート | 同期はサポートされていない |
データ圧縮 | 利用可能 -z |
利用可能 -C |
使用の簡単さ | 設定が少し難しい | シンプルなインターフェイス |
だから、もし単にファイルを素早く転送したい場合はscp
を使おう。定期的な同期や大量データの場合は、間違いなくrsync
を使うべきだよ。
5. 実際の例: バックアップ設定
これが実践の課題だよ: プロジェクト全体をリモートサーバーにバックアップするプロセスを設定したい。
例えば、プロジェクトのファイルはフォルダ
/home/user/project
に保存されているとする。これをサーバーbackup.server.com
のフォルダ/backups/project
にバックアップしたい。コピーを速くするために、
rsync
を使おう。
バックアップスクリプト設定
ファイルbackup.sh
を作成:
#!/bin/bash
SOURCE="/home/user/project"
DESTINATION="user@backup.server.com:/backups/project"
# rsyncを使ってバックアップを実行
rsync -av --delete "$SOURCE" "$DESTINATION"
# 完了メッセージを表示
echo "バックアップ完了!"
ファイルを実行可能にする:
chmod +x backup.sh
そしてこのスクリプトを手動で実行できるようになる:
./backup.sh
またはcron
に追加して自動的に実行させることもできるよ(cronについてはコースの後半で話す予定)。
6. 典型的なエラーとその回避方法
コマンドラインでの間違ったパス。 ファイルへのパスが間違っていると、
rsync
またはscp
は何もコピーしないよ。ls
やpwd
コマンドを使ってパスが正しいか確認しよう。認証キーの不在。 SSHを使うときにキーが設定されてないと、毎回パスワードを入力する必要があるよ。SSHキーを設定して、プロセスを簡単にしよう。
バックアップの中断。 ネットワークが不安定な場合、
rsync
は次回の実行時に転送を続行するけど、scp
は最初からやり直しになるよ。
rsync
とscp
を使えば、ローカルコンピュータでもリモートサーバーでもデータを安心してコピー&同期できるよ。これらのツールは、大事なファイルの保護に欠かせない頼れる助っ人だね。
GO TO FULL VERSION