ファイルシステムにおけるスナップショットとは、ストレージ上に存在する特定の時点のファイルや
ディレクトリの状態を記録する仕組みです。この技術は、データの
バックアップや復元、システムの保護など、多岐にわたる用途で利用されています。
スナップショットの目的
バックアップ処理中にファイルが更新されると、ファイル間の整合性が損なわれる可能性があります。例えば、
データベースファイルやメールサーバーのスプールフォルダなど、更新頻度の高いデータを
バックアップする場合、処理開始時と終了時でデータの状態が異なるため、不整合が生じやすくなります。スナップショットは、ある時点の
ファイルシステムの状態を固定し、その時点のデータを
バックアップすることで、このような時間的な不整合を回避します。
スナップショットの仕組み
スナップショット作成中は、対象データの更新を一時的に別の領域(
ジャーナルや
トランザクションログ)に記録し、実データの状態を固定します。これにより、スナップショット作成中のデータの変更を管理し、整合性を保つことができます。スナップショット作成中にデータへの読み出し要求があった場合は、実データに加えて、記録された変更情報も加味したデータが返されます。スナップショット作成が完了した後に、記録された変更情報が実データに反映されます。
スナップショットの種類
スナップショットには、ストレージレベルと
ファイルシステムレベルの2種類があります。
ストレージレベルのスナップショット: LVMやZFSなどのボリューム管理システムで作成されるスナップショットで、ファイルシステムの種類に関わらず利用できます。ただし、ストレージへの書き込みキャッシュの影響を受けやすいため、システムをアンマウントした状態でのみ整合性の取れたイメージを作成できます。専用ツールを使用することで、OSのバッファをフラッシュし、書き込みを一時停止した状態でスナップショットを作成できます。
ファイルシステムレベルのスナップショット: ZFS、UFS、NTFSなどの
ファイルシステムが提供するスナップショット機能です。ストレージ効率が高く、キャッシュ上のデータもスナップショットの対象となるため、整合性の問題は発生しにくいです。ただし、スナップショットに対応した
ファイルシステムである必要があります。
スナップショット機能の拡張
一部の
ファイルシステムでは、過去のファイルバージョンを内部的に追跡記録し、特定のスナップショットにアクセスできます。WAFL、Fossil、ODS-5などがその例です。また、NTFSやUFS2のように、ファイルの履歴にアクセスするためのAPIをOSが提供している場合もあります。読み書き可能なスナップショットは、特に「branching snapshot」と呼ばれ、
ZFSでは「clone」として知られています。
実装例
Unix系システム: Linuxを含むUnix系システムでは、LVMを利用してブロックデバイス全体のコピーオンライト方式のスナップショットを作成できます。これにより、矛盾のないブロックデバイスイメージを保存できます。ZFSのように、ファイルシステム自体がスナップショット機能をサポートしている場合もあります。
Windowsのファイルシステム: Windowsでは、ボリュームシャドウコピーサービス(VSS) を利用してNTFSボリュームのスナップショットを作成できます。これは、
バックアップと復元、以前のバージョンの復元、システムの復元ポイントなどの機能で利用されています。スナップショットデータは差分記録であり、シャドウコピー用の記憶域に保存されます。
*
プラットフォーム仮想化システム: VMware、
Hyper-V、VirtualBoxなどの仮想化システムでは、仮想環境のスナップショットを作成できます。これにより、仮想環境の状態を過去の時点に戻したり、複製したりできます。
スナップショットの応用
スナップショットの考え方は、
データベースの
トランザクション処理や、ソフトウェアトランザクショナルメモリのようなメモリ上のデータ構造にも適用できます。
バックアップソフトウェアでは、スナップショット機能をオプションとして提供しているものもあります。
まとめ
スナップショットは、
ファイルシステムのデータを効率的に管理し、整合性のある状態を保つための重要な技術です。データの
バックアップだけでなく、システムの復旧や仮想環境の管理など、幅広い用途で活用されています。ストレージレベルと
ファイルシステムレベルのスナップショットの違いを理解し、適切な場面で利用することが重要です。