CodeGym /コース /Docker SELF /rsyncとscpを使ったバックアップ

rsyncとscpを使ったバックアップ

Docker SELF
レベル 6 , レッスン 5
使用可能

rsyncscpを使ったバックアップ

1. なぜバックアップが重要なのか?

今日はITとプログラミングの世界で働くすべての人にとって最も重要なタスクの1つ、データのバックアップについて話します。もしディスクの故障やエラーで大事なデータを失ったことがあるなら、それがいかに深刻なことかを理解しているはずです。そしてまだ失ったことがないなら、私たちはその事態を防ぐためにここにいます!

想像してみてください: 数ヶ月間必死にプロジェクトに取り組んできたのに、ある日突然ハードディスクがストライキを起こしたらどうしますか。それはまるでSQLのクエリの最後にセミコロンを付け忘れるようなものですが、千倍もひどいですよね。システムは時に信頼できず、人間はミスを犯し、ファイルは失われます。バックアップを取れば、そんなイヤなサプライズにあらかじめ備えることができます。

Linux にはバックアップのための強力なツールがいくつかあります。今日はその中の2つ、rsyncscp を紹介します。


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. rsyncscpの違い

どちらのコマンドもファイルをコピーできますが、それぞれの特徴があります。

特徴 rsync scp
速度 変更されたデータだけ、大量データの場合に速い すべてをコピー、ファイルが変更されていなくても
同期 完全な同期サポート 同期はサポートされていない
データ圧縮 利用可能 -z 利用可能 -C
使用の簡単さ 設定が少し難しい シンプルなインターフェイス

だから、もし単にファイルを素早く転送したい場合はscpを使おう。定期的な同期や大量データの場合は、間違いなくrsyncを使うべきだよ。


5. 実際の例: バックアップ設定

これが実践の課題だよ: プロジェクト全体をリモートサーバーにバックアップするプロセスを設定したい。

  1. 例えば、プロジェクトのファイルはフォルダ/home/user/projectに保存されているとする。これをサーバーbackup.server.comのフォルダ/backups/projectにバックアップしたい。

  2. コピーを速くするために、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. 典型的なエラーとその回避方法

  1. コマンドラインでの間違ったパス。 ファイルへのパスが間違っていると、rsyncまたはscpは何もコピーしないよ。lspwdコマンドを使ってパスが正しいか確認しよう。

  2. 認証キーの不在。 SSHを使うときにキーが設定されてないと、毎回パスワードを入力する必要があるよ。SSHキーを設定して、プロセスを簡単にしよう。

  3. バックアップの中断。 ネットワークが不安定な場合、rsyncは次回の実行時に転送を続行するけど、scpは最初からやり直しになるよ。

rsyncscpを使えば、ローカルコンピュータでもリモートサーバーでもデータを安心してコピー&同期できるよ。これらのツールは、大事なファイルの保護に欠かせない頼れる助っ人だね。

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION