本記事は『実務で役立つ バックアップの教科書 基本の考え方からツール活用・差分管理・世代管理・データ保全・リストア・リカバリー・可用性の確保まで』(著者:増井敏克)の「3-1 システム全体のバックアップ」から抜粋したものです。掲載にあたって編集しています。
常に変わるデータのバックアップを確実に取得する
バックアップを取得するときに問題になるのは、バックアップを取得している最中にデータの内容が変わってしまうことです。バックアップの取得には時間がかかるため、その間に誰かがデータを書き換える可能性があります。
利用者が操作をしなければ変わらないデータもありますが、システムが稼働している間には、利用者が操作をしなくてもコンピュータに保存されているデータは少しずつ変わっています。
その代表的なデータとして、ログがあります。エラー時だけでなく正常時の動作を確認するため、OSやアプリケーションは頻繁にログを出力しています (図1)。

ログが出力される以外にも、Windows Updateのような更新プログラムが自動的に実行されることがあります。このような機能は、利用者が使っていない時間帯に実行されるようにスケジュールされていることが多く、利用者が何も操作をしなくてもシステムが更新されます。これにより、さまざまなファイルが書き換えられます。
ファイルが次々と変更されている最中であろうと、データやアプリケーション、システムの設定内容などを含むシステム全体をバックアップとして取得して、故障や障害などによってデータが失われることを防がなければなりません。
こう聞くと大変に思うかもしれませんが、システム全体やデータベース全体のバックアップを確実に取得する仕組みが確立されています。
具体的には、コールドバックアップとホットバックアップの2つの方法が挙げられます。それぞれにメリットとデメリットがあるため、その違いについて解説します。また、似た仕組みとして、ある時点でのデータを取得しておくスナップショットやレプリケーションといった技術についても触れていきます。
コールドバックアップ
システムを完全に停止した状態で取得するバックアップをコールドバックアップといいます。システムが起動していると、ログが自動的に出力されるなど、ファイルの構成がリアルタイムに変わりますが、システムが停止していればデータは変更されません。
コールドバックアップを使えば、データの一貫性が保たれるだけでなく、「他のアプリケーションがファイルを開いていてアクセスできない」といった競合が発生しないため、バックアップ時にエラーが発生しにくくなります。
システムが停止している状態やネットワークから切断されている状態のことをオフラインというため、コールドバックアップはオフラインバックアップと呼ばれることもあります。なお、取得したバックアップを「ネットワークに接続していない環境に保存すること」を指してオフラインバックアップと呼ぶこともあり、その場合は意味が異なります。言葉の文脈に注意しましょう。
また、データが変わる「動的」という言葉の対義語は「静的(スタティック)」といいますが、「データが変わらない静的なバックアップ」という意味でスタティックバックアップと呼ぶこともあります。
データベースサーバーのコールドバックアップ
コールドバックアップの対象としてよく挙げられるのがデータベースサーバーです。さまざまなアプリケーションにデータベースの機能を提供するサーバーのことで、Webアプリなどで扱うデータを保存するために使われます。
データベースサーバーはLinuxなどのOSの上で動作することが一般的なので、OSは起動した状態です。しかし、データベースサーバーの機能だけを停止してデータベースのバックアップを取得することで、コールドバックアップを実現できます(図2)。

データベースサーバーを止めなくても、データベースへの書き込みさえしなければよいと思うかもしれません。しかし、データベースサーバーは、書き込まれたデータをストレージに記録するだけとは限りません。データを一時的にメモリに記録し、高速に処理できるようにしていることがあります。
その場合、データベースサーバーを停止しないと、メモリ上にあるデータをコピーできないのです。データベースサーバーを停止して、メモリ上のデータをストレージに出力することで、データの漏れがなくなります。また、データベースサーバーそのもののログも出力されないようにできます。
OSや他のサーバーなどは起動しているため、それらのログは出力されますが、データベースサーバーに関するファイルは変更されなくなります。これにより、データベースの稼働に必要なファイルをすべてコピーできます。
システム全体のコールドバックアップ
もう少し複雑なのが、システム全体のコールドバックアップです。つまり、OSそのものを含めてバックアップを取得する方法です。OSも停止している状態を実現しようとすると、コンピュータをシャットダウンして、電源が入っていない状態を作ることが考えられます。
しかし、電源が入っていないと、そもそもデータをコピーする操作すら実行できません。このようなとき、コンピュータの内部ストレージからOSを起動するのではなく、別のOSが入ったDVDなどを使ってコンピュータを起動する方法があります。バックアップ対象のOSが入っている内部ストレージは、DVD側から見ると外部ストレージなので、本体に記録されているOSやアプリケーション、データまですべてまとめてバックアップできます(図3)。

もちろん、コンピュータのケースを開けて内部ストレージを取り出し、他のコンピュータに外部ストレージとして接続する方法も考えられますが、バックアップのたびにコンピュータを開けるのは大変なので、DVDから起動する方が手軽です。
最近では、仮想マシンでOSを稼働させることも増えています。この場合は、仮想マシンを停止させることで、仮想マシンの電源が入っていない状態を作り出せます。そして仮想マシンのデータが入った仮想ディスクをコピーするだけでよいので、OS全体のコールドバックアップも手軽になっています。
コールドバックアップの注意点
システム停止の影響やデータ量
コールドバックアップでは完全なイメージを保存するため、システム全体を確実に復元できますが、コールドバックアップを実施するにはシステムの停止が必要です。停止中は業務が中断するため、頻繁に停止するとビジネスの生産性に影響を与える可能性があります。特に、24時間稼働しているECサイトのように、停止すると売上に大きな影響が出る場合は、この手法を選択できない可能性があります。
また、システム全体のバックアップを取得する作業が、長時間にわたる可能性があります。大規模なシステムや大量のデータを扱う業務では、バックアップするデータが多すぎて処理に時間がかかります。加えて、保存するためのバックアップ媒体の容量を大量に消費します。
タイミング
コールドバックアップを実施する場合は、システムを長時間にわたって停止できるスケジュールを事前に計画しておきます。たとえば、週に1度、日曜日の夜間に実施するなど、業務への影響を最小限にできるよう、タイミングを調整して実施します。
定期的にコールドバックアップを実施しておくことは、災害対策としても有効です。普段から業務を停止できる現場であれば、復旧にかかる停止時間を確保できる可能性があるためです。
その他にも、システムの大規模なアップデートが発生する前に、コールドバックアップを実施するという考え方もあります。更新作業中に何らかの問題が発生した場合でも、迅速に元の状態に戻せるためです。
ホットバックアップ
システムが稼働している状態で取得するバックアップをホットバックアップといいます。システムを停止しなくてもよいため、業務を中断することなくバックアップを取得できます。ECサイトのように24時間体制で稼働が必要なサーバーでは、ホットバックアップしか選択できないこともあります。
システムがオンラインのままでバックアップが実行されるため、オンラインバックアップと呼ばれることもあります。「動的(ダイナミック)」という意味でダイナミックバックアップともいいます。
アプリケーションを稼働しながらリアルタイムでバックアップを取得できるため、最新のデータを保護でき、バックアップを実行するタイミングなどのスケジュールも柔軟に調整できます。
ホットバックアップの注意点
稼働中のシステムと同じコンピュータでバックアップ処理が動作するため、バックアップ処理がシステムの性能に影響を与える可能性があります。特に、大量のデータを保存するときには、システムの応答が遅くなる可能性があります。
また、稼働中のシステムは、バックアップ中にデータを変更される可能性があるため、データの整合性を確保するには少し工夫が必要です。このときに使われるのが、スナップショットやトランザクションログといった技術です。
ホットバックアップで整合性を確保するための技術
スナップショット
システムのある時点での状態をキャプチャする(取り込む)技術です。スナップショットは、実際のデータをコピーするのではありません。「実際のデータを参照するためのデータ」だけを保存するため効率がよく、システムの性能に与える影響を最小限に抑えられます。詳しくは次の項で解説します。
トランザクションログ
データベースの変更履歴が記録されているものです。データベースのホットバックアップを実行した後でトランザクションログを使うことで、バックアップ中に発生した変更も含めて最新のデータを復元できます。
こういった複数の技術を組み合わせてバックアップを取得するため、その管理は複雑です。データベースやアプリケーションの種類に応じて、バックアップに使うツールを選択し、設定を見直す必要があります。
スナップショット
日常の何気ない瞬間を切り取った写真を「スナップ写真」と呼ぶことがあります。これは、撮影される側が準備して撮影された「ポートレート写真」と比べて、素早く撮影されたものを指します。
同じように、バックアップにおけるスナップショットは、ある時点のデータを素早く切り出したものを指します。データそのものをコピーすると時間がかかるため、ストレージに格納されているデータを参照したものだけを保持し、実際のデータはコピーしないのが特徴です(図4)。

この参照の仕組みは、インターネット上での「リンク」をイメージするとよいでしょう。ファイルをコピーせず、リンクを張るだけであれば、データ量は非常に少ないため短時間で作成できます。ただし、ディスクが故障して実際のデータが失われたりすると、データを保持しているわけではないため、スナップショットとして取得したはずのデータも失われます。
スナップショットのメリットと活用場面
一般的なバックアップは、ファイルやディスク全体の完全なコピーを作成しますが、それだけストレージを多く消費します。一方、スナップショットであれば、コピーしないのでデータの重複を避けられ、ストレージを効率よく使えます。また、ディスクの読み込みや書き込みといった負荷が少なく、性能への影響が小さいというメリットもあります。
バックアップからリストアするとき、一般的には全体をコピーする必要があります。しかし、スナップショットから復元する際は、特定の時点を指定して、その状態の参照先である実データに切り替えるだけです。
こうした特徴から、スナップショットを使う目的として、利用者による誤操作などで失われたデータの復元が挙げられます。変更前のデータへの参照が記録されていれば、すぐに復元できます。
スナップショットを支える仕組み
このような仕組みを実現するには、新しいデータが作成されたり、上書きされたりして変更されたときに、その更新前後のデータをストレージ上でどのように管理するのかを考えなければなりません。
一般に、ストレージ上でのデータは「ブロックデータ」と「メタデータ」に分けて管理されており、実データはブロックデータとして記録されています。そして、その実データが記録されている位置などの情報がメタデータとして記録されています。これらをもとにスナップショットを実現する方法として、コピー・オン・ライト方式やリダイレクト・オン・ライト方式があります(図5)。

コピー・オン・ライト(Copy-on-Write)方式
名前のとおり「書き込むときにコピーする」方法です。新しいデータが書き込まれるまでは既存のデータをコピーせず、新しいデータが書き込まれるときに、元のデータを新しい場所にコピーします。
リダイレクト・オン・ライト(Redirect-on-Write)方式
名前のとおり「書き込むときにリダイレクトする」方法です。新しいデータが書き込まれたときに、ブロックデータに追記をして、メタデータの指し示す先を変更します。
レプリケーション
ホットバックアップを実現する方法は、スナップショットだけではありません。他の機器や遠隔地に同じ内容の構成を複製するレプリケーションという技術があります。
レプリケーションの方法として「同期レプリケーション」と「非同期レプリケーション」があります。これらについても、OSを含めたレベルでのレプリケーションと、データベースサーバーなどミドルウェアのレベルでのレプリケーションが考えられます。
レプリケーションのメリットと活用場面
レプリケーションは、ある環境において、登録や更新、削除といった操作が行われたときに、そのデータを他の環境にも反映する技術です。リアルタイムにデータを複製するため、同じデータを持つ環境を複数用意できます。これにより、本番環境で障害などが発生しても、待機環境に切り替えて使えます(図6)。

さらに、複数のサーバーを同時に動作させ、負荷分散装置などで切り替えてアクセスさせることで、特定のサーバーへの負荷を抑える目的で使われることもあります。