この記事ではLinuxのバックアップツール「rsync」を紹介します。rsyncは、シンプルで簡単なコマンドでローカルのデータをバックアップすることができます。
また、SSHを利用すれば、安全にリモートサーバへのバックアップも実現可能です。この記事を通じて、rsyncの基本的な使い方を確認していきます。
rsyncの基本的な使用方法
rsyncとは、データを効率的にコピー・同期するためのコマンドです。名前の rsync は「remote synchronization(リモート同期)」の略ですが、ローカルのファイル同士の同期やバックアップも可能です。
rsync の基本的な構文は以下のようになります。
$ rsync [options] source destination
- options: 同期の動作を制御するオプション
- source: バックアップ元のファイルやディレクトリ
- destination: バックアップ先のパス
sourceまたはdestinationのいずれかはローカルのファイルである必要があります。リモートからリモートへのコピーはサポートされていません。
ローカルでのバックアップ実行例
ホームディレクトリ配下の全てのファイル・ディレクトリをバックアップする例に、ローカルファイルに対してrsyncを試してみましょう。
ホームディレクトリ配下の全てを、別の場所(例: /home/[ユーザー名]/backup/)にバックアップします。私の環境の[ユーザ名]は hirotano です。
$ rsync -av /home/hirotano/ /home/hirotano/backup/
- -a :「archive」の略で、ファイルの属性や権限を保持したままコピーします。アーカイブオプション(-a)を使うと、rsyncはファイルやフォルダのメタデータ、アクセス権、タイムスタンプなどを保持してコピーします。これは特にバックアップ時に便利です。また、-aオプションは複数のオプション(-rlptgoD)を一度に適用するショートカットです。
- -r: 再帰的にディレクトリをコピー
- -l: シンボリックリンクをそのまま保持
- -p: パーミッション(アクセス権)を保持
- -t: タイムスタンプを保持
- -g: グループ所有権を保持
-
o: ユーザー所有権を保持-
D: デバイスファイルもコピー
- -v :「verbose」の略で、実行時の詳細な情報を表示。
バックアップが正しくできているか、ファイルやディレクトリが存在するかを確認します。
$ ls /home/hirotano/backup/
元のホームディレクトリの内容がbackupディレクトリにも表示されています。
sourceの末尾の /
を入れていることに注意してください。
これによりディレクトリ内の内容をコピーします。
もし、sourceの / を無しにした場合はどうなるでしょうか。
$ rsync -av /home/hirotano /home/hirotano/backup/
下記は実行後の結果ですが、backupディレクトリの配下に、hirotanoのフォルダーの中身ではなく、フォルダー自体がバックアップされています。
リモートサーバへのバックアップ
ローカルのデータを別のマシン、特にリモートサーバにバックアップする場合、よくSSHを通じて転送が行われます。これにより、データは安全に暗号化されてネットワーク上を通過します。
リモートサーバへの rsync の使用方法の構文は以下のようになります。
$ rsync [options] source [user@]host:destination
- user: リモートサーバのユーザー名
- host: リモートサーバのアドレス
- destination: リモートサーバ上のバックアップ先のパス
それでは、ローカルのhomeディレクトリをリモートサーバ(私の環境では 192.168.3.117)の指定の場所にバックアップする方法を見てみましょう。また、使用するユーザーアカウント(私の環境の hirotano です。)がバックアップ先のディレクトリにアクセス権を持っていることも確認してください。
パスワード認証
ローカルのhomeディレクトリをリモートサーバの /home/hirotano/backup/ ディレクトリにバックアップします。
$ rsync -avz /home/hirotano/ hirotano@192.168.3.117:/home/hirotano/backup/
- -z:データの圧縮を行って転送します。これにより、ネットワーク上でのデータ転送量を減少させることができます。
パスワードの入力が求められるので、リモートサーバ hirotano ユーザーのパスワードを入力します。
リモートサーバ側で、バックアップできていることが確認できます。
公開鍵・秘密鍵を用いたパスワードレス
SSHの公開鍵認証により、パスワード入力なしでリモートサーバに接続することができ、自動化されたバックアップタスクを作成する際に非常に便利です。
公開鍵をリモートサーバ(バックアップ先)にコピー
バックアップ元サーバで以下のコマンドを実行して、公開鍵・秘密鍵ペアを生成します。
$ ssh-keygen -t rsa
これを実行すると、.sshディレクトリの中にid_rsa(秘密鍵)とid_rsa.pub(公開鍵)という2つのファイルが生成されます。
公開鍵をリモートサーバ(バックアップ先)にコピー
バックアップ元サーバで以下のコマンドを実行し、公開鍵をバックアップ先サーバにコピーします。
$ ssh-copy-id -i ~/.ssh/id_rsa.pub hirotano@192.168.3.117
パスワードの入力が求めれますので入力してください。
これにより、公開鍵がバックアップ先のリモートサーバの~/.ssh/authorized_keysファイルに追加されます。
パスワードレスのリモートバックアップ実行
公開鍵認証の設定完了後、rsyncを使ってローカルのhomeディレクトリをリモートサーバにパスワードレスでバックアップすることができます。
$ rsync -av /home/hirotano/ hirotano@192.168.3.117:/home/hirotano/backup/
追加オプション
rsyncには非常に多くのオプションがありますが、ここではよく使用されるオプションを紹介します。
削除(–delete)
バックアップ先に存在するが、バックアップ元にはもう存在しないファイルを削除します。
このオプションがないと、バックアップ先に古い、不要なファイルがたまり続ける可能性があります。
–deleteを使用することで、バックアップ先と元が常に同期され、ディスクスペースの無駄を防ぐことができます。
転送テスト(–dry-run)
実際にデータを転送することなく、どのような操作が行われるかを確認できます。
このオプションを使用することで、実際にファイルを移動または削除する前に、何が起きるかを確認できます。これは、特に重要なファイルを扱う場合や、新しい設定を試す際の事前テストで使用します。
下記のように、削除(–delete)と転送テスト(–dry-run)を組み合わせ、何がバックアップされるか、何が削除されるかを事前に確認することができます。
$ rsync -av –delete –dry-run /home/hirotano/ hirotano@192.168.3.117:/home/hirotano/backup/
-v オプションをつけると、実行結果の最後に、DRY RUN と表示されていることが確認できます。
このコマンドは、何がバックアップされるか、何が削除されるかを確認し、その後、–dry-runを取り除いて実行するとよいです。
除外(–exclude)
このオプションを使用すると、特定のファイルやディレクトリをバックアップの対象から除外することができます。すべてのファイルやディレクトリをバックアップする必要がない場合もあります。一部の一時ファイル、キャッシュ、または個人データなど、バックアップから除外したい事もあります。このオプションを使うことで、そのような不要なデータをバックアップから除外することができます。
下記では、Downloadsディレクトリと、.tmpという拡張子を持つファイルをバックアップから除外しています。
$ rsync -av –exclude ‘Downloads/’ –exclude ‘*.tmp’ /home/hirotano/ hirotano@192.168.3.117:/home/hirotano/backup/
圧縮( -z)
このオプションは、データをリモートサーバへのデータ転送時に圧縮します。特に大量のデータを転送する場合や、ネットワーク速度が遅い場合には便利です。
$ rsync -azv /home/hirotano/ hirotano@192.168.3.117:/home/hirotano/backup/
バックアップ(-b)
このオプションは、既存のファイルを上書きする前に、バックアップ先でそのファイルのコピーを作成します。これにより、何らかの理由で元のファイルが破損したり失われたりした場合でも、前のバージョンに戻ることができます。
初回バックアップ取得後、例えば、homeディレクトリ内に元々存在したファイル(file1.txt)を更新したとします。そこで、もう一度、バックアップを取得する際に、このオプションを使用すると、バックアップ先のサーバ上に既存の file1.txt がバックアップされます。
$ rsync -avb /home/hirotano/ hirotano@192.168.3.117:/home/hirotano/backup/
下記はバックアップ先サーバのスクリーンショットで、更新された file1.txt がリモートの /home/hirotano/backup/ へ転送される前に、リモートサーバ上の既存の file1.txt は file1.txt~ として保存されます。
まとめ
- rsyncはシンプルなコマンドでデータを効率的にコピー、同期できるツール
- ローカル間やローカルからリモートへのバックアップが可能
- SSHを利用すれば安全にリモートへバックアップできる
- パスワード認証や公開鍵認証でリモート接続できる
- archiveオプションでファイル属性を保持してコピーできる
- verboseオプションで実行ログを詳細表示できる
- deleteオプションでバックアップ先から不要なファイルを削除できる
- dry-runオプションで実行内容の確認ができる
- excludeオプションで特定のファイル・フォルダを除外できる
- 圧縮オプションでデータを圧縮して転送できる
- backupオプションで上書き前のファイルを保存できる
コメント