Fedora12でBaculaを使ってみた

以前バックアップ関連のソフトウェアとしてAmandaを使っていたのだが、RHEL6 Betaで取り込まれたタイミングで、Baculaに移行してみた。
http://www.karan.org/blog/index.php/2010/04/25/first-look-at-the-rhel-6-package-list

Baculaはネットワーク越しにバックアップを取るソフトウェアなのだが、Amandaと比べて設定が整理されておりわかりやすかったり、バックアップの実行前後にスクリプトが実行できたりといろいろ使いやすい感じだ。

Baculaを使用するには、管理用サービス(Bacula Director), ストレージ提供用サービス(Bacula Storage), ファイル取得用サービス(Bacula File, いわゆるエージェント) を導入する必要がある。
基本的には、BaculaサーバーにDirector, Storageを導入し(他にコンソール用のプログラムも導入しておいた)、バックアップを取るサーバー1台1台には、Fileだけを導入することになる。

インストール

インストールはyumで実施できる。なお、BaculaサーバーはバックエンドとしてDBを必要とするのだが、ここではsqliteを使用したかったため、合わせてsqlite用のパッケージを導入している。

# yum install bacula-client bacula-director-sqlite bacula-storage-sqlite bacula-console 

なお、クライアントとして使用する場合など、Fileだけをインストールしたい時には、次で実施できる。

# yum install bacula-client

このあと、設定を行って、service bacura-dir start を実行するのだが、そのまえにsqliteのDBを手動で作成する必要があった。

# cd /usr/libexec/bacula
# ./create_bacula_database 
# ./make_bacula_tables
# ./grant_bacula_priviledges 

ここで、 /var/spool/bacula/bacula.db にsqlite形式のファイルが作成されて入ればOKである。
設定ファイル(/etc/bacula以下)で変更する必要があるのは、サービスごとの通信に使用するパスワード(bacula-dir.conf, bacura-fd.conf, bacula-sd.conf, bconsole.conf)と、Storage, FileのIPアドレス(bacura-dir.conf のみ)だけだった。(下は一部のみを抜粋)

190c189
<   Address = 127.0.0.1
---
>   Address = storage.example.com                # N.B. Use a fully qualified name here
192c191
<   Password = "SD_PASSWORD"
---
>   Password = "@@SD_PASSWORD@@"

この状態で次が成功すればインストールは成功である。。(プロセスが起動しない場合は、/var/log/bacula.log にエラーログが生じる。)

# service bacula-dir start
# service bacula-fd start
# service bacula-sd start

バックアップを実施

Fedoraのデフォルトの設定では、/usr/sbin 以下のファイルを/tmp以下に作成したファイルにバックアップを行う設定になっている。
なお、デフォルトの設定ではバックアップ先のファイルを自動で作らない設定になっている(PoolにLabaleFormat を設定する必要があるらしい。。) このため、最初にバックアップを行う際に、手動でラベルを作成する必要がある。

ラベルの作成は次で実施できる。

# bconsole
* label
> バックアップ先のファイル名(Vol0000)などを入力
> 1 (Default Poolを選択)

対象ボリュームが作成されたかは、次で確認できる。

*list media
*llist media

バックアップを実行するには、次を実行する。

* run
* 1 (BackupClient1(/usr/sbin用のJob) を選択)
* y (詳細が表示されるので、yを選択)

上手くいったかどうかは、bconsoleへのmessageか、rootへのメールで確認できる。

* m

また、*list jobsで過去に実施したジョブを確認できた。

なお、デフォルトのジョブは、/usr/sbin のバックアップ以外に、bacula自身のカタログのバックアップのジョブと、リストア用のジョブがある。このうち、カタログ用のジョブは手動で実行できるが、リストア用のジョブは restore コマンド経由でないと実行できないようだ。

スケジュールの設定

デフォルトの設定ファイルで、"WeeklyCycle"として設定されている。

  Run = Full 1st sun at 23:05
  Run = Differential 2nd-5th sun at 23:05
  Run = Incremental mon-sat at 23:05

クライアントの追加

対象クライアントでbacula-fdの起動を行った後、baculaサーバーの/etc/bacula/bacula-dir.conf に次のような内容を設定を行う。

< Job {
<   Name = "BackupFedoraVirt5"
<   Client = fedora-virt5.jp.example.org
<   JobDefs = "DefaultJob"
<   Write Bootstrap = "/var/spool/bacula/Client2.bsr"
< }
178,187c174,183
< Client {
<   Name = fedora-virt5.jp.example.org
<   Address = fedora-virt5.jp.example.org
<   FDPort = 9102
<   Catalog = MyCatalog
<   Password = "FD_PASSWORD"         # password for FileDaemon 2
<   File Retention = 14 days            # 14 days
<   Job Retention = 1 months            # 1 months
<   AutoPrune = yes                     # Prune expired Jobs/Files
< }

注意点として、バックアップ用に次の2つの通信が必要になることがある。直接クライアントからストレージへのF/Wが開いている必要があるので注意 w。
1. DIR => FD (TCP: 9102)
2. FD => SD (TCP: 9103)

また、FDからSDへの通信には /etc/bacula/bacula-dir.conf の情報を使用しているらしく、bacula-dirとbacura-sdを同じノードにしている場合でも、StorageのIPを127.0.0.1等にしていると、別クライアントからのバックアップが上手くいかなくなる.

リストア

リストアを行う場合には、bconsoleで次を実施する。

* restore
* 5 (リストアファイルの選び方, ここでは"5: 直近のバックアップから" を指定)
* 数値 (リストアを行うクライアントを指定)

この後、バックアップが存在するファイルを選ぶシェルに移動する。例えば、/usr/sbin/tcpdump を取り出すには、次を実施する。

$ cd usr/sbin
$ add tcpdump
$ done

この状態でリストアが始まり、結果はメッセージとメールで出力される。
( なお、デフォルトの設定では、単純なファイルの取り出しは/tmp/bacula-restores 以下に作成されるので、適宜対象ファイルに上書きする必要がある。)

まとめ

ここまでで一通り動かすところまではやってみたのだが、かなり素直に設定できる印象だ。今のところ、(少なくともオープンソースでは)競合があまりない感じなので、 DB, ファイルサーバー、Gitサーバーなど、定期的にバックアップが必要なサービスを管理する場合は、とりあえず構築しておいて、損はないものと思われる。。