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

在 Compute Engine 中,您可以使用標準快照備份磁碟資料。由於快照是增量資料,因此與建立完整的磁碟映像檔相較,您可以較高效能建立快照,同時還能減少儲存空間的總費用。

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

必要角色和權限

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

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

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

所需權限

如要建立 Windows VSS 快照,必須具備下列權限:

  • 專案的 compute.snapshots.create
  • compute.disks.createSnapshot 磁碟的權限
  • 如要建立已連結服務帳戶的執行個體啟動磁碟快照,請在執行個體的服務帳戶上執行 iam.serviceAccounts.actAs

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

限制

Windows 磁碟快照有下列限制:

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

建立 Windows VSS 快照

您可以建立磁碟區陰影複製服務 (VSS) 快照,而不必停止執行個體或從 VM 卸離磁碟。VSS 快照是用來備份及還原包含 VSS 感知應用程式的系統。

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

建立快照

控制台

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

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

    選擇「封存快照」,以更符合成本效益的方式保留資料。

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

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

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

      • 若選擇「Multi-regional」(多區域),費用較高但提供較高可用性。
      • 若選擇「Regional snapshots」(區域快照),將能進一步控管資料的實際位置,而且費用也較低。
    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:快照類型,可以是 STANDARDARCHIVE。 如果未指定快照類型,系統會建立 STANDARD 快照。
  • STORAGE_LOCATION:選用:如果是全域範圍的快照,則為您要儲存快照的 Cloud Storage 多地區Cloud Storage 地區。您只能指定一個儲存位置。

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

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

如要建立地區永久磁碟的 VSS 快照,請在先前的範例中將 --source-disk-zone= 替換為 --source-disk-region=,並指定地區永久磁碟所在的地區。

Google Cloud CLI 會等到作業傳回 READYFAILED 狀態之後,或是等到作業達到逾時時間上限,並傳回已知的最新快照詳細資料之後,才會開始運作。

REST

建立快照時,請在對 compute.snapshots.insert 方法發出的 POST 要求主體中加入 guestFlush 屬性,表示您要建立 VSS 快照。

您可以在快照設定定義的儲存位置政策中建立快照,也可以使用所選的替代儲存位置。詳情請參閱選擇快照儲存位置

  • 如要在快照設定中指定的預先定義或自訂預設位置建立快照,請對 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:快照類型,可以是 STANDARDARCHIVE。 如果未指定快照類型,系統會建立 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",
建立地區永久磁碟的快照時,請改用這行:
"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 下載並安裝 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
    

後續步驟