StorageとPoolの関係について

投稿者: | 2016年8月22日

Poolって何ですか?という話を良く聞きます。
今回はStorageとPoolの関係について解説します。

まず簡単な概要図を以下に記載します。
storage_pool
Storageは名前の通りにバックアップデータを保存する物を指します。PoolはStorageの箱を用意して、そこにボリューム単位でデータを保存しています。ボリュームにラベルを付けて名前で管理します。デフォルトではVol-0001から連番になります。
デフォルトの設定値を利用してバックアップを取得している場合は/tmpを確認してみてください。Vol-0001というファイルが存在しているはずです。そのファイルがボリュームになります。

Poolリソース

次に実際の設定値を見ていきましょう。

# File Pool definition
1 Pool {
2   Name = File
3   Pool Type = Backup
4   Recycle = yes                       # Bacula can automatically recycle Volumes
5   AutoPrune = yes                     # Prune expired volumes
6   Volume Retention = 365 days         # one year
7   Maximum Volume Bytes = 50G          # Limit Volume size to something reasonable
8   Maximum Volumes = 100               # Limit number of Volumes in Pool
9   Label Format = "Vol-"               # Auto label
10 }

Poolはbacula-dir.confで設定します。Poolリソースのみ抜粋しました。行数はわかりやすくするために付けています。

2行目でPool名を定義します。デフォルトではFileという名前のPool名が設定されます。
3行目はPoolのタイプを指定します。バックアップ用に使うので「Backup」を指定します。
4行目は再利用を可能にするかを定義します。
5行目は自動的にボリュームを削除するかを定義しています。ボリューム数がMax値を超えた場合に自動的に削除されます。
6行目はボリュームが自動削除される日数を指定します。指定した日数を超えてかつボリューム数がMax値を超えた場合に自動的に削除されます。
7行目最大のボリュームサイズを指定します。指定した容量を超えると新しいボリュームを作成します。
8行目最大のボリューム数を指定します。指定した数を超えると上書き古いものを削除します。
9行目は自動的につけるラベル名を指定しています。ボリュームに対して自動的にラベル(ボリューム名)を付けます。上記の設定だと「Vol-」を先頭に付けて連番に命名します。

ここで注意があります。上記の設定ですと「Volume Retention」を365日に設定しています。ボリュームの自動削除の設定と解説をしましたが、逆を言うと365日経過しないとボリュームが削除されません。仮に50GBのボリューム100個が1年以内に一杯になってしまうとBaculaはバックアップができなくなります。
そのため、Maximum Volume Bytes、Maximum Volume、Volume Retentionは環境に合わせて設定する必要があります。

ですが容量が足らなそうになってからMaximum Volume Bytes、Maximum Volume、Volume Retentionを変えることも可能ですのです。

Storageリソース

次にStorageの設定を見ていきましょう。

# Definition of file Virtual Autochanger device
1 Storage {
2   Name = File1
3 # Do not use "localhost" here
4   Address = localhost                # N.B. Use a fully qualified name here
5   SDPort = 9103
6   Password = "@@SD_PASSWORD@@"
7   Device = FileChgr1
8   Media Type = File1
9   Maximum Concurrent Jobs = 10        # run up to 10 jobs a the same time
10 }

Storageもbacula-dir.confで設定します。Storageリソースのみ抜粋しました。行数はわかりやすくするために付けています。

2行目でStorage名を定義します。デフォルトではFile1という名前のStorage名が設定されます。
4行目~6行目はStorageデーモンのIPアドレス、使用ポート、パスワードを設定します。
7行目はDeviceを定義してます。バックアップデータを保存するデバイスの定義です。bacula-sd.confで定義します。
8行目はメディアタイプを定義しています。bacula-sd.confで定義します。
9行目は同時に実行できるJobの数を定義します。

ここでポイントになるのはbacula-sd.confで定義している「Device」と「Media Type」です。

bacula-sd.conf設定

次にbacula-sd.confで定義している「Device」と「Media Type」を見ていきましょう。
「Device = FileChgr1」、「Media Type = File1」で該当する箇所を抜粋します。

Autochanger {
  Name = FileChgr1
  Device = FileChgr1-Dev1, FileChgr1-Dev2
  Changer Command = ""
  Changer Device = /dev/null
}

Device {
  Name = FileChgr1-Dev1
  Media Type = File1
  Archive Device = /tmp
  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
}

Device {
  Name = FileChgr1-Dev2
  Media Type = File1
  Archive Device = /tmp
  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
}

デフォルトの設定値ですでにバックアップを取られている方は「Autochangerなんて使ってないので、ここが該当箇所なわけがない!」と思われるかもしれませんが、ここの設定値を使っています。
デフォルト設定値はAutochangerのフォーマットを使って、/tmpに保存する設定になっています。
実際にテープドライブを使用する場合はArchive Deviceにテープドライブのパスを記載します。

/tmpというのはバックアップ保存場所として適切ではないと思いますので、デフォルトの設定から変更する方が良いかと思います。
ちなみにAutochangerのフォーマットをそのまま使うこともできますが、冗長でわかりにくいので、上記の設定を以下のように設定してすっきりさせることができます。

1 Device {
2   Name = FileChgr1
3   Media Type = File1
4   Archive Device = /backup
5   LabelMedia = yes;                   # lets Bacula label unlabeled media
6   Random Access = Yes;
7   AutomaticMount = yes;               # when device opened, read it
8   RemovableMedia = no;
9   AlwaysOpen = no;
10  Maximum Concurrent Jobs = 10
11 }

上記の設定だけで設定変更前と意味は同じです。

2行目でDevice名を定義します。ここはFileChgr1をそのまま使用しています。
3行目はメディアタイプを指定します。これは任意の名前になります。デフォルトのFile1をそのまま使います。
4行目はバックアップデータの保存場所を指定します。テープメディアなどの場合はパスを記載します。
5行目はラベルメディアであることを設定します。デフォルトの「yes」を使用します。
6行目は保存先がランダムアクセスに設定していることを設定します。デフォルトの「yes」を使用します。
7行目は保存先が自動的にマウントされるか設定します。デフォルトの「yes」を使用します。8行目は保存先がリムーバブルメディアであるか設定します。デフォルトの「no」を使用します。
9行目は保存先がいつでもオープン状態にするか設定します。デフォルトの「no」を使用します。
10行目は同時に実行できるJobの数を定義します。