创建 Windows 应用一致性磁盘快照


在 Compute Engine 中,您可以使用快照备份磁盘数据。由于是增量快照,与创建完整的磁盘映像相比,您可获得更高的性能、更低的总存储费用。

应用一致性快照可捕获备份时应用数据的状态,所有应用事务已完成且所有待处理的写入都刷新到磁盘。 在 Windows 虚拟机上,使用卷影复制服务 (VSS) 创建应用一致性快照,而无需先停止实例或将磁盘与虚拟机分离。

准备工作

  • 创建 Windows 实例
  • 查看创建快照的最佳做法
  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以选择以下任一选项向 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 快照

您无需停止实例或将磁盘与虚拟机分离,即可创建卷影复制服务 (VSS) 快照。VSS 快照用于备份和恢复包含 VSS 感知型应用的系统。

VSS 快照的价格与常规永久性磁盘或 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:快照类型:STANDARDARCHIVE。如果未指定快照类型,系统会创建 STANDARD 快照。
    • STORAGE_LOCATION:可选:要存储快照的 Cloud Storage 多区域Cloud Storage 区域。请注意,您只能指定一个存储位置。

      仅当您想要替换快照设置中配置的预定义或自定义默认存储位置时,才应使用 --storage-location 参数。

    如需创建区域级永久性磁盘的 VSS 快照,请在前面的示例中将 --source-disk-zone= 替换为 --source-disk-region=,并指定区域级永久性磁盘所在的区域。

    Google Cloud CLI 将等到操作返回 READYFAILED 状态,或者等到操作达到超时时间上限并返回快照最新的已知详细信息。

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:快照类型:STANDARDARCHIVE。如果未指定快照类型,系统会创建 STANDARD 快照。
  • STORAGE_LOCATION:可选:要存储快照的 Cloud Storage 多区域Cloud Storage 区域。请注意,您只能指定一个存储位置。

    仅当您想要替换快照设置中配置的预定义或自定义默认存储位置时,才应使用 storageLocations 参数。

如需创建区域级永久性磁盘的 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 快照时,Windows Server 会将该快照中的卷标记为只读。从 VSS 快照创建新磁盘时,该磁盘也会设置为只读模式。

这可能会引起问题。例如,如果您通过现有启动磁盘的 VSS 快照创建包含新启动磁盘的虚拟机实例,则新启动磁盘上的只读标志将阻止虚拟机正常启动。

如需解决此问题,请按照以下步骤从通过 VSS 快照创建的任何新磁盘中移除只读标志:

  1. 确保磁盘已挂接到虚拟机:

    • 如果通过 VSS 快照创建的磁盘是非启动数据磁盘,则可以将该磁盘挂接到任何新的或现有的虚拟机。
    • 如果通过 VSS 快照创建的磁盘是启动磁盘,并且您希望使用它来启动虚拟机,则必须将磁盘暂时挂接到单独的现有虚拟机。完成以下步骤后,您可以从该虚拟机中分离磁盘并将其用于启动新的虚拟机实例。
  2. 登录挂接了该磁盘的 Windows 虚拟机

  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. 如果该磁盘是其他虚拟机的启动磁盘,请将启动磁盘文件与新磁盘签名同步。

    PS C:\> bcdboot DRIVE_LETTERWindows /s DRIVE_LETTER
    

    DRIVE_LETTER 替换为要同步的卷的盘符。例如,F 表示 F:\

在不使用 VSS 的情况下创建快照

在某些情况下,您可能需要在不使用 VSS 的情况下为挂接到 Windows 虚拟机的磁盘创建快照。

如需在不使用 VSS 的情况下在 Windows 虚拟机上创建磁盘快照,请执行以下操作:

  1. 为创建干净的快照准备系统
  2. 创建快照
  3. 重新装载您的磁盘
  4. 将磁盘标记为可用于读写

为创建干净的快照准备系统

在创建磁盘快照之前,请确保您要截取的快照与你所需的磁盘状态一致。如果您截取了处于“不洁净”状态的磁盘的快照,则系统可能会强制执行磁盘检查并可能导致数据丢失。请考虑同步文件系统并卸载文件系统。

同步文件系统

如果无法卸载磁盘(例如在应用可能正向磁盘写入数据的情况下),您可以同步文件系统以清空磁盘缓冲区。要同步您的文件系统,请执行以下操作:

  1. 登录您的 Windows 虚拟机。
  2. 从 Microsoft 下载并安装同步工具。
  3. 使应用停止向磁盘写入数据。
  4. 打开一个提升权限的命令提示符窗口。
  5. 在命令行窗口中,运行以下命令:

    PS C:\> sync DRIVE_LETTER
    

    DRIVE_LETTER 替换为要同步的卷的盘符。例如,F 表示 F:\

卸载磁盘

  1. 登录您的 Windows 虚拟机。

  2. 打开 PowerShell 命令提示符并运行 diskpart 工具。

    PS C:\> diskpart
    
  3. 确定您想要卸载并截取快照的磁盘。

    DISKPART> list disk
    
  4. 然后,使用您刚刚找到的磁盘编号选择磁盘。

    DISKPART> select disk DISK_NUMBER
    

    DISK_NUMBER 替换为您要重新装载的磁盘的编号。

  5. 卸载磁盘。

    DISKPART> offline disk
    

创建快照

重新装载您的磁盘

  1. 登录您的 Windows 虚拟机。

  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 虚拟机。

    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. 如果该磁盘是其他虚拟机实例的启动磁盘,请在 PowerShell 命令提示符中同步启动磁盘文件,使其与新磁盘签名同步。

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

    DRIVE_LETTER 替换为要同步的卷的盘符。例如,F 表示 F:\

后续步骤