オープンソースソフトウェア「Bacula」で安心・安全なバックアップシステムを構築しよう

第1回バックアップシステムの必要性と基本

はじめに

本連載では、オープンソースのバックアップソフトウェア(以下、バックアップソフト⁠⁠、Bacula(バキュラ)を使ってバックアップシステムの構築方法を紹介していきます。BaculaはLiunxの他、Solaris、FreeBSD、NetBSD、Windows、MacOS、HP-UXなど複数のOSに対応し、同時に多数のサーバおよびPCの管理をすることができ、エンタープライズレベルでの使用が可能なソフトウェアです。

メイン開発はスイスで行われ、240万件以上ダウンロードされています。ドイツ、フランス、スペインなどのEU圏のほか、ロシアやブラジルでも非常に人気があります。しかし数少ない日本語情報だけでは設定に手間どるという声もあります。

しかし、Baculaの導入および運用はITエンジニアにとって容易であり、それによって安定したバックアップを行うことができます。本連載を通じて、Baculaの使いやすさを紹介していきます。

本当にバックアップは必要なのか

バックアップは後回しになりがちな作業です。ディスクがRAID(Redundant Arrays of Independent Disks)構成やHA(High Availabirity)クラスタ構成だったり、データベースを冗長化していたりすると、バックアップまでしなくてもよいのではないかと考えてしまいがちです。

他にも、クラウドサービスでサーバを運用している場合、クラウド業者が様々な対策をしているからわざわざバックアップまでしない、なんてケースもあるかもしれません。

そもそもバックアップの必要性はあるのでしょうか?

ディスク障害が発生してもRAID構成なら対応できますし、HA構成ならサーバがハングアップしてデータベースが停止した時も、待機系で稼動させればデータを失うことなくサービスを継続できます。

クラウドサービスは高い可用性(99%以上など)を保証しており、今更バックアップは必要ないと考えてしまいそうです。

では、バックアップが必要な場合とは、一体どのようなケースなのでしょうか?

ケース1 「オペミス」対策

悲しいことに、間違って自ら大事なファイルを消してしまう事があります。

ファイル名を勘違いしたり、ヒストリーを手繰っていて押し間違えたり、理由は様々です。

オペミスではRAIDや冗長化構成でも対応できません。自分でデータを削除しているのですから、ミラーリング先も一緒に消えてしまいます。

オペミス防止のために処理を自動化している場合でも、間違いは起こります。バッチ処理のスクリプトが間違っていたために、多数のサーバのデータをミラーごと消し去ってしまい復旧不可能になったという事例もあります。

オペレーションのミスは少なからず発生するもの。ですから、バックアップは重要なのです。

ケース2 「ランサムウェア」対策

最近はデータを勝手に暗号化・読み取り不能にして、復元するために金銭を要求する「ランサムウェア」が増えています。

ウイルス対策ソフトを導入していても、完全に感染を防ぐことはできません。 オペミスと同様に、RAIDでもクラウドホストでも対処できません。犯罪者にお金を振り込む羽目になるかもしれません。

しかし、たとえランサムウェアによってデータが読み込み不能になっても、バックアップがあれば復旧することができます。

セキュリティ対策の観点でもバックアップが重要です。

サーババックアップの基本

サーバのバックアップはPCのバックアップと異なる点があります。それはバックアップにレベルがあるということです。簡単にポイントを押さえておきましょう。

バックアップの種類

フルバックアップ

言葉通り、バックアップ対象のデータをすべてバックアップします。初回のバックアップは自動的にフルバックアップということになります。

しかし毎回フルバックアップを行っていると、ストレージ容量や、処理能力への負荷がかかります。ネットワーク越しであれば帯域幅への影響もあります。そのため通常、フルバックアップは週〜月に1回程度で運用することが多いでしょう。フルバックアップ以外の日は以下の増分バックアップまたは差分バックアップを行うことになります。

図1 フルバックアップのイメージ
図1 フルバックアップのイメージ
増分バックアップ

増分バックアップは、前回のバックアップ(フルバックアップまたは増分バックアップ)の時点からの変更点だけをバックアップします。

ただし、リストア時にはフルバックアップファイルと、フルバックアップ以降から復帰したい時点までのすべての増分バックアップファイルが必要になります。

図2 増分バックアップのイメージ
図2 増分バックアップのイメージ
差分バックアップ

差分バックアップは、常に前回のフルバックアップ時からの変更点をバックアップします。リストア時には、フルバックアップと、1つの差分バックアップファイルで復元することができます。

図3 差分バックアップのイメージ
図3 差分バックアップのイメージ

Linuxの標準コマンドでバックアップ

Baculaを使用しない方法での、Linuxにおけるバックアップを考えてみます(ここではCentOS7.2を使用します⁠⁠。

cpコマンドでバックアップ

もっとも簡単なバックアップ方法は、ファイルのコピーを行うcpコマンドでしょう。

$ cp <元のファイル> <コピー後のファイル>

ファイル内容の変更を行う前にcpコマンドで元のファイルのコピーを、⁠ファイル.orig」など別の名前で保存しておけば切り戻しやオペミスの時に役立ちます。

実行例
$ cp orig-file copied-file
rsyncコマンドでバックアップ

Linuxでもっと多くのファイルを体系的にバックアップするときにはrsyncコマンドを使うのが一般的でしょう。

rsyncコマンドは、ディレクトリの中身を別のディレクトリと同期することができます。同期元のディレクトリは複数指定することもできます。

-avというオプションは、コピー元のディレクトリを再帰的にオーナー・グループ・パーミッション・タイムスタンプをそのままコピーし、コピー時の詳細を表示するものです。

また、--deleteオプションを付けておくと、2回目以降の同期の際、同期元で削除されたファイルが同期先のディレクトリでも削除されます。

# rsync -av –delete <バックアップ対象ディレクトリ/> <バックアップディレクトリ>

常に最新のデータのバックアップだけが必要であれば、この形式でコマンドを実行すれば十分です。

実行例
# rsync -av -delete target-dir back-dir

しかし、一週間前の状態に戻したい等のニーズに対応したい場合は、バックアップファイルの世代管理を行っておく必要があります。

その場合は、バックアップ時には以下のように取得日の名前のついたバックアップを作成すればよいでしょう。

# rsync -av  <バックアップ対象ディレクトリ/> <バックアップディレクトリ>-`date +%Y%m%d`

上記コマンドを実行すると、例えば<バックアップディレクトリ>がbackdirで、2017年3月1日にバックアップしたなら、backdir-20170301という名前のディレクトリが作成されます。バックアップ対象ファイルはその中に入ります。別の日にバックアップを行えば、その日の日付のディレクトリが作成されます。

実行例
# rsync -av target-dir/ back-dir-`date +%Y%m%d`
図4 バックアップファイルの世代管理術
図4 バックアップファイルの世代管理術

しかし、連日バックアップしていると、ディスクの消費が気になります。そのようなときには--link-destオプションを使います。--link-destオプションを使うと、前回のバックアップから変更があった分だけバックアップします。つまり差分バックアップを行います。変更のない部分はハードリンクだけを作成しますので、ディスク容量が節約できます。ハードリンクは、すべてのハードリンクが削除されるまで実体ファイルが削除されません。このため、前回のバックアップを消してしまっても、その後に取得したバックアップが開けなくなることはありません。

図5 ハードリンクを使ったrsyncの差分バックアップのイメージ
図5 ハードリンクを使ったrsyncの差分バックアップのイメージ
前回までのバックアップ分もバックアップディレクトリに含まれるが、その分はディスクを消費しない。
# rsync -av --delete --link-dest=<バックアップディレクトリ>-`date -d '1day ago' +%Y%m%d` <バックアップ対象ディレクトリ/> <バックアップディレクトリ>-`date +%Y%m%d`

上記のコマンドを実行すると、昨日のバックアップを元にして、新しいバックアップを作成します。新しいバックアップ(例:backdir-20170304)には、昨日のバックアップ(例:backdir-20170303)から変更のあったファイルだけが実際にコピーされます。変更がないファイルはハードリンクが作成されます。

実行例
# rsync -av --delete --link-dest=back-dir-`date -d '1day ago' +%Y%m%d` target-dir/ back-dir-`date +%Y%m%d`

rsyncコマンドには他にもたくさんのオプションがありますので、要件に合わせたバックアップが可能です。またcronを利用すれば日々のバックアップ処理を自動化することも可能です。

バックアップソフトの有用性

rsyncとcronなどを組み合わせれば基本的なバックアップ処理を行うことができます。では、バックアップソフトを使うメリットは何でしょうか。

ランサムウェアのリスクを減らす

ランサムウェアの種類によっては、バックアップを感染サーバからアクセスできる場所(CIFSやNFSでネットワーク共有した領域)で行っていた場合、バックアップ先まで感染してしまうがあります。このようなケースでは、rsyncでNFSサーバにバックアップをしてもランサムウェア対策として不十分です。

図6 ネットワーク共有での感染例
図6 ネットワーク共有での感染例

必要な時にだけ接続するメディアでもバックアップは不可欠であり、クライアント/サーバ型のバックアップソフトを使えば有効な対策になります。必要な時にのみ、独自のプロトコルで通信を行うバックアップソフトウェアを使用すれば、このような危険性を回避することができます(さらに、バックアップメディアにテープを使用すればより安全性が高まります⁠⁠。

図7 必要なときのみバックアップを行うイメージ
図7 必要なときのみバックアップを行うイメージ

複雑な設定を避け、一元管理で運用負担を減らす

バックアップソフトを使う一番大きな目的は利便性です。rsyncで実運用に耐えるバックアップをするためには、バックアップ領域やローテーション設定、スクリプト作成やcron設定など手間がかかります。更に、対象サーバが5台、10台と増えた場合、複雑さも増大、正常動作の検証にもかなりの労力がかかります。中規模以上のシステムではバックアップの全体像を把握することも難しいでしょう。

日々のバックアップを確実かつ効率的に行うために、バックアップ全体を一元的に管理できる利便性の高いツールが必要になってきます。

図8 バックアップの一元管理イメージ
図8 バックアップの一元管理イメージ

金銭負担を減らす

運用負担を減らすために有効な方法は、有償のソフトを購入することが一般的だと思います。

GUI操作ができ、機能が充実したバックアップソフトを使用することが考えられますが、エンタープライズレベルのものは高価であり、金銭負担を考えると導入がむずかしい場合があります。

このような場合は、金銭コストの低いオープンソースソフトの使用を検討してはいかがでしょうか。 エンタープライズレベルの利用に対応したオープンソース・バックアップソフトが、Baculaです。Baculaはライセンス費用がかからず、無償で利用することができます。また私的利用に限定されることなく、企業が商用環境で使用することも問題ありません。

Baculaでできること

Baculaには豊富な機能が用意されています。

基本的な要件に応じたバックアップジョブの作成や、スケジュール作成機能のほか、統計情報の確認も行えます。

また、バックアップにはフル・増分・差分があると前述いたしましたが、Baculaには実際に新たなフルバックアップを行わなくても前回のフルバックアップと差分/増分を合わせた「仮想フルバックアップ」を合成する機能があり、柔軟なバックアップ計画が可能です。

ファイルの保持期間やプールのサイズ制限も行えるので、計画的な運用を行うための設計ができます。

Baculaの機能をご紹介します。

  • 対応バックアップレベル:フル、差分、増分、コンソリデート(仮想フルバックアップ)
  • データフォーマット:カスタム可能で完全にオープン
  • バックアップメディア:ディスク、テープ
  • オートチェンジャーに完全対応
  • 重複排除:ファイルレベル
  • ステージング対応
  • SQLカタログ:内部データベース対応
  • 大量データの制御(10億件以上のターゲットファイル)
  • GUI:あり
  • マルチプラットフォーム対応
  • 改ざん検知:tripwire
  • VSS(ボリュームシャドウコピー⁠⁠ 対応
  • Microsoft Exchange対応
  • レポート作成機能
  • アラート通知機能
  • 増分バックアップでの削除ファイル制御
  • 暗号化(TSL)
  • Microsoft SQL対応

Baculaにはオープンソース版(Bacula Community Edition)の他に、有償版(Bacula Enterprise Edition)があります。このエンタープライズ版にはサポートサービスや追加機能、様々なプラグインが用意されています。

次回からの内容

本連載を通じて、オープンソースソフトウェアでバックアップシステムを構築するため、ご自身で環境を作成し、実際のBaculaを使って理解していけるようにすすめていく予定です。

今後の連載では以下の内容をご説明する予定です。

  • 第2回 Baculaでバックアップをしてみよう
  • 第3回 GUIツールBaculumを使ってバックアップを簡単にする
  • 第4回 Baculaを使いやすくするための設定値解説
  • 第5回 LinuxだけじゃないWindowsのファイルもバックアップ
  • 第6回 忘れてはいけないリストアの手法
  • 第7回 Baculaをもっと活用しよう(Bacula Enterpriseでできること)

おすすめ記事

記事・ニュース一覧