はじめに
これまでの連載で、LinuxならびにWindowsのバックアップについて説明してきました。バックアップはデータの損失・破損に備えて行うものですので、今回は、バックアップしたデータのリストアに焦点をあてます。
今回は次の内容を解説します。
- バックアップの種類
- リストアの手法
- bconsoleを使ったリストア
- 別マシンへのリストア
バックアップの種類
すでに第1回で説明しましたが、主なバックアップの種類について復習します。Baculaでは、bacula-dir.confのJobリソースにあるLevelディレクティブにバックアップの種類を指定します。実際の設定については、第4回を参照してください。
フルバックアップ
バックアップ対象のファイルをすべてバックアップします。定期的にバックアップを行う場合、最初は必ずフルバックアップとなります。リストアは基本的にフルバックアップを行った世代を起点として行うため、定期的にフルバックアップすることを推奨します。
- メリット:リストアの手順が減ります。
- デメリット:データ量が多いと、バックアップに時間がかかります。保存先のデバイスも容量が大きいものが必要になります。
増分バックアップ
前回実施したバックアップから、追加、変更が発生したファイルをバックアップします。
- メリット:すべてのファイルをバックアップするわけではないので、保存先のデバイス容量は他のバックアップ方式に比べて小さくて済みます。
- デメリット:ディレクトリごとリストアするような場合、リストアを複数回行う必要があります。図2の場合、4回のリストアが必要です。
差分バックアップ
直近に行われたフルバックアップから、追加、変更が発生したファイルをバックアップします。
- メリット:増分バックアップに比べると、リストアの回数が減ります。最大2回で済みます。
- デメリット:バックアップする度に重複してバックアップするファイルが増えるので、保存先のデバイス容量が大きくなります。
混合バックアップ
図4を見ると、差分バックアップと増分バックアップそれぞれの特徴がわかりやすいでしょう。実用的ではないかもしれませんが、バックアップのジョブ設定によっては、このように混合させることも可能です。
リストアの手法
差分バックアップや増分バックアップを使用している場合、新規追加や変更があったファイルのみバックアップされるため、複数回リストアを行う場合があります。
以下の例を元に説明します。
Bacula-testというディレクトリ下に、test1.txt、test2.txt、test3.txt、test4.txt というテキストファイルがあり、それぞれ作成、変更した日が異なります。
バックアップは1日に1回実施しており、最初のフルバックアップを除き、増分バックアップを実施したものとしています。
任意のファイルのみリストア
任意のファイルのみリストアする場合、リストアしたいファイルがあるバックアップ世代からリストアします。
以下の例図は、増分バックアップ3からtest4.txtファイルをリストアしたものです。増分バックアップ3では、バックアップ対象がtest4.txtのみです。他のファイルは、他のバックアップ世代からリストアする必要があります。
ディレクトリ内のファイルを完全リストア
では、ディレクトリ内のファイルを完全リストアしたい場合はどうでしょう。それぞれのファイルはバックアップの世代が異なっています。元に戻す場合には、バックアップ群ごとにリストアしなければいけません。
バックアップ群とは、フルバックアップから次のフルバックアップまでのバックアップのグループのことを言います。
複数のファイルを復元したい場合、対象のバックアップ群からリストアを行います。概念的には、フルバックアップから順番に戻していくことがセオリーですが、Baculaは一度のリストア処理で復元可能です。
次でBaculaの管理ツールbconsoleを使用したリストア方法を説明します。
bconsoleを利用したリストア
bconsoleはBaculaのCUI形式の管理ツールです。baculumのようなGUIも内部ではbconsoleを使用しています。GUIの操作については第3回で行っているので、そちらを参照してください。bconsoleのリストアには様々な手法があります。よく利用すると思われる箇所について説明します。
リストアの各項目
bconsoleを起動します。
restoreを入力します。13の項目がでてきます。
各項目は、以下の内容となっています。実際のリストア実行だけではなく、リストアをする際に役立つ情報を表示する項目もあります。そのときに適したものを選択していきます。
- 1: List last 20 Jobs run
- 直近の20個のバックアップジョブを一覧で表示します。
- 2: List Jobs where a given File is saved
- 任意のファイルがどのジョブでバックアップされたのか一覧で表示します。
- 3: Enter list of comma separated JobIds to select
- 指定したバックアップのjobidからリストアします。
- 4: Enter SQL list command
- SQLコマンドを使用し、Baculaで使用しているDBを操作します。
- 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
- JobIdからリストアするディレクトリを入力し、リストアを行います。
- 12: Select full restore to a specified Job date
- 指定したJobIdに関連するバックアップ群からリストアします。
- 13: Cancel
- 処理をキャンセルします。
日付の入力
選択した項目によっては、日時を入力することがあります。日時形式は、YYYY-MM-DD HH:MM:SS形式(年-月-日 時:分:秒)です。
リストア対象の選択
選択したリストア項目によっては、指定したJobIdのバックアップの中からリストア対象のファイルを入力します。
Baculaはディレクトリを含めてバックアップを行うため、リストア対象を選択する場合には、そのディレクトリ下にあるファイルを指定する必要があります。
cdコマンドやlsコマンドを利用し、バックアップされたディレクトリを移動して、リストア対象のファイルのある場所まで行きます。
markコマンド、もしくはaddコマンドを使ってリストア対象のファイルを選びます。両方とも同じ動きをするので、どちらを使用しても構いません。
markコマンドやaddコマンドは、「*(半角アスタリスク)」や「?(半角疑問符)」といったワイルドカードを使用することもできます。
ただし、ワイルドカードは直下のディレクトリにのみ対応しており、さらに下の階層で使用するとエラーとなります。
指定したファイルの一覧を表示するには、lsmarkコマンドを使います。
これらを繰り返してリストア対象を選び終えたら、doneコマンドでファイルの指定を終了します。
リストアのジョブ設定の変更
bconsoleを使用したリストアでは、リストアのジョブ設定項目が出てきます。modを入力することで実行するジョブの内容を変更することができます。
- 1: Level
- 仕様上表示してありますが、リストアでは変更できません。
- 2: Storage
- データの保存先を指定します。
- 3: Job
- 仕様上表示してありますが、絶対に変更しないでください。リストアに失敗します。
- 4: FileSet
- 仕様上表示してありますが、リストアでは使用しません。
- 5: Restore Client
- 復元先のクライアントを指定します。Backup Clientとは別のクライアントを指定することで、別マシンへのリストアが可能となります。
- 6: When
- 実行日時を指定します。過去日付を指定した場合、即時実行されます。
- 7: Priority
- 優先度合いを指定します。
- 8: Bootstrap
- リストアに関する情報が書かれたファイルです。
- 9: Where
- 復元先のディレクトリパスを指定します。10番のFile Relocationと同時使用はできません。
- 10: File Relocation
- 復元ファイルのパスやファイル名を変更します。9番のWhereとの同時使用はできません。
- 1: Strip prefix:復元もとのパスを取り除きます。
- 2: Add prefix:リストア対象の前につけるディレクトリを指定します。
- 3: Add file suffix:リストア対象のファイル名の後ろに付与する任意の文字を指定します。
- 4: Enter a regexp:正規表現を使い、変更します。
- 5: Test filename manipulation:設定した内容を確認します。
- 6: Use this ?:設定を完了します。
- 11: Replace
- 復元先のディレクトリに同一名のファイルがあった場合、どのような動きをするかを指定します。
- 1: Always:常に上書きします。
- 2: IfNewer:復元もとのファイルが新しければ、上書きします。
- 3: IfOlder:復元先のファイルが新しければ、上書きします。
- 4: Never:上書きしません。
- 12: JobId
- 仕様上表示してありますが、リストアでは変更できません。
- 13: Plugin Options
- プラグイン用のオプションです。コミュニティ版では使用しません。
利用シーンに応じたリストア方法
今までの連載でバックアップしたファイルを、別のマシンにリストアします。いくつかの利用シーンを想定したリストア方法を紹介します。bconsoleの起動とrestoreの入力は3.1にて行っているため省略します。
事前準備
今までの連載でバックアップしたファイルを、別のマシンにリストアします。復元先のマシンを用意します。
Baculaのパッケージは、第2回を参考にbacula-client、bacula-common、bacula-libsをインストールしてください。
Linux | CentOS7.3 |
IPアドレス | 192.168.2.4 |
Baculaパッケージ | 7.4.4 |
Bacula Client Name | bacula-fd2 |
Baculaは以下のポートで通信を行います。Firewallなど通信をブロックするものは設定を変更してください。
ポート番号 | 利用目的 |
9102(TCP) | ファイルデーモン通信用 |
復元対象ファイルを探してリストアを行う
実際にリストアを行おうとすると、どこに最適な復元対象ファイルがあるかわからないものです。そのような場合には、復元対象のファイルを探してからリストアを行います。
*bconsoleの起動とrestoreの入力は省略し、リストアの項目から行います。
リストの2を選択します。
バックアップを行ったクライアントを選択します。
以下の例では3のbacula-win-fdを選択します。
復元したいファイル名を入力します。このとき、パスは必要ありません。入力後、対象のファイル名とバックアップされたジョブの一覧が出力されます。
つづいて、3を選択します。
リストアしたいJobIdを入力します。今回の例では、170を入力します。
cdコマンドを使い、バックアップファイルのディレクトリを移動します。以下の例では、リストア対象のファイルtest2.txtのあるところまで移動しています。
リストア対象のファイルをmarkコマンドでリストア対象にします。
lsmarkコマンドで、リストア対象のファイル一覧を表示します。
doneを入力すると、リストア対象ファイルの指定は完了です。
リストア設定の内容が表示されます。
変更がある場合は、modを入力します。
この例では、5を選択します。復元先を4.1で準備したクライアントbacula-fd2に変更します。
変更後の設定内容が表示されるので、確認してください。
この設定内容で問題なければ、yesと入力します。すると、リストアが実行されます。
直近のバックアップ群からリストアを行う
一番多いリストアは、直近に実行したバックアップ群からのリストアだと思います。そのような場合には、5を選択します。
*bconsoleの起動とrestoreの入力は省略し、リストアの項目から行っています。
バックアップを行ったクライアントを選択します。
ここでは3のbasula-win-fdを選択します。
直近のバックアップ群の一覧が表示されます。
cdコマンドやlsコマンドでバックアップ群のすべてのファイルを確認できます。
markコマンド、もしくはaddコマンドでリストア対象となるファイルを選択し、ファイル選択を終了します。
リストアジョブの設定内容が表示されます。
編集する場合は、modを入力します。今回は、復元先を変更するので、5を選択します。
復元先を4.1で準備したクライアントbacula-fd2にします。
設定内容を確認し、変更がなければyesを入力します。これでリストアが実施されます。
リストアの確認
リストアの確認は、実際に復元ファイルを確認するのが一番良いのですが、bconsole上でもリストアの成功、失敗を確認できます。
statusでリストア先のクライアントを選択すると、バックアップやリストアといったジョブ一覧が表示されます。
list joblog jobid=ジョブIDで、指定したジョブのログが出力されます。以下は、222番のjobidの出力結果です。
Accurateについて
バックアップのJobディレクティブには「Accurate」というオプションがあります。このオプションを有効にして増分/差分バックアップを行うと、削除や、ファイル名を変更したファイルは、リストア時にバックアップ群の中でマージされます。
たとえば、「test1.txt」というファイルを「test1-bk.txt」とリネームしたとします。Accurateが無効の場合、リストアの対象ファイルとしてバックアップ群のファイル「test1.txt」「test1-bk.txt」の両方が表示され、両方共リストアできます。Accurateが有効の場合、リストア「test1-bk.txt」とマージされて表示されます。
例を見てみましょう。以下のようにファイルを変更したあと、増分バックアップを行います。4.3で紹介した、直近のバックアップ群からリストアする際に、違いがよくわかります。
- ファイル名変更:test1.txt → test1-bk.txt
- ファイル削除:test3.txt
バックアップ群のすべてのファイルが表示されるため、削除したファイルやファイル名を変更前のファイルも表示されます。
マージされて表示されます。
Accurateオプションの初期値は無効となっています。有効にした場合、バックアップ対象のメモリを多く消費するため、注意が必要です。
bconsoleは慣れれば使い勝手がよいCUIツールです。オープンソース版のGUIツールも、内部ではbconsoleを利用しています。
次回は、Baculaのエンタープライズ版パッケージについて紹介します。