スナップショット (ファイルシステム)

From Wikipedia, the free encyclopedia

ファイルシステムにおけるスナップショットとは、ストレージ中に過去のある一時点で存在したファイルとディレクトリの集合、またはその記録処理を実現する仕組みである。

あるファイルディレクトリ群をバックアップする際に、対象中のファイルがバックアップ処理中に更新されると、ファイル・ディレクトリ相互の整合性が合わなくなる可能性がある。バックアップ処理開始近辺にバックアップされるファイルと、処理終了近辺にバックアップされるファイルとでは、各々がバックアップされる時刻が異なっているためである。更新のかかるデータベースファイルや、メールサーバスプールフォルダなどのバックアップでは、このような時刻のずれに対処しないと不整合が起きやすい例である。

そこで、ある一時点のファイル・ディレクトリの状態を統一的に保持してその内容(またはその内容から得たスナップショットデータ)をバックアップすることで、ファイル・ディレクトリ相互の時間的整合性を保つために導入される仕組みの一種が「スナップショット」である。

データ保全のためのバックアップ用途以外に、スナップショットデータの有用性を生かした他の用途でも利用される。

スナップショットデータを作成する際には、作成している間その対象が更新されてはならない。ただし、スナップショットデータ作成中でも対象のデータを「更新可能」な仕組みがある。原理としては「スナップショットデータ作成中はファイル・ディレクトリ更新において実データを直接更新させず、特別に用意した別の領域(ジャーナルトランザクションログなどとも呼ばれる)にそのことを記録させ、スナップショットデータ作成中の実データの情報を固定させる。スナップショットデータ作成中に読み出しアクセスを受けた際は、実データに特別な領域の情報を加味した内容を返す。スナップショットデータ作成終了後に、実データに特別な領域に記録した更新情報を反映させる」方法などが用いられる。

注意点

スナップショットには、ストレージレベル(LVM,ZFSのボリュームを使っている場合等)とファイルシステムレベル(ZFS,UFS,NTFS等)のスナップショットの2種類がある。 前者はストレージレベルでスナップショットが作成されるため、いかなるファイルシステムであってもスナップショットを作成することが可能である(LVMのようにOS上のソフトウェアで実現される場合はそのOSが作成できる範囲にはなる)が、 スナップショットを正しく取れる状況は限定されるので利用上の注意が必要である。

昨今のOSではライトバックキャッシュを持ち、なるべくストレージに書き込まない制御を行っているので、 ストレージスナップショットは原則としてストレージをアンマウントした状態でのみ、壊れていないイメージを作成することができる。 スナップショット用のサポートツールがある場合は、それを使うことによって、OSのバッファをフラッシュし、書き込み操作をブロックしたのち、スナップショットを作成し、書き込みを再開する手順を取ることにより、壊れていない(厳密に言えば壊れているが、ジャーナルログ等により復旧されるため実害が発生しない)スナップショットを撮ることが可能である

ファイルシステムスナップショットは、ストレージ効率も良く、キャッシュ上のデータを含めてスナップショットの対象となるため、 上記のような問題は発生しない(書き込み中のファイルについては、書き込まれたところまで有効であることに注意)が、 スナップショットに対応したファイルシステムである必要がある。

スナップショット機能の拡張

ファイルシステムによっては、内部的に過去のバージョンのファイルを追跡記録しており、特別な名前空間を使ってそのスナップショットにアクセスできるものもある。そのようなファイルシステムとしては、WAFLベル研究所Plan 9用ファイルシステムFossilODS-5が挙げられる。他にもNTFSUFS2のように、ファイルのヒストリにアクセスするためのAPIをオペレーティングシステム (OS) が備えている場合もある。

スナップショットに読み書き可能なものは特にbranching snapshotとも呼ばれる。これは、この機能が、スナップショット中のデータの枝分かれしたバージョンを暗黙のうちに作成することによる。ZFSではこの機能をcloneと呼ぶ。

実装

スナップショットの応用

脚注

Related Articles

Wikiwand AI