Sepien: Snapshot und Wiederherstellung

In Android 15 wird erläutert, wie Sie einen Snapshot eines virtuellen Sepia-Geräts erstellen und wiederherstellen. Wenn du einen Snapshot eines Sepia-Geräts aufnimmst, kannst du den Status des Geräts in einem Image auf dem Laufwerk speichern. Sie können den Snapshot dann wiederherstellen, um ein Cuttlefish-Gerät in den zuvor gespeicherten Zustand zu versetzen.

Snapshots lassen sich in verschiedenen automatisierten oder manuellen Workflows verwenden. Wenn Sie ein Verfahren ausführen, bei dem das Gerät geändert wird, können Sie einen Snapshot des Geräts erstellen, damit Sie das Gerät in einen bestimmten Zustand wiederherstellen können. Wenn Sie beispielsweise Test-Suites ausführen, die den Status des Geräts ändern und möglicherweise Probleme oder Instabilitäten bei den folgenden Tests verursachen können, können Sie einen Snapshot erstellen, damit Sie das Gerät nach einem Test in den gespeicherten Zustand zurückversetzen können. So können Sie dafür sorgen, dass nachfolgende Tests ordnungsgemäß ausgeführt werden.

Ein weiterer Beispiel-Workflow, in dem Snapshots nützlich sind, ist das Testen des Verhaltens einer App. Wenn Sie das Verhalten einer App basierend auf einer Reihe von Aktionen testen, können Sie zwischen den Aktionen einen Snapshot erstellen, während die App ausgeführt wird, um diesen Snapshot wiederherzustellen, ohne von vorn beginnen zu müssen. Wenn beispielsweise das Starten eines Spiels sehr lange dauert, können Sie einen Screenshot erstellen, nachdem Sie das Hauptmenü erreicht haben. So können Sie das Gerät in diesen Zustand wiederherstellen und die Startzeit überspringen.

Snapshot eines Cuttlefish-Geräts erstellen

Wenn Sie von einem Gerät einen Snapshot erstellen, muss das Sepia-Gerät gesperrt werden, damit es stabil bleibt. Wenn das Gerät ausgesetzt ist, werden alle vCPUs und Geräte beendet und alle Zwischenspeicher übertragen ihren Status an die VM. Der Snapshot speichert dann den Status der vCPU, des Arbeitsspeichers und des Geräts auf dem Laufwerk im angegebenen Zielordner.

VirtiosFS wird nicht unterstützt und muss beim Erstellen eines Snapshots deaktiviert werden. Wenn Sie VirtioFS deaktivieren möchten, übergeben Sie das Argument --enable_virtiofs=false, wenn Sie cvd create oder cvd start ausführen.

Für Snapshots wird nur der GPU-Modus „SwiftShader“ (guest_swiftshader) unterstützt. Andere Grafikmodi mit Beschleunigung werden nicht unterstützt.

In den folgenden Schritten wird beschrieben, wie Sie ein Cuttlefish-Gerät starten und einen Snapshot erstellen.

  1. Ein Gerät starten und dabei VirtioFS deaktivieren Sie können das Gerät dann verwenden.

    cvd create --enable_virtiofs=false --gpu_mode=guest_swiftshader
  2. Erstellen Sie einen Snapshot, indem Sie cvd snapshot_take mit den folgenden Flags ausführen:

    • --force: Wenn sich unter dem angegebenen Snapshot-Pfad ein Ordner befindet, wird dieser Ordner mit diesem Flag gelöscht und ein neuer Ordner mit dem Snapshot wird am Snapshot-Pfad erstellt.

    • --auto_suspend: Das Gerät wird vor dem Erstellen des Snapshots angehalten und nach dem Erstellen fortgesetzt.

    • --snapshot_path: Der angegebene Pfad, unter dem ein neuer Ordner mit dem Snapshot erstellt wird.

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

Cuttlefish-Gerät wiederherstellen

Beim Wiederherstellen eines Cuttlefish-Geräte-Snapshots muss die Cuttlefish-Instanz, für die der Snapshot erstellt wurde, beendet werden. Wenn die Instanz bereits angehalten wurde, sind keine weiteren Maßnahmen erforderlich und der Snapshot kann wiederhergestellt werden.

Wenn Sie einen Snapshot eines Cuttlefish-Geräts wiederherstellen möchten, starten Sie ein Gerät mit cvd create und geben Sie den Snapshot-Pfad an. Wenn sich die Basisinstanznummer des Cuttlefish-Geräts, auf dem der Snapshot erstellt wurde, von der Basisinstanznummer der aktuellen Cuttlefish-Instanz unterscheidet, übergeben Sie diese Basisinstanznummer mit dem Flag --base_instance_num.

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

Cuttlefish-Gerät sperren

Sie können ein Cuttlefish-Gerät anhalten, ohne einen Snapshot zu erstellen. Es wird kein Speicherplatz zum Speichern des Status verwendet. Führen Sie folgenden Befehl aus, um ein Sepia-Gerät anzuhalten:

cvd suspend

Cuttlefish-Gerät fortsetzen

Führen Sie folgenden Befehl aus, um ein gesperrtes Cuttlefish-Gerät fortzusetzen:

cvd resume

Snapshot-/Wiederherstellungsfunktion validieren

Die Funktion „Snapshot/Restore“ (Snapshot/Wiederherstellen) kann mit dem folgenden Test überprüft werden:

atest SnapshotTest