さて、これがいろいろな意味で一番の大物。
とても強力なバックアップソフトで、いつのまにやら知名度もじりじり上がり、
Bacula.jp
http://www.bacula.jp/
なんてのもできていた。
初心者も思わず手を伸ばしてしまいそうなデザインのサイトだが、断言する。きっとボッコボコにされる。
bacula(特にwindows版)はユーザーフレンドリーとは言えず、設定に多々ややこしいところがあり、これをこのままの状態で普及させようとするのは明らかにヤバい。
Bacula.jpはどういう意図で作られたのだろう、人柱募集だろうか??
だがしかし、一度動く環境が作れたら至極まっとうに動く。エンタープライズ用途なので当たり前だが。
家庭や小さなオフィスでも導入を考える価値は十分にあると思う。
baculaの仕組み
baculaはsd、fd、dirの3つから構成される
- sdはストレージデーモン。ファイル倉庫。
- fdはファイルデーモン。ファイルをストレージデーモンに渡す。
- dirはディレクタ。ファイルデーモンからストレージデーモンへのやりとりを監督する。
ストレージデーモン、ディレクタは1つづつあればよく、ファイルデーモンだけがバックアップ対象のマシンごとにインストールされる必要がある。
重要なのはディレクタ。
設定ファイルもディレクタだけが重要。
ストレージデーモン、ファイルデーモンの設定ファイルは簡素なもの。
設定ファイル
以下の記事を参考に。
Bacula (4) bacula-fd.conf
http://lunatear.net/archives/001062.html
Bacula (5) bacula-sd.conf
http://lunatear.net/archives/001063.html
Bacula (6) bacula-dir.conf 1
http://lunatear.net/archives/001067.html
Bacula (7) bacula-dir.conf 2
http://lunatear.net/archives/001068.html
Bacula (8) bacula-dir.conf 3
http://lunatear.net/archives/001069.html
Automated Disk Backup
http://www.bacula.org/en/rel-manual/Automated_Disk_Backup.html
インストール前に大体の設定ファイルを作成しておくといい。(windows版のクライアントはインストール時にディレクタの情報などを求めるため)
まずパスワードの表を作っておく
- alice
- sd -> ALICE_SD_PASSWORD
- fd -> ALICE_FD_PASSWORD
- belle
- fd -> BELLE_FD_PASSWORD
- chris
- dir -> CHRIS_DIR_PASSWORD
- fd -> CHRIS FD_PASSWORD
- client1
- fd -> CLIENT1_FD_PASSWORD
表ができればfd、sdの設定ファイルの内容は自動的に決まる。
bacula-fd.conf
DirectorのPasswordにそれぞれのfdのパスワードを入力するところが間違えやすい。
alice
Director { Name = chris-dir Password = "ALICE_FD_PASSWORD" } FileDaemon { Name = alice-fd FDport = 9102 WorkingDirectory = /var/lib/bacula Pid Directory = /var/run Maximum Concurrent Jobs = 20 } Messages { Name = Standard director = chris-dir = all, !skipped, !restored }
belle
Director { Name = chris-dir Password = "BELLE_FD_PASSWORD" } FileDaemon { Name = belle-fd FDport = 9102 WorkingDirectory = /var/lib/bacula Pid Directory = /var/run Maximum Concurrent Jobs = 20 } Messages { Name = Standard director = chris-dir = all, !skipped, !restored }
chris
Director { Name = chris-dir Password = "CHRIS_FD_PASSWORD" } FileDaemon { Name = chris-fd FDport = 9102 WorkingDirectory = /var/lib/bacula Pid Directory = /var/run Maximum Concurrent Jobs = 20 } Messages { Name = Standard director = chris-dir = all, !skipped, !restored }
client1
Director { Name = chris-dir Password = "CLIENT1_FD_PASSWORD" } FileDaemon { Name = clinet1-fd FDport = 9102 WorkingDirectory = "C:\\Documents and Settings\\All Users\\Application Data\\Bacula\\Work" Pid Directory = "C:\\Documents and Settings\\All Users\\Application Data\\Bacula\\Work" Maximum Concurrent Jobs = 20 } Messages { Name = Standard director = chris-dir = all, !skipped, !restored }
bacula-sd.conf
同様に、DirectorのPasswordにはsd自身のパスワードを入れる。
alice
Storage { Name = alice-sd SDPort = 9103 # Director's port WorkingDirectory = "/var/lib/bacula" Pid Directory = "/var/run" Maximum Concurrent Jobs = 20 } Director { Name = chris-dir Password = "ALICE_SD_PASSWORD" } Device { Name = FileStorage Media Type = File Archive Device = /disk/1/bacula LabelMedia = yes; Random Access = Yes; AutomaticMount = yes; RemovableMedia = no; AlwaysOpen = no; } Messages { Name = Standard director = chris-dir = all }
bacula-dir.conf
これが最難関。長いので分割して解説する。
DirectorのPasswordにはdir自身のパスワードを入れる。
Director { Name = chris-dir DIRport = 9101 QueryFile = "/usr/lib/bacula/query.sql" WorkingDirectory = "/var/lib/bacula" PidDirectory = "/var/run" Maximum Concurrent Jobs = 1 Password = "CHRIS_DIR_PASSWORD" Messages = Standard }
ジョブ。
デフォルトのものを上書きしてそれぞれのfdのジョブを定義していく。
#default job JobDefs { Name = "DefaultJob" Type = Backup Level = Incremental Client = chris-fd #上書きされるので特に意味はない FileSet = "Full Set" Schedule = "WeeklyCycle" Storage = File Messages = Standard Pool = Default #使用されることはないが、定義として必要 Full Backup Pool = Full-Pool Incremental Backup Pool = Inc-Pool Differential Backup Pool = Diff-Pool Priority = 10 } #alice job Job { Name = "alice_job" JobDefs = "DefaultJob" Client = alice-fd Write Bootstrap = "/var/lib/bacula/alice_job.bsr" } #belle job Job { Name = "belle_job" JobDefs = "DefaultJob" Client = belle-fd Write Bootstrap = "/var/lib/bacula/belle_job.bsr" } #chris job Job { Name = "chris_job" JobDefs = "DefaultJob" Client = chris-fd Write Bootstrap = "/var/lib/bacula/chris_job.bsr" } #client1 job Job { Name = "client1_job" JobDefs = "DefaultJob" Client = client1-fd FileSet = "client1 Set" Write Bootstrap = "/var/lib/bacula/client1_job.bsr" } #catalog backup(self job) Job { Name = "BackupCatalog" Type = Backup Client = chris-fd #dirが動いているのと同じマシンのfd FileSet="Catalog" Schedule = "WeeklyCycleAfterBackup" Storage = File Messages = Standard Pool = Default Full Backup Pool = Full-Pool Incremental Backup Pool = Inc-Pool Differential Backup Pool = Diff-Pool RunBeforeJob = "/usr/lib/bacula/make_catalog_backup bacula bacula" RunAfterJob = "/usr/lib/bacula/delete_catalog_backup" Write Bootstrap = "/var/lib/bacula/BackupCatalog.bsr" Priority = 11 } #default restore job Job { Name = "RestoreFiles" Type = Restore Client= alice-fd FileSet="Full Set" Storage = File Pool = Default Full Backup Pool = Full-Pool Incremental Backup Pool = Inc-Pool Differential Backup Pool = Diff-Pool Messages = Standard Where = /bacula-restores }
ファイルセット。
バックアップ対象を定義する。
linuxとwindowsでは全然違うので別に定義している。
必要があればマシン、ジョブごとに定義する。
#for linux FileSet { Name = "Full Set" Include { Options { signature = MD5 Compression = GZIP } File = /usr File = /home File = /boot File = /var File = /opt #for alice, samba public dir File = /samba/safe } Exclude { File = /proc File = /tmp File = /.journal File = /.fsck } } #for client1@windows FileSet { Name = "client1 Set" Enable VSS = yes Include { File = "c:/" File = "d:/data/" File = "d:/tools/" Options { signature = MD5 Compression = GZIP IgnoreCase = yes } } Include { Options { Exclude = yes IgnoreCase = yes # WildFile = "[a-z]:/hiberfil.sys" WildFile = "[a-z]:/pagefile.sys" WildDir = "c:/Documents and Settings/*/Cookies" WildDir = "c:/Documents and Settings/*/Recent" WildDir = "c:/Documents and Settings/*/Local Settings/History" WildDir = "c:/Documents and Settings/*/Local Settings/Temp" WildDir = "c:/Documents and Settings/*/Local Settings/Temporary Internet Files" } } } FileSet { Name = "Catalog" Include { Options { signature = MD5 } File = /var/lib/bacula/bacula.sql } }
スケジュール。
Schedule { Name = "WeeklyCycle" Run = Full 1st sun at 23:05 Run = Differential 2nd-5th sun at 23:05 Run = Incremental mon-sat at 23:05 } Schedule { Name = "WeeklyCycleAfterBackup" Run = Full sun-sat at 23:10 }
ファイルデーモンの定義。
Passwordにはそれぞれのfdのパスワードを入力する。
Client { Name = alice-fd Address = alice FDPort = 9102 Catalog = MyCatalog Password = "ALICE_FD_PASSWORD" # password for FileDaemon File Retention = 30 days # 30 days Job Retention = 6 months # six months AutoPrune = yes # Prune expired Jobs/Files } Client { Name = belle-fd Address = belle FDPort = 9102 Catalog = MyCatalog Password = "BELLE_FD_PASSWORD" # password for FileDaemon File Retention = 30 days # 30 days Job Retention = 6 months # six months AutoPrune = yes # Prune expired Jobs/Files } Client { Name = chris-fd Address = chris FDPort = 9102 Catalog = MyCatalog Password = "CHRIS_FD_PASSWORD" # password for FileDaemon File Retention = 30 days # 30 days Job Retention = 6 months # six months AutoPrune = yes # Prune expired Jobs/Files } Client { Name = client1-fd Address = client1 FDPort = 9102 Catalog = MyCatalog Password = "CLIENT1_FD_PASSWORD" # password for FileDaemon File Retention = 30 days # 30 days Job Retention = 6 months # six months AutoPrune = yes # Prune expired Jobs/Files }
ストレージデーモンの定義。
Passwordには対象のsdのパスワードを。
Storage { Name = File Address = alice # N.B. Use a fully qualified name here SDPort = 9103 Password = "ALICE_SD_PASSWORD" Device = FileStorage Media Type = File }
カタログの定義。
ユーザー、パスワードなど変更したならそれを反映させておく。
Catalog { Name = MyCatalog dbname = "bacula"; dbuser = "bacula"; dbpassword = "" }
ストレージデーモンのプール設定。
Label Formatが設定してあれば、Full-0001のようなラベルを自動生成してくれるので手間が掛からない。
ただし、Maximum Volumesが上限なので、それ以上は生成されない。
タスクの数が未定だとか増える予定があれば、Maximum Volumesは大きめに取っておくのがいい。
Pool { Name = Default Pool Type = Backup Recycle = yes AutoPrune = yes Volume Retention = 60 days } Pool { Name = Full-Pool Pool Type = Backup Recycle = yes AutoPrune = yes Volume Retention = 2 months Maximum Volume Jobs = 1 Label Format = Full- Maximum Volumes = 20 } Pool { Name = Diff-Pool Pool Type = Backup Recycle = yes AutoPrune = yes Volume Retention = 40 days Maximum Volume Jobs = 1 Label Format = Diff- Maximum Volumes = 40 } Pool { Name = Inc-Pool Pool Type = Backup Recycle = yes AutoPrune = yes Volume Retention = 20 days Maximum Volume Jobs = 6 Label Format = Inc- Maximum Volumes = 60 }
メッセージ設定。
メールアドレスを入力しておけばメールが来る。
Messages { Name = Standard mailcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: %t %e of %c %l\" %r" operatorcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: Intervention needed for %j\" %r" mail = your@mail.adress = all, !skipped operator = your@mail.adress = mount console = all, !skipped, !saved append = "/var/lib/bacula/log" = all, !skipped }
インストール
以下を参考に。
http://beach-told.blogspot.com/2009/01/install-bacula-on-centos-52.html
chris (dir, fd)
CentOS 5.3 32bitなのでそれに適したものをインストールする。
# wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
# rpm -ivh rpmforge-release-0.3.6-1.el5.rf.i386.rpm
# yum install mysql mysql-devel mysql-server gcc-c++ perl-DBI openssl-devel perl-DBD-Mysql glibc-devel libgomp libstdc++-devel krb5-devel zlib-devel glibc-headers e2fsprogs-devel php php-gettext php-pear qt4 qt4-devel wxGTK qwt-devel qwt
# wget http://downloads.sourceforge.net/bacula/bacula-bat-2.4.2-1.el5.i386.rpm
# wget http://downloads.sourceforge.net/bacula/bacula-gconsole-2.4.2-1.el5.i386.rpm
# wget http://downloads.sourceforge.net/bacula/bacula-mtx-2.4.2-1.el5.i386.rpm
# wget http://downloads.sourceforge.net/bacula/bacula-mysql-2.4.2-1.el5.i386.rpm
データベースを初期化する。
必要があればパスワードなどを設定するよう書き換えてから
# cd /usr/lib/bacula/
# ./create_bacula_database
# ./grant_bacula_privileges
# ./make_bacula_tables
alice (sd, fd)
CentOS 5.3 64bitなのでそれに適したものをインストールする。
# yum install mysql mysql-devel mysql-server gcc-c++ perl-DBI openssl-devel perl-DBD-Mysql glibc-devel libgomp libstdc++-devel krb5-devel zlib-devel glibc-headers e2fsprogs-devel php php-gettext php-pear qt4 qt4-devel wxGTK qwt-devel qwt
# wget http://downloads.sourceforge.net/project/bacula/rpms-contrib-fschwarz/2.4.2/bacula-bat-2.4.2-1.el5.x86_64.rpm
# wget http://downloads.sourceforge.net/project/bacula/rpms-contrib-fschwarz/2.4.2/bacula-gconsole-2.4.2-1.el5.x86_64.rpm
# wget http://downloads.sourceforge.net/project/bacula/rpms-contrib-fschwarz/2.4.2/bacula-mtx-2.4.2-1.el5.x86_64.rpm
# wget http://sourceforge.net/projects/bacula/files/rpms-contrib-fschwarz/2.4.2/bacula-mysql-2.4.2-1.el5.x86_64.rpm
書き込むディスクに権限を付加しておく。
# mkdir /disk/1/bacula
# chmod 666 /disk/1/bacula
belle (fd)
CentOS 5.3 32bitなのでそれに適したものをインストールする。
# wget http://downloads.sourceforge.net/bacula/bacula-client-2.4.2-1.el5.i386.rpm
client1 (fd)
windows XPなのでそれに適したものをインストールする。
以下を参考に。
Baculaクライアントのインストール
http://www.bacula.jp/kouchiku-nyumon/windows-client.html
ディレクタの情報など求められるので入力してインストールを進める。
1つ注意が必要なのが、
Tray-Monitorは不要なので入力しない → まんま空白でbacula-fd.confが生成される → エラー → サービスが立ち上がらない!
となるということ。
手動でbacula-fd.confを編集して当該部分を修正する必要がある。
bconsole
どのマシンからでもいいので、
# bconsole
とすればコンソールに入ることができる。
いろいろなコマンドが実行できて、
とりあえず全部のステータスを見る
* status all
ジョブを走らせる
* run 1
これでalice_jobが始まる。
ひととおりjobを走らせて問題が無いようなら構築は完了。素晴らしいバックアップ環境が手に入った。
その他のコマンドなど、詳しくはマニュアルを参照のこと。
Bacula Console
http://www.bacula.org/en/dev-manual/Bacula_Console.html
BAT
もしくはBacula Admin Toolで管理をする。
# vi /etc/bacula/bat.conf
Director { Name = chris-dir DIRport = 9101 address = chris Password = "CHRIS_DIR_PASSWORD" }
GUI画面で「アプリケーション」→「システムツール」「Bacula Admin Tool」で起動する。
総合的な管理ツールで、リストアはこれでやるのが一番わかりやすい。
テストも兼ねて、リストア動作の確認をしておくことをお勧めする。
サーバをリプレイスしたときのメモ1 ntfsからext3へ
http://d.hatena.ne.jp/ruby-U/20090728/1248721117
サーバをリプレイスしたときのメモ2 xenの上に最小のCentOS 5.3をインストールする
http://d.hatena.ne.jp/ruby-U/20090729/1248760935
サーバをリプレイスしたときのメモ3 xenの上にwindows 2000をインストールする
http://d.hatena.ne.jp/ruby-U/20090730/1248760993
サーバをリプレイスしたときのメモ4 sambaをインストール、パフォーマンスを最適化する
http://d.hatena.ne.jp/ruby-U/20090731/1248761382
サーバをリプレイスしたときのメモ5 CentOS 5.3のtips(Domain-0, Domain-U 問わず)
http://d.hatena.ne.jp/ruby-U/20090801/1248766003
サーバをリプレイスしたときのメモ6 baculaの設定と運用
http://d.hatena.ne.jp/ruby-U/20090802/1248774098