建立與 Windows 應用程式一致的磁碟快照

在 Compute Engine 中,您可以使用標準快照備份磁碟資料。由於快照是遞增的,因此與建立完整的磁碟映像檔相比,建立快照的效能更高,總儲存費用也更低。

應用程式一致性快照會擷取備份時的應用程式資料狀態,包括所有已完成的應用程式交易,以及所有已排清至磁碟的待處理寫入作業。在 Windows 虛擬機器 (VM) 執行個體上,您可以使用磁碟區陰影複製服務 (VSS) 建立應用程式一致性快照,不必先停止執行個體或從 VM 中卸離磁碟。

事前準備

  • 建立 Windows 執行個體。
  • 查看建立快照的最佳做法。
  • 如果尚未設定驗證,請先完成設定。驗證可確認您的身分,以便存取 Google Cloud 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列其中一個選項,向 Compute Engine 進行驗證:

    選取這個頁面上範例的預計用途分頁:

    控制台

    使用 Google Cloud 控制台存取 Google Cloud 服務和 API 時,不需要設定驗證。

    gcloud

    1. 安裝 Google Cloud CLI。 完成後,執行下列指令來初始化 Google Cloud CLI:

      gcloud init

      如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。

  • 設定預設區域和可用區。
  • REST

    如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。

      安裝 Google Cloud CLI。

      如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。

    詳情請參閱 Google Cloud 驗證說明文件中的「使用 REST 進行驗證」。

必要角色和權限

如要取得建立 Windows VSS 快照所需的權限,請要求管理員授予您專案的下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

這些預先定義的角色具備建立 Windows VSS 快照所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:

所需權限

您必須具備下列權限,才能建立 Windows VSS 快照:

  • 專案的 compute.snapshots.create
  • compute.disks.createSnapshot 磁碟

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

支援的磁碟類型

您可以為連結至 Windows 執行個體的 Persistent Disk 磁碟區建立 VSS 快照。

Hyperdisk 磁碟區不支援 guest-flush 或 (VSS)。如要為 Hyperdisk 磁碟區建立應用程式一致性快照,您必須先手動暫停應用程式,再建立快照,如「建立不使用 VSS 的快照」一文所述。

限制

Windows 上的磁碟快照有下列限制:

  • VSS 快照只支援具有 v20160810 以上版本映像檔的 Windows 執行個體。如果執行個體使用較舊的映像檔,請建立不使用 VSS 的快照。
  • 所連磁碟必須使用 NTFS、exFAT 或 ReFS 檔案系統。
  • 只有在您執行的是 VSS 感知應用程式,且這些應用程式可相互協調以建立穩定一致的資料備份時,VSS 快照才有助於保存資料。
  • 如果 VSS 快照作業未在 300 秒內完成,快照就會因逾時而失敗。
  • Hyperdisk 磁碟區不支援 VSS 快照。您必須建立快照,而不使用 VSS。

建立 Windows VSS 快照

您可以建立磁碟區陰影複製服務 (VSS) 快照,不必停止執行個體或從 VM 卸載磁碟。VSS 快照適用於備份及復原作業,可搭配支援 VSS 的應用程式使用。

VSS 快照的價格與一般永久磁碟或 Hyperdisk 快照相同,且只會根據快照總大小計費。

建立快照

控制台

  1. 前往 Google Cloud 控制台的「Create a Snapshot」(建立快照) 頁面。

    前往「Create a Snapshot」(建立快照) 頁面
  2. 輸入快照的「Name」(名稱)。
  3. 選取「快照類型」。預設為 STANDARD 快照,最適合用於長期備份和災難復原。

    選擇「Archive snapshot」(封存快照),即可更具成本效益地保留資料。

  4. 選用:輸入快照的說明。
  5. 在「來源磁碟」下方,選取要建立快照的現有磁碟。
  6. 在「Location」(位置) 部分,選擇快照儲存位置。

    系統會自動選取快照設定中指定的預先定義或自訂預設位置。如要覆寫快照設定,將快照儲存在自訂儲存位置,請執行下列步驟:

    1. 選擇快照的儲存位置類型。

    2. 在「Select location」(選取位置) 欄位,選擇要使用的特定區域或多區域。如要使用離來源磁碟最近的區域或多區域,請選取「Based on disk's location」(以磁碟位置為準)。
  7. 勾選「啟用與應用程式一致的快照」選項。
  8. 按一下 [Create] (建立) 以建立快照。

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
    
  • (預先發布) 如要在允許的區域中建立區域範圍快照,請加入 --region 旗標,指出要建立快照的位置。

    gcloud beta compute snapshots create SNAPSHOT_NAME \
        --region=SNAPSHOT_SCOPE_REGION
        --source-disk=SOURCE_DISK_NAME \
        --source-disk-zone=SOURCE_ZONE \
        --snapshot-type=SNAPSHOT_TYPE
    

更改下列內容:

  • SNAPSHOT_NAME:快照名稱。
  • SOURCE_ZONE:來源磁碟的可用區。
  • SOURCE_DISK_NAME:要建立快照的磁碟區名稱。
  • SNAPSHOT_TYPE:快照類型,可以是 STANDARD 或 ARCHIVE。如未指定快照類型,系統會建立 STANDARD 快照。
  • STORAGE_LOCATION:選用:如果是全域範圍的快照,請指定要儲存快照的 Cloud Storage 多重區域或 Cloud Storage 區域。你只能指定一個儲存位置。

    只有在想覆寫快照設定中預先定義或自訂的預設儲存位置時,才使用 --storage-location 參數。

  • SNAPSHOT_SCOPE_REGION:選用:如果是區域範圍快照,則為快照的範圍所屬區域。如果加入這個參數,就無法使用 --storage-location 參數。STORAGE_LOCATION 會自動設為 SNAPSHOT_SCOPE_REGION。

如要建立區域性 Persistent Disk 的 VSS 快照,請在上述範例中將 --source-disk-zone= 替換為 --source-disk-region=,並指定區域性 Persistent Disk 所在的區域。

Google Cloud CLI 會等待作業傳回 READY、FAILED 狀態,或達到最大逾時時間,並傳回快照的最後已知詳細資料。

REST

建立快照時,如要指明建立 VSS 快照,請在 POST 要求的compute.snapshots.insert 方法要求主體中加入 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,
    }
    
  • (預先發布版) 如要在允許的區域中建立區域範圍快照,請向 snapshots.insert 方法發出 POST 要求,並定義建立區域:

    POST https://compute.googleapis.com/compute/beta/projects/DESTINATION_PROJECT_ID/regions/SNAPSHOT_SCOPE_REGION/snapshots
    {
        "name": "SNAPSHOT_NAME",
        "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME",
        "snapshotType": "SNAPSHOT_TYPE"
    }
    

更改下列內容:

  • DESTINATION_PROJECT_ID:要在其中建立快照的專案 ID。
  • SNAPSHOT_NAME:快照的名稱。
  • SOURCE_PROJECT_ID:來源磁碟專案的 ID。
  • SOURCE_ZONE:來源磁碟的可用區。
  • SOURCE_DISK_NAME:要建立快照的磁碟名稱。
  • SNAPSHOT_TYPE:快照類型,可以是 STANDARD 或 ARCHIVE。 如果未指定快照類型,系統會建立 STANDARD 快照。
  • STORAGE_LOCATION:選用:如果是全域範圍的快照,請指定要儲存快照的 Cloud Storage 多重區域或 Cloud Storage 區域。你只能指定一個儲存位置。

    只有在想覆寫快照設定中預先定義或自訂的預設儲存位置時,才使用 storageLocations 參數。

  • SNAPSHOT_SCOPE_REGION:選用:如果是區域範圍快照,則為快照的範圍區域。如果加入這個參數,就無法使用 storageLocations 參數。系統會自動將 STORAGE_LOCATION設為 SNAPSHOT_SCOPE_REGION。

如要建立區域永久磁碟的 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 快照建立可寫入的磁碟

建立 VSS 快照時,Windows Server 會將快照中的磁碟區標示為唯讀。從 VSS 快照建立新磁碟時,該磁碟也會設為唯讀模式。

這可能會導致問題。舉例來說,如果您使用現有開機磁碟的 VSS 快照建立 VM 執行個體,並將該快照做為新開機磁碟,新開機磁碟上的唯讀標記會導致 VM 無法正確啟動。

如要解決這個問題,請按照下列步驟,從您使用 VSS 快照建立的任何新磁碟中移除唯讀標記:

  1. 確認磁碟已連接至 VM:

    • 如果從 VSS 快照建立的磁碟是非開機資料磁碟,您可以將該磁碟連結至任何新 VM 或現有 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。

如要在 Windows VM 上建立磁碟快照,而不使用 VSS,請按照下列步驟操作:

  1. 準備系統,以便擷取乾淨的快照
  2. 建立快照
  3. 重新掛接磁碟

準備系統以建立乾淨的快照

建立磁碟快照前,請確認快照與您想要的磁碟狀態一致。如果您在磁碟處於「不乾淨」狀態時建立快照,可能會強制執行磁碟檢查,並可能導致資料遺失。建議同步處理並卸載檔案系統。

同步處理檔案系統

如果無法卸載磁碟 (例如應用程式可能正在將資料寫入磁碟),可以同步處理檔案系統來清除磁碟緩衝區。如要同步處理檔案系統,請按照下列步驟操作:

  1. 登入 Windows VM。
  2. 從 Microsoft 下載並安裝同步工具。
  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
    

後續步驟