不定期に接続するモバイルクライアントの自動バックアップを可能とするBox Backup

 特定の時刻にファイルの自動バックアップを行う中央管理型のマネージメントソリューションは確かに便利だが、重要な業務ファイルを収めたラップトップを脇に抱えて頻繁に出張をするというタイプの人間にとってはそれほど役に立たないはずだ。そうした場合に検討すべきツールが、暗号化リンクを介してラップトップからバックアップサーバへの直接的なファイルバックアップを実行するBox Backupである。

 Box Backupのバックアッププロセスはサーバ主導型ではなく、ラップトップその他のクライアントによるバックアップサーバへの接続に応答して、必要な処理が自動で開始されるという方式で機能する。こうしたBox Backupのバックアップでは、SSL(Secure Sockets Layer)を用いて暗号化されたデータがバックアップサーバのディスクに直接書き込まれるため、ファイルのセキュリティも確保されるようになっており、また通常行われるスナップショット型のバックアップだけでなく、サーバ接続中に各ファイルに生じた個々の変更を継続的にバックアップする機能も有している。そしてなにより、Box Backupはフリーで利用できるのだ。

 Box Backupの最新バージョンは0.11rc2だが、安定リリースは2006年に公開されたバージョン0.10のままである。ただし後者のバージョン0.10では2GB以上のファイルを扱う際にエラーが生じるが、それでも開発陣からは、サイズ2GB以下のファイルをバックアップするという条件付きで、安定リリースである同バージョンの使用が推奨されている。

 Box Backupではrsyncコマンドと同様に、個々の変更に対するデータの継続的なバックアップが行えるが、再同期用スクリプトが作成不要である点がrsyncとは異なっている。またBox Backupはバックアップデータを複数のディスクやボリュームに分散させるRAID(Redundant Array of Inexpensive Disks)処理にも対応しており、その動作環境としては、OpenBSD、Linux、Windows(クライアントのみ)、FreeBSD、Solaris、NetBSD、Darwinといった多数のプラットフォームにて利用可能だ。

 先に触れた最新版の0.11rc2リリースも動作的には安定しているのだが、開発陣の説明では機能的な完成には至っていないとのことである。例えば現状では、発生源の解明されていないエラーがいくつか残留しており、その一部はドキュメント化もされていないのだ。なお開発陣は現在、データセットを古いバージョンに復元する操作を簡単化するために、操作性に優れた形式にてテープセットへのバックアップをエミュレートする機能の実装も計画中とのことである。

Box Backupの使用法

 Box Backupをソースからインストールする手順に特に難しい点はないが、Debian、Gentoo、FreeBSD用にビルドされたバイナリパッケージも公開されており、Box Backupのプロジェクトサイトにはインストールと設定に関する詳細なガイドおよび、ダウンロード用のリンクが設けられている。

 Box Backupのコンパイルには、SSL用のlibssl-devおよびZ圧縮用のlibzlib-devが必要になる。また必須ではないが、GNUのreadlineライブラリ(libreadline5-dev)およびBerkeleyデータベース(libdb4.5-dev)も用意しておくと便利である。例えばBox Backupの操作の多くはコマンドラインインタフェースから行うが、GNUのreadlineライブラリに用意されているライン編集機能を使うと、各種コマンドのキーバインドが簡単に使えるようになる(Ctrl-rキーの押し下げでコマンド履歴の検索など)。同じくBerkeleyデータベースは内部的なデータ構造をディスク上に保管する機能を提供するが、これが利用できない場合、Box Backup Service Daemon(BBSD)は個々のリモートマシンがリスタートするごとに最初からデータ構造を作成し直さなくてはならない。逆にBerkeleyデータベースが利用できると、リスタートを経た後であってもディスク上に保管しておいたデータ構造を取得ないし参照すればよくなり、その分だけBox Backupの処理に要する時間を短縮できるのだ。

 Box Backupのインストールについては、ダウンロードしたパッケージの展開後に「./configure --enable-gnu-readline」というコマンドを実行し、その後でコンパイルを行えばいい。

 Box Backupのコンパイルでは、サーバ用とクライアント用との異なる2つのパッケージが作成される。ここでのコンパイル作業が終了すると、サーバとクライアント用のサブフォルダを収めた“parcel”という名称のフォルダが作成されているはずだ。次にサーバ用フォルダにて「./install-backup-server」というコマンドを実行して、サーバ用コンポーネントをインストールする。同様にクライアント用フォルダでも「./install-backup-client」によるクライアント側のインストールを行う。このうちサーバ用コンポーネントはバックアップサーバのみにインストールしておけばいいが、クライアント用コンポーネントはバックアップ対象となる全システムにインストールしておかなくてはならない。なおクライアント用パッケージのインストールでは、先の手順と同じコンパイル操作を繰り返すことになるので、Windows用クライアントを使用する場合を除き、必要なライブラリ群を個々のクライアント側でも揃えておく必要がある。

サーバ用の設定

 Box Backupを使用するには、事前にサーバおよびクライアント用の2種類のコンポーネントを設定しておかなくてはならない。ここではまずサーバ側の設定について解説をする。最初に行うのはBox Backupサーバの管理用ユーザの作成だが、Box Backupの場合は通常ユーザでも充分なセキュリティが確保できるので、「useradd bbackup」といったコマンドによるユーザ追加を行っておけばいい(この実行例ではbbackupがユーザ名)。次に行うのはバックアップデータの保管用ディレクトリの作成だが、このディレクトリについてはバックアップ予定のデータ量を保持可能なディスクスペースさえ確保できればよく、その作成場所は任意である。よってここでは/srv/storeというディレクトリを作成したとして解説を進めるが、こうしたディレクトリについてはchownコマンドを用いて、先に作成した管理用ユーザに所有権を与えておかなくてはならない。

 管理用ユーザとバックアップ用ディレクトリの準備ができたら、コンパイル時に作成されたスクリプトを用いて、Box Backupサーバ用の設定ファイルを生成させる。なおBox BackupのRAID機能を使用する場合は、raidfile-configスクリプトによるRAID設定の作成も行わなくてはならない。その使用法および利用可能なオプション群の説明は、パラメータ指定なしで同スクリプトを実行することで確認できるが、例えば「raidfile-config /etc/bbackup 8192 /srv/store」というコマンドは、設定ファイルの格納位置を/etc/bbackupとし、RAID設定の用いるブロックサイズを8192とさせる指定となる。次に行う操作は、bbstored-configスクリプトの実行によるバックアップサーバ用の設定である。このスクリプトの実行時に指定するパラメータのうち、サーバのホスト名については注意が必要で、正しく解決されないホスト名を指定するとスクリプトが正常に動作しなくなってしまう。私の場合は「bbstored-config /etc/bbackup rhel.testlab.com bbackup」という指定により設定ファイルを生成させたが、この設定ファイルの格納先とした/etc/bbackupの所有権とアクセス権については、ここでの管理用ユーザであるbbackupのみに与えるよう変更しておく方がよいだろう。

 Box Backupの通信ではSSLを使用するため、設定ディレクトリ(/etc/bbackup)にあるbbstored-certsというスクリプトを用いて、サーバ証明書の生成と署名を行っておく必要がある。私の場合はこれを下記のコマンドにて実行した。

# bbstored-certs ca init
# bbstored-certs ca sign-server bbstored/rhel.testlab.com-csr.pem

 ここで用いたbbstore/rhel.testlab.com-csr.pemは、bbsstored-configスクリプトによるサーバ設定時に自動で生成されるものである。最後にサーバ用のデーモンを起動させるが、そのための「bbstored /etc/bbackup/bbstored.conf」というコマンドも設定ディレクトリに用意されているはずだ。

クライアントの設定

 サーバのセットアップと起動が行えたら、次にクライアント側の設定を行う。Box Backupでは、スナップショット(snapshot)とレイジー(lazy)という2つのバックアップモードが利用できる。このうちスナップショットモードは、他のバックアップソフトウェアにあるものと同様に、データのスナップショット情報を取得してそれをサーバに転送するという方式だが、実際の使用が推奨されるのは、より動的かつ柔軟なバックアップが行えるレイジーモードの方だ。レイジーモードを用いた場合、クライアントからサーバに対する継続的なデータ転送が行えるようになる。なお、使用中の状態にあるファイルの転送ないしコピーは転送後のファイルに損傷を生じさせる危険性を有すが、Box Backupの場合は特定ディレクトリ中の全ファイルを検証するためのタイムインターバルを設けることで、その間に変更が生じていないかをチェックするようにしている。つまり転送されるのはインターバル中に変更がされなかったファイルだけとし、それ以外のファイルは対象外にすることで、バックアップ途中のファイルに対するアクセスを防止させているのだ。

 ここでの設定ファイルの生成も先にサーバ側で行った作業と同様、コンパイル時にクライアント用フォルダに作成されるbbackupd-configスクリプトを用いて行えばいい(boxbackup-0.10-backup-client-linux-gnu)。その実行時には「bbackupd-config /etc/bbackup lazy 1000 rhel.testlab.com /var/bbackupd /root/Desktop/files」というように、スナップショットかレイジーかのモード指定以外に、アカウント番号(この設定例では1000)、サーバのホスト名(rhel.testlab.com)、一時バックアップ用ストレージ(/var/bbackupd)、バックアップ先ディレクトリ(/root/Desktop/files)に関するオプションを指定できる。

 この設定の格納先は/etc/bbackupなので、クライアントの起動用コマンドは「bbackup /etc/bbackup/bbackupd.conf」という指定になる。なおバックアップ先のディレクトリや除外対象のファイルを変更したい場合は、クライアントの起動前に、必要なパラメータ変更をbbackupd.confに施しておかなくてはならない。またサービスの制御コマンドであるbbackupctlに関しては、terminate(サービスの停止)、load(設定の再読込)、sync(スナップショットモードでのみ使用可能なバックアップの強制実行)などのパラメータを付けて使用する。

サーバでのアカウント作成

 SSL/TLSを用いてバックアップファイルのサーバ転送を行うクライアントについては、それぞれ固有のアカウントを作成しておかなくてはならない。各クライアントに対して生成される固有のSSLキーは、該当するクライアントアカウントに保持される。サーバにおけるクライアントアカウントの作成はbbstoreaccountsを用いて行え、その際には「bbstoreaccounts -c /etc/bbackup/bbstored.conf create 1000 0 1024M 1500M」というように、アカウント番号(ここでの設定例では1000)、RAIDの使用の有無(0または1で指定)、ソフトリミット(1024MBのストレージ割り当て)、ハードリミット(1500MBのストレージ割り当て)に関するオプションを指定できる。

 クライアント設定時に生成されたSSLキーは、下記に示したようなコマンドを用いて、サーバに転送しておかなくてはならない。ただしその際の手順に不備があったり、必要なファイルの転送先ディレクトリが間違っていると、サーバおよびクライアント用のデーモンが誤作動を起こすことになる。キーの転送手順に関する詳細についてはBox Backupのwikiが参考になるだろう。

  scp bbackup/1000-csr.pem root@rhel.testlab.com:/tmp - クライアント側の/etc/bbackupで実行
  cp /tmp/1001-csr.pem /etc/bbackup/ca/clients - サーバ側で実行
  bbstored-certs ca sign ca/clients/1000-csr.pem - サーバ側の/etc/bbackupで実行
  cp ca/roots/serverCa.pem /tmp - サーバ側の/etc/bbackupで実行
  cp ca/clients/1000-cert.pem /tmp - サーバ側の/etc/bbackupで実行
  scp rhel.testlab.com:/tmp/{serverCA,1000-cert}.pem - クライアント側で実行
  cp {serverCA,1000-cert}.pem /etc/bbackup/bbackupd - クライアント側の/tmpで実行

 バックアップしたファイルの検証と復元には、クライアント側でbbackupqueryコマンドを使用する。このコマンドはインタラクティブまたはバッチモードにて実行でき、ファイル群の検証をする場合はcompareパラメータを、ファイルディレクトリ全体の復元をする場合はrestoreパラメータを指定すればいい。また復元時のコマンドには、バックアップしたオリジナルのディレクトリおよび、クライアント側でのファイル群の格納先とするディレクトリも指定する必要がある。その他にも復元中のクライアント側では、クライアント用バックアップデーモンであるbbackupdを停止させておかないと、データの損傷ないし喪失が起こるかもしれない。

まとめ

 Box Backupの基本機能は、ラップトップに対する安全なバックアップを行うことだが、そうした機能を有さないデスクトップにて使用することもできる。このツールがその本領を発揮するのはレイジーモード下でのバックアップで、同モード下においてユーザが行うべき操作はラップトップをネットワークに接続することだけであり、その後の処理はBox Backupがすべて自動で行ってくれる。また各種のLinuxプラットフォームを広範にサポートしているだけでなく、クライアント限定ではあるがWindowsでの利用も可能であるため、モバイルユーザからのデータバックアップを行う必要のあるシステム管理者は特に重宝するはずだ。

 Box Backupに対するコマンドラインインタフェースを介したコマンド操作自体はそれほど難しくはないはずだが、SSLキー関連の管理処理は多くのエンドユーザにとって複雑すぎるかもしれない。また悪いことにBox Backupにおける安定リリースのバージョンアップ頻度は、かなりのスローペースなのである。私個人としては現行の安定リリースに満足しているが、2GBを越えるファイルサイズに付随するエラーなどは、バックアップツールとしての柔軟性を失わせる不備であるし、実務の現場では無視し得ない問題となるかもしれない。実のところこの種の不具合は最新版(0.11rc2)では解消されているのだが、開発途中のバージョンであることを考えると、これも実務に供するのは難しいだろう。

 将来バージョンに対する私の要望は、バックアップのテスト/シミュレーション機能をWebベースの管理インタフェースに統合するというものだ。実際、Box Backupに対するGUI操作用インタフェースとしてはBoxiというバックエンドが既に存在しており、設定オプションの一部を処理できるようになっている。しかしながら、その作成にあたっているのはサードパーティであり、機能的にも完全なGUI管理ソリューションというレベルには達しておらず、開発活動そのものも非常に緩慢なペースでしか進んでいない。また現状のBox Backupから提示されるバックアップ関連の統計情報は、アップロード/バックアップしたファイルの合計サイズ、サーバ上の合計サイズ、エンコード後のサイズだけなので、バックアップのログ/レポートを拡張して、バックアップしたファイルの総数(クライアント側からのもの)、ファイルの合計サイズ(クライアント側からのもの)、ファイルの数とサイズの合計(サーバ上のもの)といった、より詳細な統計情報が追加されると便利ではなかろうか。

 このように多少の不備はあるものの、モバイルユーザを対象としたバックアップシステムとしてBox Backupは充分な価値を有しているはずだ。

Linux.com 原文(2008年8月29日)