スナップショットの概要

このページでは、スナップショットの概要、仕組み、一般的なユースケース、スナップショットを作成して使用する際のベスト プラクティスについて説明します。スナップショットを作成および管理する方法と、スナップショットから Filestore データを復元する方法については、スナップショットを使用してデータの状態を保持するをご覧ください。

スナップショットとは?

Filestore スナップショットは、スナップショットが作成されたときのファイル共有データの保持状態です。インスタンスは、スナップショットの作成後に変更されたファイルの状態を維持します。ファイルをスナップショットの保持状態に復元する場合は、現在のファイルを関連するスナップショット ディレクトリのファイルで上書きします。

スナップショットは Filestore インスタンス内に保存され、インスタンスの子リソースになります。インスタンスのデータが変更されるまで、データの複製や容量の消費は行われません。インスタンスのすべてのスナップショットは共通のデータを共有します。つまり、インスタンスはスナップショット間の違いのみを保持します。

スナップショットの作成

ファイル共有のすべてのディレクトリには、非表示の .snapshot ディレクトリが含まれています。各 .snapshot ディレクトリには、作成した親ディレクトリのスナップショットが含まれています。次に例を示します。

foo/
│   bar.txt
│
└───.snapshot
    │
    ├───snap1/
    │        bar.txt
    │
    ├───snap2/
    │        bar.txt
    │
    └───snap3/
             bar.txt

スナップショットには、スナップショット作成時に親ディレクトリ内に存在するすべてのファイルとサブディレクトリの読み取り専用ビューが含まれています。atimeownership、読み取り/書き込み権限などのすべてのファイル属性が保持されます。

スナップショットの作成はデータのコピーを伴わないため、通常 2 分もかかりません。また、インスタンスのパフォーマンスにも影響しません。

一度に作成できるスナップショット数は、インスタンスごとに最大 240 個です。

スナップショットの整合性

Filestore スナップショットには、NFSv3 整合性セマンティクスがあります。スナップショットが開始される前に、Filestore インスタンスが安定したストレージに書き込まれたものと認識した書き込み、または後に確認済みの COMMIT が続く書き込みは、スナップショットに追加されます。詳細については、NFSv3 RFC-1813 のセクション 3.3.7 をご覧ください。

最適なスナップショット整合性を確保するため、ファイル共有を準備する

スナップショットの品質は、大量の書き込みワークロード中に作成されたスナップショットから復元するアプリケーションの能力によって決まります。ほとんどの場合、アプリケーションがファイル共有にデータを書き込んでいる間でも、優れた整合性を持つスナップショットを作成できます。ただし、アプリケーションで厳密な整合性が求められる場合は、次のうち 1 つ以上を行うことをおすすめします。

  • sync マウント オプションを使用するか、O_DIRECT|O_SYNC でファイルを開きます。どちらの方法でも整合性は向上しますが、整合性を保証するものではありません。
  • ファイル共有にデータを書き込むアプリケーションまたはオペレーティング システム プロセスを一時停止し、スナップショットを開始する前にファイル共有に対する変更をフラッシュする。詳細については、fsync(2) をご覧ください。
  • アプリケーションで複数の共有間の整合性が求められる場合は、すべてのアプリケーションに書き込む全インスタンスの全アプリケーションを一時停止し、すべてのファイル共有のスナップショットを作成してから、アプリケーションを再開する。
  • アプリケーション レベルの整合性が必要な場合は、スナップショットを作成する前に、アプリケーションを停止して、ファイル共有のマウントを解除する。

.snapshot ディレクトリの NFS セマンティクス

.snapshot ディレクトリは、親ディレクトリの取得されたスナップショットが含まれる特別な隠しディレクトリです。NFS コマンドと bash コマンドはすべて、これらのディレクトリに対して機能します。ただし、次のような例外があります。

  • .snapshot という名前のファイルまたはディレクトリはスナップショット用に予約されているため、作成できません。
  • .snapshot ディレクトリは、READDIR コマンドまたは READDIRPLUS コマンドの出力にも、ls -a bash コマンドの出力にも一覧表示されません。
  • .snapshot ディレクトリに変更するには、.snapshot 文字列を明示的に入力する必要があります。例: cd somedir/.snapshot/
  • シェルコマンドのオートコンプリートでは、.snapshot がオプションとして一覧表示されません。

次のステップ