永続ディスクのスナップショットを作成する

スナップショットを使用して、永続ディスクからデータをバックアップします。スナップショットはパブリック イメージカスタム イメージとは異なるものです。イメージは主に、インスタンスの作成またはインスタンス テンプレートの設定に使用されます。スナップショットは、永続ディスク上のデータの定期的なバックアップに便利です。永続ディスクが実行中のインスタンスに接続されている場合でも、永続ディスクからスナップショットを作成できます。

スナップショットは増分であるため、ディスクの完全なイメージを定期的に作成するよりも短時間かつ大幅に低いコストで永続ディスクの定期的なスナップショットを作成できます。増分スナップショットは次のように機能します。

  • 永続ディスクの最初の正常なスナップショットは、永続ディスクのすべてのデータを含む完全なスナップショットです。
  • 2 番目のスナップショットには、1 番目のスナップショットより後に新規作成または変更されたデータのみが含まれます。スナップショット 1 以降に変更されていないデータは含まれません。変更されていないデータについては、スナップショット 2 にはスナップショット 1 への参照が含まれます。
  • スナップショット 3 には、スナップショット 2 以降に新規作成または変更されたデータは含まれますが、スナップショット 1 または 2 以降に変更されていないデータは含まれません。変更されていないデータについては、スナップショット 3 にはスナップショット 1 とスナップショット 2 のブロックへの参照が含まれます。

これが、永続ディスクのすべての後続のスナップショットについて繰り返されます。スナップショットは常に、正常に取得された最新のスナップショットに基づいて作成されます。

Diagram describing how to create a snapshot

Compute Engine ではデータの整合性を確保するため、自動チェックサムを使用して各スナップショットの複数のコピーを複数のロケーションに冗長的に保存します。異なるプロジェクト間でスナップショットを共有することはできません。

プロジェクトで使用できるスナップショットの一覧を表示するには、次のコマンドを実行します。

gcloud compute snapshots list

特定のスナップショットについての情報を一覧表示するには、gcloud compute snapshots describe コマンドを使用します。

gcloud compute snapshots describe example-snapshot

始める前に

スナップショットのベスト プラクティスについて

必要な数のスナップショットをいつでも作成できますが、次のベスト プラクティスを使用すると、スナップショットをより迅速かつ信頼性高く作成できます。

スナップショットの整合性を最適に保つために永続ディスクを準備する

ほとんどの状況では、アプリケーションがデータを書き込んでいる間でも、永続ディスクからスナップショットを作成でき、スナップショットの整合性は依然として高いと考えられます。スナップショットの品質は、大量の書き込みワークロード中に作成するスナップショットからアプリケーションを復旧する能力によって異なります。

アプリケーションで厳密な整合性が必要な場合は、スナップショットが永続ディスクの望ましい状態と一致するように、1 つ以上の手順を実施できます。

  • 永続ディスクにデータを書き込むアプリケーションまたはオペレーティング システム プロセスを一時停止します。次に、スナップショットを作成する前にディスク バッファをフラッシュします。
  • 永続ディスクを完全にマウント解除して、スナップショットの作成中にデータが書き込まれないようにします。これは通常は不要ですが、スナップショットの整合性を向上させます。
  • アプリケーションで複数の永続ディスク間の整合性が必要な場合は、各ディスク上のすべてのファイルシステムを固定またはマウント解除し、それらのディスクのすべてのスナップショットを完了してから、アプリケーションを再開する必要があります。Compute Engine は、複数の永続ディスクで同時に実行されるスナップショット間の整合性を保証しません。
  • ext4 などのジャーナリング ファイルシステムを使用して、永続ディスクに実際に書き込まずにデータがキャッシュされるリスクを低減します。
  • Windows Server インスタンスに接続されている永続ディスクの場合は、VSS スナップショットを使用してデータの整合性を維持します。

既存のスナップショットを後続のスナップショットのベースラインとして使用する

既存のスナップショットが永続ディスク上にある場合は、そのディスクから作成する後続のスナップショットのベースラインとして自動的に使用されます。

  • 永続ディスクから前のスナップショットを削除する前に、その永続ディスクから新しいスナップショットを作成します。以前のスナップショットを使用でき、新規または変更されたデータのみを永続ディスクから読み込める場合、システムは新しいスナップショットをより迅速に作成できます。

  • 新しいスナップショットが完了するまで待ってから、後続のスナップショットを同じ永続ディスクから取得します。同じ永続ディスク上で 2 つのスナップショットを同時に実行すると、両方とも同じベースラインから開始し、作業が重複します。新しいスナップショットの完了を待つと、後続のスナップショットは、最後のスナップショットが終了してから変更されたデータを取得するだけで済むため、より迅速に実行されます。

オフピーク時にスナップショットをスケジュールする

永続ディスクの定期的なスナップショットをスケジュールする場合、可能な限りオフピーク時にスナップショットを作成することによって、各スナップショットの完了に要する時間を短縮することができます。

  • 永続ディスクが存在するゾーンでは、営業日に自動スナップショットをスケジュールします。通常、スナップショットの作成は営業日の終わりにピークに達します。
  • 永続ディスクが存在するゾーンでは、自動スナップショットを深夜 0 時直後ではなく早朝にスケジュールします。通常、スナップショットの作成は深夜 0 時にピークに達します。

データを別々の永続ディスクに整理する

永続ディスクのスナップショットを作成すると、ディスクに格納するすべてのデータがスナップショットに含まれます。データ量が大きいほど、作成されるスナップショットが大きくなるため、コストが増加し、作成に時間がかかります。必要なデータだけのスナップショットを作成するには、データを別々の永続ディスクに整理します。

  • 重要なデータは、ブートディスクではなくセカンダリの永続ディスクに保存します。これにより、必要なときにのみ、または頻度の低いスケジュールで、ブートディスクのスナップショットを作成できます。
  • ブートディスクのスナップショットを作成する場合は、スワップ パーティション、ページファイル、キャッシュ ファイル、重要ではないログを別の永続ディスクに保存します。これらのファイルとパーティションは頻繁に変更され、スナップショット プロセスはそれらを増分スナップショットに含める必要のある変更されたデータとして識別する可能性が高くなります。
  • 1 つの永続ディスクに類似のデータをまとめておくことで、作成する必要のあるスナップショットの数を減らします。オペレーティング システムと揮発性データは、スナップショットを作成するデータとは別に保持する必要がありますが、物理マシンでのように複数の永続ディスクに重要なデータを分散させる必要はありません。1 つの大きな永続ディスクは、同じ合計サイズの複数の小さな永続ディスクと同じパフォーマンスを実現できます。

discard オプションを有効にするか、永続ディスクで fstrim を実行する

Linux インスタンスで、discard オプションを使用して永続ディスクをフォーマットおよびマウントしなかった場合は、スナップショットを作成する前にインスタンスで fstrim コマンドを実行します。このコマンドは、ファイルシステムが必要としなくなったブロックを削除し、システムがスナップショットをより迅速かつ小さなサイズで作成できるようにします。永続ディスクで discard オプションを設定する方法については、永続ディスクをフォーマットしてマウントするをご覧ください。

スナップショットを作成する

顧客指定の暗号鍵で暗号化されたディスクからスナップショットを作成する手順については、暗号化されたディスクからのスナップショットの作成をご覧ください。

Windows 永続ディスクのスナップショットの作成手順については、Windows 永続ディスク スナップショットの作成をご覧ください。

スナップショット用に永続ディスクを準備する

アプリケーションがディスクにデータを書き込んでいる間でも、永続ディスクのスナップショットを作成できます。ただし、スナップショットを作成する前にディスク バッファをフラッシュしてファイルシステムを同期するとスナップショットの整合性が向上します。

スナップショットを取得する前に永続ディスクを準備するには:

  1. SSH を使用してインスタンスに接続します
  2. 必要に応じて、アプリケーションでディスクへのフラッシュを実行します。たとえば、MySQL には FLUSH ステートメントがあります。他のアプリケーションにも同様のプロセスがある場合があります。
  3. アプリケーションの永続ディスクへの書き込みを停止します。
  4. sudo sync を実行します。

このステップを省略すると、アプリケーションによって正常にディスクにフラッシュされたデータだけが、スナップショットに含まれます。この状況は、アプリケーションからは突然停電したかのように見えます。

オプションで、スナップショットを取得する前にファイルシステムを固定またはマウント解除することができます。これはディスク バッファをクリアする最も安全で確実な方法ですが、ディスク バッファのフラッシュほど簡単ではありません。

  1. SSH を使用してインスタンスに接続します
  2. 永続ディスクのデータの読み取りまたは書き込みを行っているすべてのアプリケーションを停止します。
  3. ファイルシステムを固定するか、ファイルシステムをマウント解除します。
    • 固定: sudo fsfreeze -f example-disk_location
    • マウント解除 sudo umount example-disk_location

スナップショットを完了した後、ファイルシステムを固定解除またはマウントすることができます。

+ Unfreeze: `sudo fsfreeze -u example-disk_location`
+ Mount: `sudo mount example-disk_location mount_location`

スナップショットを作成する

コンソール

  1. [新しいスナップショットの作成] ページに移動します。
  2. スナップショットの名前を入力し、スナップショットを作成する既存のディスクを選択します。
  3. [作成] をクリックしてスナップショットを作成します。

gcloud

スナップショットを作成するには、gcloud compute disks snapshot コマンドを使用します。

gcloud compute disks snapshot [DISK_NAME]

gcloud コマンドライン ツールは、オペレーションから READY または FAILED のステータスが返されるまで待機するか、最大タイムアウトに達した場合はスナップショットの直近の既知の詳細を返します。

API

createSnapshot メソッドに POST リクエストを発行します。

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/disks/[DISK_NAME]/createSnapshot

ここで:

  • [PROJECT_ID] は、プロジェクト ID です。
  • [ZONE] は、インスタンスと新しいディスクが配置されるゾーンです。
  • [DISK_NAME] は新しいディスクの名前です。

より大きい永続ディスクにスナップショットを復元する

ルート以外の永続ディスクのスナップショットを元のスナップショットより大きいサイズに復元できますが、インスタンス内から追加コマンドをいくつか実行して、容量の増加をインスタンスに認識させる必要があります。

オペレーティング システムおよびファイルシステムの種類によっては、異なるファイルシステム サイズ変更ツールの使用が必要になることがあります。詳しくは、お使いのオペレーティング システムのドキュメントをご覧ください。

最初に、スナップショットより大きい新しい永続ディスクを作成します。

  1. 非ルート スナップショットから新しい永続ディスクを作成します。--size フラグを使用して、スナップショットのサイズより大きいディスクサイズを指定します。

    gcloud compute disks create example-disk \
      --source-snapshot=example-snapshot --size=600GB
    
  2. 永続ディスクをインスタンスに接続します。

    gcloud compute instances attach-disk example-instance --disk=example-disk
    
  3. 新しい永続ディスクを作成してインスタンスに接続した後、その永続ディスクでファイルシステムのサイズを変更して、追加のディスク領域を含めます。

これで、拡張した永続ディスクの容量を使用してデータを保存できるようになります。

異なる種類のディスクにスナップショットを復元する

次のコマンドを実行することにより、異なる種類の永続ディスクにスナップショットを復元できます。

gcloud compute disks create example-disk --source-snapshot=example-snapshot --type={pd-standard|pd-ssd}

スナップショットを削除する

Compute Engine は増分スナップショットを使用しているので、各スナップショットには前回のスナップショットより後に変更されたデータのみが含まれます。変更されていないデータについては、スナップショットは以前のスナップショットのデータに対する参照を使用します。永続ディスクのスナップショットは、スナップショットの合計サイズに対してのみ請求されます。

スナップショットを削除すると、Compute Engine は直ちにシステム内でスナップショットを DELETED とマークします。依存スナップショットを持たないスナップショットは、無条件に削除されます。一方、依存スナップショットがあるスナップショットは、次のように処理されます。

  1. 他のスナップショットの復元に必要なすべてのデータが、次のスナップショットに移動されて、そのスナップショットのサイズが増えます。
  2. 他のスナップショットの復元に必要ないデータはすべて削除されます。これにより、全スナップショットの合計サイズは減ります。
  3. 次のスナップショットは削除としてマークされたスナップショットを参照しなくなり、代わりにそれより前のスナップショットを参照します。

後のスナップショットで前のスナップショットに保存されていた情報が必要になることがあるため、スナップショットを削除してもスナップショット上のすべてのデータが削除されるとは限らないことに注意してください。上の項目 1 で説明したように、削除するようにマークされたスナップショットのデータが後続のスナップショットの復元に必要な場合、そのデータは対応する次のスナップショットに移動されます。スナップショットからデータを完全に削除するには、すべてのスナップショットを削除する必要があります。

次に示す図は、上で説明したプロセスを表したものです。

スナップショットの削除プロセスを説明する図

スナップショットを削除するには、gcloud compute snapshots delete コマンドを使用します。

gcloud compute snapshots delete example-snapshot

フィードバックを送信...

Compute Engine ドキュメント