RemoteBackupとは? 1.リモートホスト上にあるディレクトリをローカルにscpでコピーすることでバックアップする 2.ファイルの更新日時を見て、更新されているファイルだけをコピー 3.リストアする際は日付を指定して、指定された日付の状態をリストアすることができる。 1.に関しては、対象のリモートホスト上にsshデーモンが動作してさえすれば、リモートホストはなにもインストールする必要がないという利点があります。 2.に関しては、必要なファイルのみ取得するので、バックアップの時間の節約や、容量の節約ができます。 3.に関しては、リモートサーバのバックアップはrsyncが一般的だと思いますが、過去のデータを取り出すような機能はないため、間違ってサーバのファイルをいじった後に同期が取られた場合は元に戻せません。その点RemoteBackupは過去をさかのぼって、指定された日付のファイルツリーを復元することができます。 cronにRemoteBackupを登録することで、定期的なバックアップが容易にできます。

インストール手順 shellで下記のコマンドを実行  sudo gem install remotebackup

バックアップ手順

  1. 下記のフォーマットでバックアップを行うための設定ファイルを作成します。

バックアップ名(適当な英数字):

server: ホスト名
user: ホストにログインできるユーザ名
password:  ユーザのパスワード
key:  秘密鍵のパス
passphrase:  秘密鍵のパスフレーズ
path: バックアップしたいディレクトリのフルパス</path>
ignore_list:
  - 無視したいディレクトリおよびファイルの正規表現
                    :

:

例)サーバ192.168.0.10のホストにtakesyというユーザ(パスワードが openthesesami)で/www配下を.svnや.bkというディレクトリもしくはファイル以外をバックアップし、さらにサーバ192.168.0.12のホストにbkuserというユーザ(公開鍵認証)で/export配下をバックアップする場合。 web:

server: 192.168.0.10
user: takesy
password: openthesesami 
path: /www
ignore_list:
  - \.svn
  - \.bk

nfs:

server: 192.168.0.12
user: bkuser
key: /home/morita/.ssh/id_rsa
path: /export
  1. 下記のコマンドを実行することにより、バックアップ開始.

remote_backup [-f 1.で作成した設定ファイル。デフォルトはbacup.yml] [-o 出力したいディレクトリ デフォルトはカレントディレクトリ] [-v どのファイルをコピーしているか等の情報を表示]

上記実行により、レポジトリとしてカレントディレクトリもしくは-oで指定したディレクトリに1.で設定したnameの名前でディレクトリが作成されます。 上記例だとwebとnfsという名前のディレクトリができます。 バックアップされたファイルは、ファイル名+バックアップ日時の名前で保存され、さらにファイル情報として、実行日時.ymlというバックアップしたファイルの属性等が記述されたファイルが作成されます。このファイルはリストアする時に使用します。 また、前回のバックアップ時と比較して変更がなかった場合は作成されません。


リストア手順

1.リストアするためには下記のコマンドを実行する。

restore_backup -f file -o output_dir [-v vervose]

fileには、バックアップで作成された日付+ymlを指定します。 output_dirにはリストアしたいディレクトリのパスを指定します。 例: restore_backup -f ./web/2008_06_25_06_40.yml -o /tmp/www


RemoteBackup処理概要

1.sshを使用し、リモートサーバ上でls -laを再帰的に実行し、下記のツリー情報を作成する。 directory:

  • バックアップ対象ディレクトリからの相対パス

(複数ある場合は上記フォーマットが続く)

symbolic:

バックアップ対象ディレクトリからの相対パス+シンボリックファイル名:
   source: シンボリック元のパス

(複数ある場合は上記フォーマットが続く)

file:

バックアップ対象ディレクトリからの相対パス+ファイル名:
  size: ファイルのサイズ
  file_name: ファイル名+バックアップ日時
  date: ファイルの更新日付

 (複数ある場合は上記フォーマットが続く)

2. 前回バックアップした際のツリー情報と今回のツリー情報と比べてファイルの更新日付が新しくなっているファイル(初回時はすべて)をリモートサーバからscpでコピーし、file_nameに設定されているファイル名で保存。

3. 今回のツリー情報を保存。

4.リストアする際はツリー情報に基づいて、ディレクトリ、symbolicファイルを作成し、ファイルをfile_nameに設定されているファイル名+バックアップ日時からファイル名にリネームすることで、ツリー状態を復元する。