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

スナップショットを作成して、永続ディスクからデータをバックアップします。スナップショットを削除する必要がある場合、またはスナップショットから永続ディスクにデータを復元する場合は、永続ディスクのスナップショットの復元と削除をご覧ください。

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

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

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

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

スナップショットの作成方法を説明する図

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

プロジェクトで使用可能なスナップショットのリストを表示するには、gcloud compute snapshots list コマンドを使用します。

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

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

  • 固定解除: sudo fsfreeze -u example-disk_location
  • マウント: sudo mount example-disk_location mount_location

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

Console

  1. [Create a new snapshot] ページに移動します。
  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 つのゾーン内の永続ディスクからのスナップショットの作成と同様ですが、--region フラグを指定してディスクが配置されているリージョンを示す必要があります。

gcloud

リージョン永続ディスクのスナップショットを作成するには、gcloud beta compute disks snapshot コマンドを使用します。

gcloud beta compute disks snapshot [DISK_NAME] --region [REGION]

ここで:

  • [DISK_NAME] はディスクの名前です。
  • [REGION] は、ディスクが配置されているリージョンです。

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

API

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

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

{
 "name": "[SNAPSHOT_NAME]"
}

ここで:

  • [PROJECT_ID] はプロジェクト ID です。
  • [REGION] は、リージョン永続ディスクが配置されているリージョンです。
  • [DISK_NAME] はディスクの名前です。
  • [SNAPSHOT_NAME] は新しいスナップショットの名前です。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

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

Compute Engine ドキュメント