【図解】スナップショット(シャドウコピー)の仕組み、バックアップとの違い、注意点、VMwareやWindows等での使い方

スナップショットとは

スナップショットは「COW(Copy on Write)」という機能を応用した技術です。

あるタイミングでのファイルシステム上のフォルダ配下、もしくはボリューム全体のビットの状態を写真のように時間軸で切り抜いて保存しておく機能です。

バックアップを取得する際、例えばファイルAとファイルBの一部分は互いに同じ情報を持つ必要があるとします。ファイルAを取得し終わり、ファイルBを取得する前にAとBが更新された場合、バックアップデータとして持っている情報ではAとBで不整合が発生してしまい、うまく復元できない可能性があります

スポンサーリンク

そのため、スナップショットを使い、ある時間でのファイルAとファイルBの状態を写真で取得し、その写真を元にコピーすることで整合性を保つことができます。スナップショットの動作としては以下のようになります。

例えばファイルAとファイルBのスナップショットを撮ると、ファイルA'(ダッシュ)、ファイルB'(ダッシュ)、および、スナップショットキャッシュ(スナップショットの管理領域)が生成されます。ただし、これらは初期状態では情報量を持ちません。ファイルA'は実体は無く、ファイルAへの参照情報のみ持ちます。ファイルB'も同様です。そしてスナップショットキャッシュには、ファイルAやBで情報が更新された際に、その変更分だけ情報が格納されます

そしてスナップショットをサポートしているファイルシステムでは、あるブロック単位(例えば1KByte単位)で変更が有るかどうかを示すフラグ(ビット)を用意しており、ファイルに更新があった場合はそのブロックのそのフラグを1にした上で更新し、さらにスナップショットキャッシュに元の情報を書き込みます。

そしてスナップショット上のファイルA'やB'を取得したい場合は、そのフラグが0であればファイルAやBの情報を取得し、フラグが1であればスナップショットキャッシュの情報を取得します。

スナップショットのイメージバックアップへの適用

このスナップショットを使うことで、一貫性のあるバックアップが取得できるため、前述のオンライン方式のイメージバックアップが可能となります。具体的にはWindows Server BackupではVSS(Volume Shadow copy Service)というスナップショットを取ることで、オンラインでのバックアップを可能としています。また、VMware等の仮想環境では、仮想サーバ自体が(vmdkファイル等の)ファイルとして管理できるので、ハイパーバイザーが仮想サーバのスナップショットを取得し、それをファイルとしてコピーすることで、障害時の復旧が可能なイメージバックアップがオンラインで取得可能です。

スポンサーリンク

スナップショットの単体利用

スナップショットは単体でも頻繁に使われています。例えば毎日夜間に1回スナップショットを取得すれば、万が一データを誤って消してしまった場合であっても、夜間の時点に戻すことができます。

例えば、あるファイルサーバ上でスナップショットを取ったファイル、もしくはフォルダは、WindowsPCのExplorerでそのサーバ上のファイルやフォルダを右クリックし、プロパティを開き、「以前のバージョン」タブをクリックすると、スナップショット取得時点の情報が出てきますので、「復元」ボタンを押せば元に戻すことができます。下記の例ではスナップショットを取っていないため、「利用可能な以前のバージョンはありません。」と表示されていますが、スナップショットを取っている場合はここに取得日時が表示され、その時点の状態に戻すことができます。

つまり、スナップショット単体の機能は、「ユーザの誤操作によるデータ消失からの復旧」には最適です。また、VMwareのような仮想サーバ環境においては、仮想サーバのパッチ適用時の「システム不具合からの復旧」にはよく利用されています。パッチ適用前に仮想サーバのスナップショットを取得し、OSのソフトウェア的な不具合が発生した際には元に戻す、という使い方です。VMwareから見たら仮想サーバは1つのファイルであるため、このようなことができます。

しかし、これらの動きから分かるように、スナップショットは元データが破壊されてしまった場合は元に戻せません。なのでバックアップではない、と主張する人もいます。

その主張もある観点からは正しいですが、このサイトではバックアップの定義としてシステム障害以外への対応も想定しているため、バックアップと考えます。

仮想サーバのスナップショット

仮想サーバのスナップショットは、パッチ適用等、仮想サーバの設定に手を加える前に取得すると非常に便利です。万が一、その設定変更がうまく行かない場合は、設定変更前に速やかに戻すことができます。

ただし、利用にあたっては注意が必要です。

特に、サーバ稼働中にスナップショットを取得し、そのスナップショットから元に戻す場合は、物理サーバで例えると、急に電源を引き抜いた後に起動させるのと同じ行為であり、ファイルシステムの破損等の障害に繋がります。

VMwareでは、オプションでメモリの状態も保存できるため、そうした場合は比較的問題は発生しにくいです。ですが、DBサーバでの取得やファイル書き込みの多いタイミングでの取得は避けるべきです。

なので、基本手順としては以下が良いでしょう。

  1. 仮想サーバをシャットダウン
  2. スナップショットを取得
  3. 仮想サーバを起動し、パッチ適用など設定変更を実施
  4. 万が一うまく行かない場合は再度仮想サーバをシャットダウンし、スナップショットで元の状態に戻し、起動
  5. うまく行った場合も行かなかった場合も、頃合いを見てスナップショットを削除

最後のスナップショット削除は、スナップショット取得中は、前述の通り管理領域の書き込みがあるため、これの領域が大きくなるとパフォーマンスが落ちるためです。

不要なスナップショットはなるべく消すように心掛けましょう。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする