スナップショットの概要

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

スナップショットとは?

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

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

スナップショットの作成

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

volume1/
│   genomics-file.txt
│
└───.snapshot
    │
    ├───snap1/
    │        genomics-file.txt
    │
    ├───snap2/
    │        genomics-file.txt
    │
    └───snap3/
             genomics-file.txt

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

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

一度に作成できるスナップショット数は、インスタンスごとに最大 240 個です。 ファイル共有名とスナップショット名は、合わせて最大 78 文字です。

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

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 がオプションとして一覧表示されません。

スナップショットに取り込まれたファイルを削除する

スナップショットに取り込まれたファイルを削除しても、インスタンスの空きディスク容量は増加しません。

スナップショットの状態に戻す

インスタンスのスナップショットの状態への復元は、ゾーン、高スケール SSD、リージョン、エンタープライズのインスタンスに対してのみ一般提供されています。

スナップショットに取り込まれている状態へインスタンスを戻すと、そのスナップショットの作成後に書き込まれたすべての新しいデータは削除され、復元できなくなります。対象スナップショットの後に作成されたスナップショットは、元に戻す処理によっても削除されます。

機能の制限事項

  • スナップショットに戻す機能は、ライブ ファイル システムからデータを削除し、チェーン内の後続の各新しいスナップショットを削除する、元に戻せないオペレーションです。そのため、誤ってデータが失われるリスクが高くなります。この動作はバックアップからの復元とは大きく異なります。バックアップは、使用後も現在の状態のままになるため、複数のバックアップから復元して最適なものを探します。元に戻す機能は慎重に使用してください。

  • ターゲット スナップショットの作成後に書き込まれたすべてのデータは、最初に削除され、復元はできません。対象スナップショットより新しいすべてのスナップショットも削除されます。たとえば、snapshot1snapshot2snapshot3 は順次作成されます。インスタンスを snapshot2 でキャプチャした状態に戻すと、snapshot2 の後に書き込まれたすべてのデータと、snapshot2 の作成後に作成されたすべてのスナップショットが元に戻すプロセス。

    この削除されたデータのクリーンアップには 6 時間から 10 日かかる場合があります。この間、インスタンスの容量とパフォーマンスに影響が出る可能性があります。

  • インスタンスをスナップショットの状態に戻すと、NFS ファイルシステム ID(fsid)が更新されます。既存のマウントを使用してクライアントにアクセスしようとすると、古いファイルの操作エラーが返されます。ベスト プラクティスとして、元に戻す前にインスタンスからすべてのクライアントをマウント解除し、完了後に再マウントすることをおすすめします。

  • 元に戻す操作は、完了するまでに最大 2 分かかることがあります。

    • チェーン内の後続のスナップショットの削除など、元に戻す操作に関連するクリーンアップは、関連するファイルの数に応じて 6 時間から 10 日かかることがあります。
    • 元に戻すオペレーションの実行中とクリーンアップの完了の間に、他のオペレーションを実行できます。
    • 別の元に戻すオペレーションを開始する前に、元に戻すオペレーションが完了するまで待つ必要があります。
  • スナップショットとそれに関連する revert オペレーションは、ほとんどのサービス階層で使用できます。スナップショットは、基本 SSD および基本 HDD サービス階層では使用できません。

  • 1 つの共有を持つインスタンスのみをスナップショットの状態に戻すことができます。

  • スナップショットはエンタープライズ サービスティアでサポートされていますが、Filestore マルチシェア機能と組み合わせることはできません。

次のステップ