Cuttlefish:快照和還原

Android 15 介紹了如何擷取 Cuttlefish 虛擬裝置的快照,以及還原快照。擷取 Cuttlefish 裝置的快照,即可將裝置狀態儲存至磁碟上的圖片。接著,您可以還原快照,讓 Cuttlefish 裝置恢復先前儲存的狀態。

您可以在各種自動或手動工作流程中使用快照。執行修改裝置的程序時,您可以為裝置拍攝快照,確保裝置可還原至指定狀態。舉例來說,如果執行的測試套件會修改裝置狀態,且可能導致後續測試出現問題或不穩定,您可以拍攝快照,以便在測試後將裝置還原至已儲存的狀態,確保後續測試能順利執行。

另一個快照實用的例子是測試應用程式行為。在根據一組動作測試應用程式行為時,您可以在應用程式執行期間在動作之間擷取快照,以便還原該快照,而無須從頭重新啟動。舉例來說,如果啟動遊戲需要很長的時間,您可以在進入主選單後拍攝快照,以便將裝置還原至該狀態,跳過啟動時間。

拍攝 Cuttlefish 裝置的快照

擷取裝置快照時,必須暫停 Cuttlefish 裝置,確保 Cuttlefish 裝置處於穩定狀態。裝置處於暫停狀態時,所有 vCPU 和裝置都會停止,所有緩衝區也會將狀態推送至 VM。然後快照會將 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