最近Baculaというミドルウェアを構築することがあり、備忘録も兼ねて記事を投稿することにしました。
構築環境##
バックアップサーバー:CentOS Linux release 7.2.1511 (Core)
バックアップ対象サーバー:WindowsServer2016
ミドルウェア:bacula-9.6.6
Baculaインストール##
始めにOSのアップデートを行います。
(一度アップデートせずにインストールを行ったところ古いバージョンがインストールされてしまったので念のため行っています)
yum update
続いてcdコマンドで/etc/yum.repos.d/に移動し、リポジトリの追加を行います。
wget https://copr.fedorainfracloud.org/coprs/slaanesh/Bacula/repo/epel-7/slaanesh-Bacula-epel-7.repo
baculaをインストールします。baculaには3つのデーモンがあるのでこれらのインストール及びコンソールとDBのインストールを行います。
ざっくりとしたデーモンの構成を下図に貼っておくので参考にしてみてください。

yum -y install bacula-deirector bacula-client bacula-storage bacula-console mariadb-server
インストール後は念のためrpmコマンドで適切なバージョンがインストールされているのか確認しておくと良いです。
rpm -qa | grep bacula
bacula-director-9.6.6-1.e17.x86_64
bacula-libs-9.6.6-1.e17.x86_64
bacula-libs-sql-9.6.6-1.e17.x86_64
bacula-storage-9.6.6-1.e17.x86_64
bacula-console-9.6.6-1.e17.x86_64
bacula-common-9.6.6-1.e17.x86_64
bacula-client-9.6.6-1.e17.x86_64
MariaDBの設定##
MariaDBを起動し、初期化を行います。
systemctl start mariadb
mysql_secure_installation
初期化を行うとパスワードの設定について聞かれるので「y」を押して、パスワードを設定します。
Set root password? [Y/n] y
New passwprd:任意のパスワード(今回はdbpass)
パスワード設定後にもいくつか聞かれますが基本的に「y」を押してもらって大丈夫です。
MariaDBにログインしします。ログインの際にパスワードを聞かれるので設定したパスワード(dbpass)を入力します。
mysql -u root p
bacula用のDBとユーザーを作成します。ユーザーの権限について今回は【with grant option】を付与しています。今回の記事では紹介しませんが、baculaにはGUIコンソールとしてbaculumというものがあり、baculumとMariaDBをAPI連携させるときにこの権限が必要となるためです。作成後は「quit」でログアウトしておきます。
create database bacula;
grant all privileges on bacula.* to bacula@localhost identified by 'dbpass' WITH GRANT OPTION;
quit
続いてbaculaが使用するDBを変更します。デフォルトではPostgreSQLが選択されているため「1」を入力しMysqlに変更します。
alternatives --config libbaccats.so
3 プログラムがあり 'libbaccats.so' を提供します。
選択 コマンド
-----------------------------------------------
1 /usr/lib64/libbaccats-mysql.so
2 /usr/lib64/libbaccats-sqlite3.so
*+ 3 /usr/lib64/libbaccats-postgresql.so
Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:1
Baculaの権限変更##
Baculaの設定ファイルを編集する前にファイルの権限を変更しておきます。
権限を適切に付与していないとbconsoleから接続できなくなります。
ls -l /etc/bacula
合計 36
-rw-rw-rw- 1 root bacula 10190 11月 19 15:34 bacula-dir.conf
-rw-rw-rw- 1 root root 1055 11月 19 10:57 bacula-fd.conf
-rw-rw-rw- 1 root root 9818 11月 19 10:52 bacula-sd.conf
-rw-rw-rw- 1 root root 243 11月 19 11:41 bconsole.conf
-rw-r----- 1 root bacula 312 10月 7 23:42 query.sql
chmod 755 /etc/bacula
chmod 640 /etc/bacula/*
bacula-dir.confの設定##
続いてbacula構築がうまくいかない原因No.1のbacula-dir.confの設定を行います。ここでは各パスワードと名前がどのように他デーモンと連携しているのか理解しておくと構築がスムーズに進むと思います。こちらもざっくりとした関係図を載せておきます。
viエディタでbacula-dir.confを開きます。今回の記事では変更が必要な項目のみ説明をしていくので、説明がない項目については基本的には触る必要はないです。パスワードについては上図のように設定をするので割愛します。
まずはJobのひな型となるJobDefsリソースについてです。
ここではコンソールからジョブを選択する際ににデフォルトで選択されている値を設定することができます。
各値について
JobDefs {
Name = "DefaultJob"
Type = Backup
Level = Full
Client = bacula-fd
FileSet = "Full Set"
Schedule = "WeeklyCycle"
Storage = File1
Messages = Standard
Pool = File
SpoolAttributes = yes
Priority = 10
Write Bootstrap = "/var/spool/bacula/%c.bsr"
}
続いてJobリソースについてです。バックアップ対象機の台数分作成する必要があります。
各値について
Job {
Name = "WinSV2016"
Client = bacula-fd
JobDefs = "DefaultJob"
}
続いてFileSetリソースを確認します。
こちらはバックアップ対象となるディレクトリを指定するリソースです。
各値について
# List of files to be backed up
FileSet {
Name = "Full Set"
Include {
Options {
signature = MD5
Compression=GZIP
}
File = "C:/Users/bk"
}
#
# If you backup the root directory, the following two excluded
# files can be useful
#
Exclude {
}
}
続いてScheduleリソースをみていきます。こちらは自動でバックアップを行う際のスケジュールを設定できるリソースです。
今回は月曜日から日曜日の18時30分にバックアップをとるように設定しています。
隔週や曜日指定も可能ですので必要に応じて値を変更してみてください。
# When to do the backups, full backup on first sunday of the month,
# differential (i.e. incremental since full) every other sunday,
# and incremental backups other days
Schedule {
Name = "WeeklyCycle"
Run = Full mon-sun at 18:30
}
次はClientリソースです。こちらで設定した値が誤っていた場合バックアップ対象機と疎通がとれなくなりますので注意が必要です。
各値について
# Client (File Services) to backup
Client {
Name = bacula-fd
Address = 192.168.10.1
FDPort = 9102
Catalog = MyCatalog
Password = "client-pass" # password for FileDaemon
File Retention = 60 days # 60 days
Job Retention = 6 months # six months
AutoPrune = yes # Prune expired Jobs/Files
}
続いてbaculaのバージョンによってリソース名が変わるAutochangerリソースです。
古いバージョンだとこの名前がStorageだったりします。リソースとしての機能はほとんど同じですので名前が違うんだな~くらいで認識いただければ。。
Autochangerではどのデバイスを使用するのか設定ができるのですが、デフォルトでは2つのデバイスを目的に応じて切り替えながらバックアップを行うような設定になっています。baculaになれるまではごちゃごちゃしてしまうので今回は1つのデバイスだけ使用するように設定します。
各値について
# Definition of file Virtual Autochanger device
Autochanger {
Name = File1
# Do not use "localhost" here
Address = 192.168.10.2 # N.B. Use a fully qualified name here
SDPort = 9103
Password = "bstr-pass"
Device = BaculaStorage
Media Type = File1
Maximum Concurrent Jobs = 10 # run up to 10 jobs a the same time
Autochanger = File1 # point to ourself
}
デフォルトだと2つめのAutochangerリソースも有効になっていますが、今回は使用しないので「#」でコメントアウトしておきます。
# Definition of a second file Virtual Autochanger device
# Possibly pointing to a different disk drive
# Autochanger {
# Name = File2
# Do not use "localhost" here
# Address = localhost # N.B. Use a fully qualified name here
# SDPort = 9103
# Password = "@@SD_PASSWORD@@"
# Device = FileChgr2
# Media Type = File2
# Autochanger = File2 # point to ourself
# Maximum Concurrent Jobs = 10 # run up to 10 jobs a the same time
# }
続いてCatalogリソースです。このリソースは使用するDBの情報を設定する場所です。
各値について
# Generic catalog service
Catalog {
Name = MyCatalog
dbname = "bacula"; dbuser = "bacula"; dbpassword = "dbpass"
}
bacula-dir.conf最後はConsoleリソースです。こちらはTray-Monitorでbacula-dirに接続する際に必要なリソースです。
# Restricted console used by tray-monitor to get the status of the director
Console {
Name = bacula-mon
Password = "bcon-pass"
CommandACL = status, .status
}
以上でbacula-dir.confの設定は終了です。
bacula-sd.confの設定##
viエディタでbacula-sd.confを開きます。まずはAutochangerリソースを設定します。
各値について
# Define a Virtual autochanger
#
Autochanger {
Name = File1
Device = BaculaStorage
Changer Command = ""
Changer Device = /dev/null
}
続いてDeviceリソースです。
各値について
Device {
Name = BaculaStorage
Media Type = File1
Archive Device = 任意のデバイス
LabelMedia = yes; # lets Bacula label unlabeled media
Random Access = Yes;
AutomaticMount = yes; # when device opened, read it
RemovableMedia = no;
AlwaysOpen = no;
Maximum Concurrent Jobs = 5
}
今回はデイバスを切り替えないので、bacula-sd.confの2つめ以降のDeviceリソースやAutochangerリソースは「#」でコメントアウトしておきます。
以上でbacula-sd.confの設定は終了です。
bacula-fd.confの設定##
これまでの操作でbacula-fdデーモンはバックアップサーバーにはインストールされていますが、バックアップ対象機にはインストールされていません。そのため対象となるサーバーにインストールする必要があります。
バックアップ対象機で下記のサイトにアクセスします。アクセスしたらバックアップサーバーにインストールしたBaculaのバージョンと同じ、もしくは低いバージョンのBinariesをインストールします。
Bacula Windows Binaries
https://www.bacula.org/binary-download-center/

インストール後、下図のウィンドウが表示されます。【Next】を押したら次の画面で規約への同意が求められるので同意します。
同意後、インストールのタイプを選択する画面が表示されますのでAutomaticにチェックが入っていることを確認し、【Next】を押します。
その後、インストールしたコンポーネントについて聞かれますのでServerにチェックが入っていないことを確認し、【Next】を押します。
続いてbacula-dirについて聞かれますのでので設定した値を入力します。今回の場合は「bacula-dir」、「bdir-pass」、「192.168.10.2」を入力することになります。
入力後に【Install】を押したらバックアップ対象機へのインストールは完了です。
WindowsServer2016の場合はインストールしたファイルはローカルディスク→Program Files→Baculaの中に入っています。Baculaフォルダの中にbacula-fd.confがあるので開き、FileDaemonリソースを確認します。
各値について
# "Global" File daemon configuration specifications
#
FileDaemon { # this is me
Name = bacula-fd
FDport = 9102 # where we listen for the director
WorkingDirectory = /var/spool/bacula
Pid Directory = /var/run
Maximum Concurrent Jobs = 20
Plugin Directory = /usr/lib64/bacula
}
FileDaemon及びDirectorリソースを設定したら再起動し、バックアップ対象機での設定は終了です。
バックアップの実施##
今回はBaculumをインストールしないのでCUIコンソールであるbconsoleを使用して実施していきます。
bconsoleの起動は「bconsole」コマンドで行います。起動後は「run」を入力し、ジョブ選択で「1」を選択します。
bconsole
Connecting to Director localhost:9101
1000 OK: 103 bacula-dir Version: 9.6.6 (20 September 2020)
Enter a period to cancel a command.
*run
Automatically selected Catalog: MyCatalog
Using Catalog "MyCatalog"
A job name must be specified.
The defined Job resources are:
1: WinSV2016
2: BackupCatalog
3: RestoreFiles
Select Job resource (1-3): 1
ジョブを選択後、ジョブの詳細が表示されます。変更したい場合には「mod」を入力すればジョブの変更が可能です。ジョブ実行の際は「y」入力でジョブの実行とJobIdの発行が行われます。
Run Backup job
JobName: WinSV2016
Level: Full
Client: bacula-fd
FileSet: Full Set
Pool: File (From Job resource)
Storage: File1 (From Job resource)
When: 2020-11-24 11:50:35
Priority: 10
OK to run? (yes/mod/no): y
Job queued. JobId=83
You have messages.
ジョブの状態を確認する際は、「status」コマンドを入力します。ジョブの状態確認は「1」のDirectorを入力します。2のクライアントを選択すると、bconsoleを介したクライアントとの疎通確認ができます。
*status
Status available for:
1: Director
2: Storage
3: Client
4: Scheduled
5: Network
6: All
Select daemon type for status (1-6): 1
Directorを選択すると、runningのジョブや完了したジョブの一覧が表示されます。日付は文字化けすることが多いのですが、特に問題はありません。
bacula-dir Version: 9.6.6 (20 September 2020) x86_64-redhat-linux-gnu redhat (Core)
Daemon started 24-11羃020 11:08, conf reloaded 24-11月-2020 11:08:42
Jobs: run=1, running=0 mode=0,0
Heap: heap=208,896 smbytes=124,882 max_bytes=1,279,526 bufs=454 max_bufs=584
Res: njobs=7 nclients=5 nstores=1 npools=3 ncats=1 nfsets=3 nscheds=2
Scheduled Jobs:
Level Type Pri Scheduled Job Name Volume
===================================================================================
Full Backup 10 24-11羃020 18:30 WinSV2016 Vol-0001
====
Running Jobs:
Console connected at 24-11羃020 11:49
No Jobs running.
====
Terminated Jobs:
JobId Level Files Bytes Status Finished Name
====================================================================
83 Full 3 26 OK 24-11羃020 11:51 WinSV2016
====
以上でバックアップは終了です。
リストアの実施##
リストアに関してもバックアップと同じような流れで実施していきます。リストアの際は「restore」コマンドで行います。コマンドを入力すると、リストアする対象を検索する方法が12個提示されます。今回は最新のバックアップをリストアするため、「5」を選択します。
*restore
Using Catalog "MyCatalog"
First you select one or more JobIds that contain files
to be restored. You will be presented several methods
of specifying the JobIds. Then you will be allowed to
select which files from those JobIds are to be restored.
To select the JobIds, you have the following choices:
1: List last 20 Jobs run
2: List Jobs where a given File is saved
3: Enter list of comma separated JobIds to select
4: Enter SQL list command
5: Select the most recent backup for a client
6: Select backup for a client before a specified time
7: Enter a list of files to restore
8: Enter a list of files to restore before a specified time
9: Find the JobIds of the most recent backup for a client
10: Find the JobIds for a backup for a client before a specified time
11: Enter a list of directories to restore for found JobIds
12: Select full restore to a specified Job date
13: Cancel
Select item: (1-13): 5
続いて、バックアップ対象機の選択とFileSetの選択を行います。
Defined Clients:
1: bacula-fd
Select the Client (1-5): 1
The defined FileSet resources are:
1: Catalog
2: Full Set
Select FileSet resource (1-2): 2
FileSetを選択すると下記のように表示されますので、JobIdを入力します。
すると、リストアを行うファイルの選択画面に移ります。今回はC:/users/bkディレクトリのバックアップを行いました。そのため、この状態でlsコマンドを使用するとCドライブが見えます。
+-------+-------+----------+----------+---------------------+------------+
| JobId | Level | JobFiles | JobBytes | StartTime | VolumeName |
+-------+-------+----------+----------+---------------------+------------+
| 83 | F | 2 | 26 | 2020-11-24 11:51:14 | Vol-0001 |
+-------+-------+----------+----------+---------------------+------------+
You have selected the following JobId: 83
Building directory tree for JobId(s) 83 ...
1 files inserted into the tree.
You are now entering file selection mode where you add (mark) and
remove (unmark) files to be restored. No files are initially added, unless
you used the "all" keyword on the command line.
Enter "done" to leave this mode.
cwd is: /
$ ls
C:/
C:/users/bkディレクトリの中に移動後、再度lsコマンドを使用するとリストアしたいファイルであるbk.txtがあることが確認できます。
$ cd C:/Users/bk
cwd is: C:/Users/bk/
$ ls
bk.txt
bk.txtをリストア対象に設定するためには「mark」コマンドを使用します。選択が終わったらdoneを入力します。
$ mark bk.txt
1 file marked.
$ done
リストアの確認画面が表示されます。
Bootstrap records written to /var/spool/bacula/bacula-dir.restore.1.bsr
The Job will require the following (*=>InChanger):
Volume(s) Storage(s) SD Device(s)
===========================================================================
Vol-0001 File1 BaculaStorage
Volumes marked with "*" are in the Autochanger.
1 file selected to be restored.
Run Restore job
JobName: RestoreFiles
Bootstrap: /var/spool/bacula/bacula-dir.restore.1.bsr
Where: /tmp/bacula-restores
Replace: Always
FileSet: Full Set
Backup Client: bacula-fd
Restore Client: bacula-fd
Storage: File1
When: 2020-11-24 11:54:17
Catalog: MyCatalog
Priority: 10
Plugin Options: *None*
OK to run? (yes/mod/no):
yesを入力するとリストアが実行されます。
OK to run? (yes/mod/no): y
Job queued. JobId=84
なお、ファイルを元の場所に戻したい場合には、modから「Where」を選択し、「/」を入力すると元の場所にリストアできます。
実行結果についてはバックアップと同様に、statusコマンドで確認することができます。
以上でリストアの手順は終了です。
これでBaculaの構築は完了です!日本よりも海外でより使われているMWみたいですが、日本語のGUIで操作もできるので比較的使いやすいんじゃないかなと思います。
GUIであるBaculumについてはまたそのうち記事あげるかもしれないです。