Windows アプリケーション整合性のあるディスク スナップショットを作成する


Compute Engine では、スナップショットを使用してディスクのデータをバックアップできます。スナップショットは増分的であるため、完全なディスク イメージを作成する場合と比べて、作成時のパフォーマンスが高く、ストレージ料金の総額も低くなります。

アプリケーション整合性のあるスナップショットは、すべてのアプリケーション トランザクションが完了し、保留中の書き込みがすべてディスクにフラッシュされた状態で、バックアップの時点でのアプリケーション データの状態をキャプチャします。Windows VM では、ボリューム シャドーコピー サービス(VSS)を使用することで、最初にインスタンスを停止したり VM からディスクを切断したりすることなく、アプリケーション整合性のあるスナップショットを作成できます。

始める前に

  • Windows インスタンスを作成します。
  • スナップショットを作成する際のベスト プラクティスを確認します。
  • まだ設定していない場合は、認証を設定します。認証とは、Google Cloud のサービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のいずれかのオプションを選択して Compute Engine に対する認証を行います。

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      詳細については、Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。

制限事項

Windows のディスク スナップショットには次の制限があります。

  • VSS スナップショットは、イメージ バージョンが v20160810 以降の Windows インスタンスでのみ動作します。インスタンスのイメージがそれより古い場合は、VSS を使用せずにスナップショットを作成します。
  • アタッチされているディスクは、NTFS、exFAT、または ReFS のファイル システムを使用する必要があります。
  • VSS スナップショットがデータの保存に役立つのは、整合性のあるデータ バックアップを作成するために調整可能な VSS 対応アプリケーションを実行している場合だけです。
  • VSS スナップショット オペレーションが 300 秒以内に完了しない場合、スナップショットはタイムアウト エラーで失敗します。

Windows VSS スナップショットの作成

インスタンスの停止や VM からのディスクの切断を行うことなく、ボリューム シャドーコピー サービス(VSS)のスナップショットを作成できます。VSS 対応アプリがインストールされているシステムでのバックアップと復旧を目的としています。

VSS スナップショットは通常の Persistent Disk または Hyperdisk のスナップショットと同じ料金であり、スナップショットの合計サイズに対してのみ請求されます。

スナップショットの作成

コンソール

  1. Google Cloud コンソールで [スナップショットの作成] ページに移動します。

    [スナップショットの作成] ページに移動
  2. スナップショットの名前を入力します。
  3. スナップショットの種類を選択します。デフォルトは STANDARD(標準)スナップショットです。これは、長期のバックアップや障害復旧に適しています。

    データの保持にかかる費用対効果を高めるには、[アーカイブ スナップショット] を選択します。

  4. 省略可: スナップショットの説明を入力します。
  5. [ソースディスク] で、スナップショットを作成する既存のディスクを選択します。
  6. [ロケーション] セクションで、スナップショットの保存場所を選択します。

    スナップショット設定で定義されている事前定義またはカスタマイズされたデフォルトのロケーションが自動的に選択されます。必要に応じて、スナップショット設定をオーバーライドして、次の方法でカスタマイズされた保存場所にスナップショットを保存できます。

    1. スナップショットを保存する保存場所の種類を選択します。

    2. [ロケーションを選択] フィールドで、使用する特定のリージョンまたはマルチリージョンを選択します。ソースディスクに最も近いリージョンまたはマルチリージョンを使用するには、[ディスクの場所に基づく] を選択します。
  7. [アプリケーション間で整合性のあるスナップショットを有効にする] チェックボックスをオンにします。
  8. [作成] をクリックしてスナップショットを作成します。

gcloud

VSS スナップショットを作成するには、gcloud compute snapshots create コマンドを使用して --guest-flush フラグを指定します。

スナップショットは、スナップショット設定で定義された保存場所ポリシー内に作成するか、別の保存場所を使用して作成できます。詳細については、スナップショットの保存場所を選択するをご覧ください。

  • スナップショット設定で構成した事前定義またはカスタマイズされたデフォルトの場所にスナップショットを作成するには、gcloud compute snapshots create コマンドを使用します。

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk-zone=SOURCE_ZONE \
        --source-disk=SOURCE_DISK_NAME \
        --snapshot-type=SNAPSHOT_TYPE \
        --guest-flush
    
  • また、スナップショット設定をオーバーライドしてスナップショットをカスタマイズされた保存場所に作成するには、--storage-location フラグを含めて、スナップショットの保存先を指定します。

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk-zone=SOURCE_ZONE \
        --source-disk=SOURCE_DISK_NAME \
        --snapshot-type=SNAPSHOT_TYPE \
        --storage-location=STORAGE_LOCATION \
        --guest-flush
    

    次のように置き換えます。

    • SNAPSHOT_NAME: スナップショットの名前。
    • SOURCE_ZONE: ソースディスクのゾーン。
    • SOURCE_DISK_NAME: スナップショットを作成するディスク ボリュームの名前。
    • SNAPSHOT_TYPE: スナップショットの種類(標準またはアーカイブ)。スナップショットの種類が指定されていない場合は、STANDARD(標準)スナップショットが作成されます。
    • STORAGE_LOCATION: スナップショットを保存する Cloud Storage マルチリージョンまたは Cloud Storage リージョン(オプション)。保存場所は 1 つだけ指定できます。

      --storage-location パラメータは、スナップショット設定で構成した事前定義またはカスタマイズされたデフォルトの保存場所をオーバーライドする場合にのみ使用します。

    リージョン Persistent Disk の VSS スナップショットを作成するには、前の例の --source-disk-zone=--source-disk-region= に置き換え、リージョン Persistent Disk の配置先リージョンを七します。

    Google Cloud CLI は、オペレーションが READY または FAILED のステータスを返すか、最長タイムアウトに達してスナップショットの最新の既知情報が返されるまで待機します。

REST

スナップショットを作成するときに、VSS スナップショットを作成することを示すために、compute.snapshots.insert メソッドに対する POST リクエストのリクエスト本文に guestFlush プロパティを指定します。

スナップショットは、スナップショット設定で定義された保存場所ポリシー内に作成するか、別の保存場所を使用して作成できます。詳細については、スナップショットの保存場所を選択するをご覧ください。

  • スナップショット設定で構成した事前定義またはカスタマイズされたデフォルトの場所にスナップショットを作成するには、snapshots.insert メソッドPOST リクエストを発行します。

    POST https://compute.googleapis.com/compute/beta/projects/DESTINATION_PROJECT_ID/global/snapshots
    {
      "name": "SNAPSHOT_NAME",
      "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME",
      "snapshotType": "SNAPSHOT_TYPE",
      "guestFlush": true,
    }
    
  • または、スナップショット設定をオーバーライドしてカスタマイズされた保存場所にスナップショットを作成するには、snapshots.insert メソッドに POST リクエストを storageLocations プロパティを含めて送信します。

    POST https://compute.googleapis.com/compute/beta/projects/DESTINATION_PROJECT_ID/global/snapshots
    {
      "name": "SNAPSHOT_NAME",
      "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME",
      "snapshotType": "SNAPSHOT_TYPE",
      "storageLocations": [
          "STORAGE_LOCATION"
      ],
      "guestFlush": true,
    }
    

次のように置き換えます。

  • DESTINATION_PROJECT_ID: スナップショットを作成するプロジェクトの ID。
  • SNAPSHOT_NAME: スナップショットの名前。
  • SOURCE_PROJECT_ID: ソースディスク プロジェクトの ID。
  • SOURCE_ZONE: ソースディスクのゾーン。
  • SOURCE_DISK_NAME: スナップショットを作成するディスクの名前。
  • SNAPSHOT_TYPE: スナップショットの種類(標準またはアーカイブ)。スナップショットの種類が指定されていない場合は、STANDARD(標準)スナップショットが作成されます。
  • STORAGE_LOCATION: スナップショットを保存する Cloud Storage マルチリージョンまたは Cloud Storage リージョン(オプション)。保存場所は 1 つだけ指定できます。

    storageLocations パラメータは、スナップショット設定で構成した事前定義またはカスタマイズされたデフォルトの保存場所をオーバーライドする場合にのみ使用します。

リージョン Persistent Disk の VSS スナップショットを作成するには、前述の POST リクエストで次の行を置き換えます。

"sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME",
リージョン Persistent Disk のスナップショットを作成する場合は、代わりに次の行を使用します。
"sourceDisk": "projects/SOURCE_PROJECT_ID/regions/SOURCE_REGION/disks/SOURCE_DISK_NAME",

省略可: ディスクを読み取り / 書き込み可能としてマークする

VSS スナップショットの作成時に、Windows Server はスナップショット内のボリュームを読み取り専用としてマークします。VSS スナップショットから新しいディスクを作成すると、そのディスクも読み取り専用モードに設定されます。

これにより、問題が発生する場合があります。たとえば、既存のブートディスクの VSS スナップショットから作成した新しいブートディスクで VM インスタンスを作成すると、新しいブートディスクの読み取り専用フラグによって VM が正常に起動できなくなります。

この問題を回避するには、次の手順に沿って VSS スナップショットから作成したすべての新しいディスクから読み取り専用フラグを削除します。

  1. ディスクが VM にアタッチされていることを確認します。

    • VSS スナップショットから作成したディスクが非ブート データディスクである場合は、ディスクを新規または既存の VM にアタッチできます。
    • VSS スナップショットから作成したディスクがブートディスクであり、それを使用して VM を起動する場合は、ディスクを一時的に別の既存の VM にアタッチする必要があります。以下の手順が完了したら、VM からディスクを切断します。これで、このディスクを使用して新しい VM インスタンスを起動できるようになります。
  2. ディスクがアタッチされている Windows VM にログインします

  3. PowerShell コマンド プロンプトを開き、diskpart ツールを実行します。

    PS C:\> diskpart
    
  4. マウントするディスクを特定します。

    DISKPART> list disk
    
  5. select disk コマンドを使用して、ディスクを選択します。

    DISKPART> select disk DISK_NUMBER
    

    DISK_NUMBER は、マウントするディスクの数に置き換えます。

  6. ディスクをマウントします。

    DISKPART> online disk
    
  7. ディスク内のすべてのボリュームを一覧取得します。

    DISKPART> list volume
    
  8. 新しいボリュームを選択します。

    DISKPART> select volume VOLUME_NUMBER
    

    VOLUME_NUMBER は、読み取りおよび書き込み可能として構成するボリュームの番号に置き換えます。

  9. 読み取り専用フラグを削除します。

    DISKPART> attr volume clear readonly hidden nodefaultdriveletter shadowcopy
    
  10. diskpart ツールを終了します。

    DISKPART> exit
    
  11. ディスクが別の VM のブートディスクである場合は、ブートディスク ファイルを新しいディスク署名と同期します。

    PS C:\> bcdboot DRIVE_LETTERWindows /s DRIVE_LETTER
    

    DRIVE_LETTER は、同期するボリュームのドライブ文字で置き換えます。たとえば、F:\ の場合は F です。

VSS を使用せずにスナップショットを作成する

Windows VM にアタッチされているディスクのスナップショットを、VSS を使用せずに作成したい場合があります。

VSS を使用せずに Windows VM にディスク スナップショットを作成するには、以下の手順に沿って操作します。

  1. クリーンなスナップショットを作成するためのシステムを準備する
  2. スナップショットの作成
  3. ディスクの再マウント
  4. ディスクを読み取り / 書き込み可能としてマークする

クリーンなスナップショットを作成するためのシステムを準備する

ディスク スナップショットを作成する前に、取得するスナップショットが、希望するディスクの状態と一致していることを確認します。ディスクが「クリーンでない」状態でスナップショットを取ると、ディスク チェックが強制的に行われ、場合によってはデータを損失する可能性があります。ファイル システムを同期してマウントを解除することを検討してください。

ファイル システムの同期

アプリケーションがディスクにデータの書き込みを行っているなど、ディスクのマウント解除ができない場合は、ファイル システムを同期してディスク バッファをフラッシュできます。ファイル システムを同期するには次のようにします。

  1. Windows VM にログインします。
  2. Microsoft から Sync ツールをダウンロードしてインストールします。
  3. アプリケーションによるディスクへの書き込みを停止します。
  4. 管理者特権のコマンド プロンプト ウィンドウを開きます。
  5. コマンドライン ウィンドウで、次のコマンドを実行します。

    PS C:\> sync DRIVE_LETTER
    

    DRIVE_LETTER は、同期するボリュームのドライブ文字で置き換えます。たとえば、F:\ の場合は F です。

ディスクのマウント解除

  1. Windows VM にログインします。

  2. PowerShell コマンド プロンプトを開き、diskpart ツールを実行します。

    PS C:\> diskpart
    
  3. マウントを解除してスナップショットを作成するディスクを特定します。

    DISKPART> list disk
    
  4. 次に、確認したディスク番号を使用してディスクを選択します。

    DISKPART> select disk DISK_NUMBER
    

    DISK_NUMBER は、再マウントするディスクの数に置き換えます。

  5. ディスクをマウント解除します。

    DISKPART> offline disk
    

スナップショットの作成

ディスクの再マウント

  1. Windows VM にログインします。

  2. PowerShell コマンド プロンプトを開き、diskpart ツールを実行します。

    PS C:\> diskpart
    
  3. マウントするディスクを特定します。

    DISKPART> list disk
    
  4. select disk コマンドを使用して、ディスクを選択します。

    DISKPART> select disk DISK_NUMBER
    

    DISK_NUMBER は、マウントするディスクの数に置き換えます。

  5. ディスクをマウントします。

    DISKPART> online disk
    

読み取り専用フラグをディスクから削除する

  1. 必要に応じて、次の操作を行います。

    1. Windows VM にログインします。

    2. PowerShell コマンド プロンプトを開き、diskpart ツールを実行します。

      PS C:\> diskpart
      
  2. ディスク内のすべてのボリュームを一覧取得します。

    DISKPART> list volume
    
  3. 新しいボリュームを選択します。

    DISKPART> select volume VOLUME_NUMBER
    

    VOLUME_NUMBER は、読み取りおよび書き込み可能として構成するボリュームの番号に置き換えます。

  4. 読み取り専用フラグを削除します。

    DISKPART> attr volume clear readonly hidden nodefaultdriveletter shadowcopy
    
  5. diskpart ツールを終了します。

    DISKPART> exit
    
  6. ディスクが別の VM インスタンスのブートディスクである場合は、PowerShell コマンド プロンプトで、新しいディスク署名でブートディスク ファイルを同期します。

    PS C:\> bcdboot DRIVE_LETTER:\Windows /s DRIVE_LETTER
    

    DRIVE_LETTER は、同期するボリュームのドライブ文字で置き換えます。たとえば、F:\ の場合は F です。

次のステップ