Cuttlefish:快照和恢复

Android 15 介绍了如何拍摄和恢复 Cuttlefish 虚拟设备的快照。拍摄 Cuttlefish 设备的快照可让您将设备状态保存在磁盘上的映像中。然后,您可以恢复快照,以将 Cuttlefish 设备恢复到之前保存的状态。

您可以在各种自动化或手动工作流程中使用快照。当执行修改设备的过程时,您可以拍摄设备快照,以确保可以将设备恢复到指定状态。例如,当运行修改设备状态的测试套件,并且可能导致后续测试出现问题或不稳定时,您可以拍摄快照,以便在测试后将设备恢复到保存状态,从而确保后续测试干净地运行。

快照有用的另一个示例工作流程是测试应用的行为。当根据一组操作测试应用的行为时,您可以在应用运行时在操作之间拍摄快照,以便您恢复到该快照,而无需从头开始。例如,如果启动游戏需要很长的启动时间,您可以在到达主菜单后拍摄快照,以便您可以将设备恢复到该状态,从而跳过启动时间。

拍摄 Cuttlefish 设备的快照

拍摄设备快照时,必须暂停 Cuttlefish 设备,以确保 Cuttlefish 设备处于稳定状态。当设备暂停时,所有 vCPU 和设备都将停止,并且所有缓冲区都会将其状态推送到虚拟机。然后,快照会将 vCPU 状态、内存和设备状态保存到磁盘上的指定目标文件夹。

拍摄快照时,不支持 VirtiosFS,并且必须将其禁用。要禁用 VirtioFS,请在运行 cvd createcvd start 时传递参数 --enable_virtiofs=false

快照仅支持 SwiftShader (guest_swiftshader) GPU 模式。不支持其他加速图形模式

以下步骤介绍了启动 Cuttlefish 设备并拍摄快照的过程。

  1. 启动设备,同时禁用 VirtioFS。(然后您可以使用该设备。)

    cvd create --enable_virtiofs=false --gpu_mode=guest_swiftshader
  2. 通过运行带有以下标志的 cvd snapshot_take 来拍摄快照

    • --force:如果指定的快照路径中存在文件夹,则此标志可确保删除现有文件夹,并在快照路径中创建一个包含快照的新文件夹

    • --auto_suspend:在拍摄快照之前暂停设备,并在拍摄快照之后恢复设备。

    • --snapshot_path:在其中创建包含快照的新文件夹的指定路径。

    cvd snapshot_take --force --auto_suspend \
    --snapshot_path=PATH

恢复 Cuttlefish 设备

恢复 Cuttlefish 设备快照时,必须停止拍摄快照的 Cuttlefish 实例。如果实例已停止,则无需执行进一步操作,即可恢复快照。

要恢复 Cuttlefish 设备的快照,请使用 cvd create 启动设备,并包含快照路径。如果拍摄快照的 Cuttlefish 设备的基本实例编号与当前 Cuttlefish 实例的基本实例编号不同,请使用 --base_instance_num 标志传递该基本实例编号。

cvd create --snapshot_path=PATH \
--base_instance_num=ID

暂停 Cuttlefish 设备

您可以暂停 Cuttlefish 设备,而无需拍摄快照(不使用磁盘空间来保存状态)。要暂停 Cuttlefish 设备,请运行

cvd suspend

恢复 Cuttlefish 设备

要恢复已暂停的 Cuttlefish 设备,请运行

cvd resume

验证快照/恢复功能

可以通过运行以下测试来验证快照/恢复功能

atest SnapshotTest