您可以为挂接到 Linux 虚拟机 (VM) 实例的磁盘创建应用一致性快照。一般而言,磁盘快照的质量取决于应用从您在繁重的写入工作负载期间创建的快照中恢复的能力。 应用一致性快照可捕获备份时应用数据的状态,所有应用事务已完成且所有待处理的写入都刷新到磁盘。
如需创建应用一致性快照,请在创建快照之前暂停将数据写入磁盘、刷新磁盘缓冲区并同步文件系统的应用或操作系统进程。根据应用的不同,可能需要执行这些步骤和其他步骤,以确保所有应用事务都已完成并在备份中捕获。
如需创建磁盘的应用一致性快照,请按照以下过程操作:
- 为了使访客环境做好应用一致性的准备,请创建自定义快照脚本以在捕获快照之前和之后运行
- 在虚拟机 (VM) 实例上配置快照设置。
- 然后创建一个启用了 guest-flush选项的快照。guest-flush选项可启动快照前后的脚本。
准备工作
- 创建 Linux 虚拟机。
- 更新访客环境。
- 
  
  如果您尚未设置身份验证,请进行设置。身份验证用于验证您的身份,以便访问 Google Cloud 服务和 API。如需从本地开发环境运行代码或示例,您可以通过选择以下选项之一向 Compute Engine 进行身份验证:
  
   
   
     
   
  
   
   
     
   
  
   
   
     
   
  
 
 
 
  
    
      Select the tab for how you plan to use the samples on this page: ConsoleWhen you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication. gcloud- 
 
 
  
  
   
   
  
   
   
  
   
   
     
   
  
  
   
   
  
   
   
  
   
   
  
 
 
   
   
      安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI: gcloud init如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。 
- Set a default region and zone.
 REST如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭证。 安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI: gcloud init如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。 如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。 所需的角色和权限如需获得管理标准快照所需的权限,请让您的管理员为您授予项目的以下 IAM 角色: - 
  
  
    
      Compute Instance Admin (v1)  (roles/compute.instanceAdmin.v1)
- 如需连接到可以作为服务账号运行的虚拟机:
  Service Account User  (v1)  (roles/iam.serviceAccountUser)
 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。 这些预定义角色可提供管理标准快照所需的权限。如需查看所需的确切权限,请展开所需权限部分: 所需权限您需要具备以下权限才能管理标准快照: - 
                创建可用区级磁盘的快照需要以下权限:
                - 针对项目的 compute.snapshots.create
- 
                      针对磁盘的 compute.disks.createSnapshot
 
- 针对项目的 
- 
                使用磁盘上的数据创建区域级磁盘的快照需要以下权限:
                - 针对项目的 compute.snapshots.create
- 
                      针对源虚拟机的 compute.instances.useReadOnly
- 
                      针对磁盘的 compute.disks.createSnapshot
 
- 针对项目的 
- 
                通过副本恢复检查点创建区域级磁盘的快照需要以下权限:
                - 针对项目的 compute.snapshots.create
- 
                      针对磁盘的 compute.disks.createSnapshot
 
- 针对项目的 
- 
                如需创建快照时间表:针对项目或组织的 compute.resourcePolicies.create
- 
                将快照时间表挂接到磁盘需要以下权限:
                - 
                      针对磁盘的 compute.disks.addResourcePolicies
- 
                      针对资源政策的 compute.resourcePolicies.use
 
- 
                      针对磁盘的 
- 
                删除快照需要以下权限:
                - 
                      针对快照的 compute.snapshots.delete
- 针对项目的 compute.snapshots.list
 
- 
                      针对快照的 
 限制在 Linux 上创建应用一致性快照存在以下限制: - 只能通过快照操作前后的自定义脚本的行为(而非快照操作本身)保证应用一致性。
- 在快照创建请求中使用 guest-flush选项时,如果脚本返回错误或达到超时限制,则不会创建快照。
 创建快照操作前后的脚本在继续操作之前,请更新访客环境,以便在 Linux 虚拟机上运行最新的软件。 为了提高应用一致性,请创建在截取快照之前和之后运行的快照 shell 脚本。您可以将 pre 和 post 脚本用于以下操作: 以下代码示例展示了一个快照前脚本。请注意前导 #!字符。#!/bin/bash sudo fsfreeze -f [example-disk-location] 以下代码示例展示了一个简单的快照后脚本。请注意前导 #!字符。#!/bin/bash sudo fsfreeze -u [example-disk-location] 您必须将脚本保存在虚拟机上的 /etc/google/snapshots/目录中。前脚本的完整路径必须是/etc/google/snapshots/pre.sh,而后脚本的完整路径必须是/etc/google/snapshots/post.sh。在脚本中引用特定磁盘传递给快照操作前后脚本的第一个参数是您要为其创建快照的磁盘列表。您可以在脚本中使用此参数进行各种检查。例如,如果您的虚拟机挂接了多个磁盘,但您仅在快照请求中指定了一个磁盘,则可以检查正在为哪个磁盘截取快照。 参数格式如下: - SCSI 挂接的磁盘:<target/lun>对的逗号分隔列表。
- 挂接了 NVME 的磁盘:以英文逗号分隔的 <nvme:namespace>对列表。
 例如,您的挂接了 SCSI 的启动磁盘可能显示为 1/0,而挂接到该虚拟机的其他磁盘可能显示为2/0。修改访客环境配置文件通过更新虚拟机上的特定配置文件来配置应用一致的快照设置。 - 打开或创建客机环境配置文件。 - edit /etc/default/instance_configs.cfg
- 将以下部分添加到配置文件中,然后保存更改并退出编辑器。 - [Snapshots] enabled = ENABLED timeout_in_seconds = TIMEOUT_SECONDS - 替换以下内容: - ENABLED:设置为- true以启用应用一致性快照功能。默认值为- false。
- TIMEOUT_SECONDS:快照前或快照后脚本在超时之前完成运行所需的秒数。这个整数值必须介于 0 到 300 之间。默认值为- 60。
 
- 重启访客代理以使用新的配置设置。 - $ sudo systemctl restart google-guest-agent.service
 创建启用guest-flush的快照使用 Google Cloud 控制台、Google Cloud CLI 或 REST 创建启用了 guest-flush选项的快照。这会在捕获快照之前和之后开始运行快照前后脚本。控制台- 前往 Google Cloud 控制台的创建快照页面。 转到“创建快照”页面
- 输入快照名称。
- 
    选择快照类型。默认值为 STANDARD快照,这最适合长期备份和灾难恢复。选择归档快照,实现更经济高效的数据保留。 
- 可选:输入配置的说明。
- 在来源磁盘下,选择您想要创建其快照的现有磁盘。
- 在位置部分,选择快照存储位置。 - 系统会自动选择快照设置中定义的预定义或自定义默认位置。(可选)您可以通过执行以下操作来替换快照设置并将快照存储在自定义存储位置: 
- 勾选启用应用一致性快照选项。
- 点击创建以创建快照。
 gcloud您可以在快照设置定义的存储位置政策中创建快照,也可以使用您选择的其他存储位置创建快照。如需了解详情,请参阅选择快照存储位置。 - 如需在快照设置中配置的预定义或自定义默认位置创建快照,请使用 - 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。
 REST您可以在快照设置定义的存储位置政策中创建快照,也可以使用您选择的其他存储位置创建快照。如需了解详情,请参阅选择快照存储位置。 - 
    
    如需在快照设置中配置的预定义或自定义默认位置创建快照,请向 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。
 创建启用了guest-flush的快照时间表使用预定快照定期自动备份可用区级和区域级永久性磁盘及 Google Cloud Hyperdisk。如果要为备份安排应用一致性快照,请在创建快照时间表时使用 --guest-flush选项,以便在每个预定快照之前和之后执行快照前后脚本。例如,配置客机环境配置文件和创建自定义脚本后,以下命令会创建每小时的应用一致性快照: gcloud compute resource-policies create snapshot-schedule SCHEDULE_NAME \ --description "MY HOURLY SNAPSHOT SCHEDULE" \ --start-time 22:00 \ --hourly-schedule 4 \ --guest-flush \ --max-retention-days SNAPSHOT_RETENTION_AGE 如需了解详情,请参阅磁盘快照时间表简介。 问题排查通过查看日志和检查配置来排查快照时间表和创建过程问题。 查看日志- 前往Google Cloud 控制台中的 Logs Explorer 页面: 
- 将以下查询粘贴到日志查询窗格中: - resource.type="gce_disk" jsonPayload.event_subtype="compute.disks.createSnapshot" OR protoPayload.methodName="ScheduledSnapshots"
- 运行查询并调查日志:   
 检查配置- 如果在实例上找不到快照前或快照后脚本来冻结文件系统上的活动/IOPS,则不会创建快照。确保您已按照创建快照前和快照后脚本中的步骤操作。 
- 如果存在脚本错误或超时,则不会创建快照。查看准备一致的快照。请注意,您可以在设置中配置的最长超时时间为 300 秒。尝试使用示例脚本重复整个过程。 
- 磁盘必须挂接到虚拟机才能捕获启用了 - guest-flush的磁盘快照。如需了解如何创建 Linux 虚拟机并挂接磁盘,请参阅创建虚拟机。
 后续步骤如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。 最后更新时间 (UTC):2025-10-29。 -