Auf dieser Seite wird beschrieben, wie Sie virtuelle Cuttlefish-Geräte neu starten und zurücksetzen. Das Zurücksetzen eines Cuttlefish-Geräts auf den ursprünglichen Laufwerkszustand wird im Befehlszeilentool als Powerwash bezeichnet.
Wenn Sie automatisierte oder manuelle Workflows mit mehreren verschiedenen Verfahren ausführen, z. B. Testsuiten, sorgt das Zurücksetzen des Cuttlefish-Geräts zwischen den Verfahren dafür, dass das Verhalten der einzelnen Verfahren unabhängig ist. Wenn der Laufwerkszustand nicht zurückgesetzt wird, kann ein Verfahren das Verhalten des folgenden Verfahrens beeinflussen.
Bei den auf dieser Seite beschriebenen Verfahren zum Neustarten und Zurücksetzen wird davon ausgegangen, dass Sie ein Cuttlefish-Gerät erstellt und einen bestimmten Zustand auf dem Laufwerk festgelegt haben.
# Launch a devicelaunch_cvd# Make some modifications to the deviceadb shell touch /storage/self/primary/Documents/hello# Check the device stateadb shell ls /storage/self/primary/Documents
Von diesem Ausgangspunkt aus können Sie die folgenden Neustart- und Zurücksetzvorgänge verwenden:
- Wenn das Gerät reagiert, führen Sie einen sauberen Neustart mit
adb rebootdurch. - Wenn das Gerät nicht reagiert, führen Sie einen unsauberen Neustart mit
restart_cvddurch. - Setzen Sie den Gerätezustand mit
powerwash_cvdzurück. - Beenden Sie das Gerät und ändern Sie die
launch_cvd-Argumente, während Sie den Gerätezustand beibehalten oder den Gerätezustand erzwingen.
Schnelle Zurücksetzung von Cuttlefish implementieren
Cuttlefish verwendet eine schnelle Zurücksetzung, die vom Schutz der Laufwerke hinter qcow2-Laufwerk-Overlaysabhängt. Standardmäßig behandelt Cuttlefish ursprüngliche Laufwerke als Lesezugriff und verwendet Overlays, um Laufwerkschreibvorgänge zu erfassen.
Die Verwendung von Copy-on-Write-Overlays hat jedoch Nachteile. Insbesondere externe Änderungen an den zugrunde liegenden Laufwerken führen zu Inkompatibilitäten mit vorhandenen Overlays und zu einem inkonsistenten Laufwerkszustand. Cuttlefish erstellt die Overlays neu, wenn inkompatible Änderungen erkannt werden.
Das erzwungene Neuerstellen der Overlays ist unerwünscht, wenn Sie eine Funktion entwickeln, bei der ein Teil des Laufwerks in einem bestimmten initialisierten Zustand bleiben muss, während ein anderer Teil des Laufwerks ausgetauscht wird. Beispiel: Installieren einer App mit einer bestimmten Nutzerkonfiguration und anschließendes wiederholtes Austauschen des Kernels, um die Interaktion zwischen der App und verschiedenen Kernel-Builds zu testen. In diesem Fall kann es sinnvoll sein, die Overlays zu deaktivieren.
Geräte zurücksetzen
In den folgenden Abschnitten werden verschiedene Möglichkeiten beschrieben, ein Cuttlefish-Gerät auf den ursprünglichen Laufwerkszustand zurückzusetzen.
Ein Gerät zurücksetzen
So setzen Sie ein Cuttlefish-Gerät auf den ursprünglichen Laufwerkszustand zurück:
powerwash_cvdpowerwash_cvd fährt die virtuelle Maschine herunter, setzt alle Änderungen am Laufwerk der virtuellen Maschine zurück, startet die virtuelle Maschine neu und wartet, bis der Startvorgang abgeschlossen ist. Die Instanz behält die ursprünglichen Flags bei, die an launch_cvd übergeben wurden.
In einer Multi-Tenant-Konfiguration,
powerwash_cvd startet eine einzelne Instanz aus der Instanzgruppe neu:
powerwash_cvd --instance_num=NAlle Geräte zurücksetzen
So beenden Sie ein oder mehrere Geräte und setzen sie auf den ursprünglichen Laufwerkszustand zurück:
stop_cvdlaunch_cvd --resume=false
stop_cvd führt ein unsauberes Herunterfahren durch und beendet das Gerät.
Wenn Sie launch_cvd --resume=false hinzufügen, werden in Cuttlefish alle Dateien im Zusammenhang mit der zuvor ausgeführten Instanz gelöscht, bevor die nächste Ausführung gestartet wird. Sie können beliebig viele zusätzliche launch_cvd Flags hinzufügen.
In einer Multi-Tenant-Konfiguration,stop_cvd fährt die gesamte Instanzgruppe herunter.
Geräte neu starten
In den folgenden Abschnitten werden verschiedene Möglichkeiten beschrieben, ein Gerät neu zu starten, ohne es auf den ursprünglichen Laufwerkszustand zurückzusetzen.
Sauberer Neustart
So führen Sie einen sauberen Neustart des Geräts durch, wenn es reagiert:
adb rebootadb reboot führt das Gerät durch den vollständigen Herunterfahrvorgang, synchronisiert Änderungen mit dem Laufwerk und sorgt dafür, dass Prozesse beendet werden. Cuttlefish-Hostprozesse sind nicht beteiligt. Dieses Verfahren ist möglicherweise nicht verfügbar, wenn das Gerät in einen fehlerhaften Zustand versetzt wurde und nicht mehr reagiert.
Wenn Sie einen sauberen Neustart eines einzelnen Cuttlefish-Geräts in einer
Multi-Tenant-Konfiguration durchführen möchten, geben Sie die
Seriennummer
des Zielgeräts beim Ausführen von adb-reboot an. Wenn kein Zielgerät angegeben ist, startet adb kein Gerät neu.
adb -s SERIAL rebootUnsauberer Neustart
So führen Sie einen unsauberen Neustart durch, wenn das Gerät nicht reagiert:
restart_cvdrestart_cvd führt ein unsauberes Herunterfahren durch, indem das Cuttlefish-Gerät sofort heruntergefahren wird. restart_cvd entspricht dem Trennen und Wiederanschließen der Batterie an ein physisches Gerät. Laufwerkschreibvorgänge werden möglicherweise nicht beibehalten, wenn sie noch nicht abgeschlossen sind. restart_cvd wartet, bis das Gerät vollständig neu gestartet wurde, bevor es beendet wird.
In einer Multi-Tenant-Konfiguration,
restart_cvd startet eine einzelne Instanz aus der Instanzgruppe neu. Verwenden Sie das Flag instance_num, um anzugeben, welche Cuttlefish-Instanz neu gestartet werden soll.
restart_cvd --instance_num=NWenn --instance_num nicht verwendet wird, ist die Instanznummer standardmäßig 1.
Neustart mit anderen launch_cvd-Flags
So beenden Sie ein oder mehrere Geräte und starten sie mit anderen launch_cvd-Flags neu:
stop_cvdlaunch_cvd NEW_FLAG
stop_cvd führt ein unsauberes Herunterfahren ähnlich wie restart_cvd durch. Das Gerät wird in einen inaktiven Zustand versetzt, der später mit einem anderen launch_cvd-Befehl wieder gestartet werden kann. Wie bei restart_cvd werden Laufwerkschreibvorgänge möglicherweise nicht beibehalten, wenn sie nicht vollständig mit dem Laufwerk synchronisiert wurden. Wenn Sie Daten sicher auf dem Laufwerk speichern möchten, führen Sie zuerst adb reboot aus.
adb rebootstop_cvdlaunch_cvd NEW_FLAG
Wenn Änderungen an launch_cvd-Flags eine Änderung am Laufwerkslayout erzwingen, die mit der Copy-on-Write-Implementierung inkompatibel ist, ignoriert launch_cvd die alten Laufwerksänderungen und setzt den ursprünglichen Laufwerkszustand wieder her. Eine vollständige
Liste der Flags finden Sie unter Flags.
Ohne Overlay ausführen
So deaktivieren Sie die Unterstützung für die schnelle Zurücksetzung:
launch_cvd --use_overlay=falseBei --use_overlay=false werden die Cuttlefish-Laufwerksdateien als Lese-/Schreibdateien behandelt und Änderungen werden in diese Dateien übernommen.
Wenn Sie zwischen --use_overlay=false und dem Standardwert wechseln, können Kompatibilitätsfehler auftreten. So erzwingen Sie das Bereinigen des vorherigen Gerätezustands:
stop_cvdrm $HOME/cuttlefish $HOME/cuttlefish_runtime $HOME/cuttlefish_assembly
Cuttlefish kann den Übergang zwischen den Abläufen mit und ohne Overlays nicht sicher verarbeiten. Daher werden bei dieser Änderung alle Cuttlefish-Verwaltungszustände gelöscht. Wenn externe Laufwerksdateien geändert und später zusammen mit Overlays wiederverwendet werden, werden die früheren Änderungen als Teil des Ausgangszustands betrachtet.
Flags
Sie können beim Starten eines Cuttlefish-Geräts mit launch_cvd Argumente mit Flags hinzufügen. Bei bestimmten Flags
(Flags, die gleich bleiben müssen) kann es jedoch zu Datenverlusten kommen, wenn Flags zwischen launch_cvd Befehlen geändert werden. Damit es bei der Ausführung einer Befehlsfolge, die launch_cvd, stop_cvd und dann noch einmal launch_cvd enthält, nicht zu Datenverlusten kommt, verwenden Sie für jeden launch_cvd-Befehl dieselben Flags. Wenn das erste launch_cvd Flag beispielsweise das Argument
--kernel_path=KERNEL_PATH enthält, muss der zweite launch_cvd Aufruf
auch dasselbe --kernel_path=KERNEL_PATH
Argument enthalten. Andernfalls gehen alle Dateisystemänderungen, die vor stop_cvd vorgenommen wurden, beim
zweiten launch_cvd Aufruf verloren. Die von KERNEL_PATH referenzierte Datei muss auch denselben Inhalt haben.
Einige Flags können zwischen launch_cvd-Aufrufen geändert werden. In den folgenden Abschnitten sind die Flags aufgeführt, die gleich bleiben müssen, um Datenverluste zu vermeiden, und die Flags, die ohne Datenverluste geändert werden können. Weitere Informationen zu einzelnen Flags finden Sie in der Quelle (flags.cc, disk_flags.cc) oder führen Sie launch_cvd --help aus.
Flags, die gleich bleiben müssen
Diese Flags müssen von einem launch_cvd-Aufruf zum nächsten gleich bleiben, um Datenverluste zu vermeiden:
--data_policy--blank_data_image_mb--kernel_path--initramfs_path--vm_manager--enable_minimal_mode--bootloader--protected_vm--userdata_format--use_overlay--system_image_dir--boot_image--init_boot_image--data_image--super_image--misc_image--misc_info_txt--metadata_image--vendor_boot_image--vbmeta_image--vbmeta_system_image--linux_kernel_path--linux_initramfs_path--linux_root_image--fuchsia_zedboot_path--fuchsia_multiboot_bin_path--fuchsia_root_image--custom_partition_path--blank_metadata_image_mb
Flags, die geändert werden können
Diese Flags können zwischen launch_cvd-Aufrufen sicher geändert werden, ohne dass Daten verloren gehen:
--displays_textproto--displays_binproto--cpus--gdb_port--display0--display1--display2--display3--x_res--y_res--dpi--refresh_rate_hz--extra_kernel_cmdline--extra_bootconfig_args--guest_enforce_security--memory_mb--serial_number--use_random_serial--gpu_mode--hwcomposer--gpu_capture_binary--enable_gpu_udmabuf--enable_gpu_angle--use_allocd--pause_in_bootloader--enable_host_bluetooth--rootcanal_instance_num--rootcanal_args--netsim--bluetooth_controller_properties_file--bluetooth_commands_file--enable_sandbox--seccomp_policy_dir--start_webrtc--webrtc_assets_dir--webrtc_certs_dir--start_webrtc_sig_server--webrtc_sig_server_addr--webrtc_sig_server_port--tcp_port_range--udp_port_range--webrtc_sig_server_path--webrtc_sig_server_secure--verify_sig_server_certificate--webrtc_device_id--uuid--daemon--setupwizard_mode--enable_bootanimation--qemu_binary_dir--crosvm_binary--gem5_binary_dir--gem5_checkpoint_dir--gem5_debug_file--gem5_debug_flags--restart_subprocesses--enable_vehicle_hal_grpc_server--boot_slot--num_instances--report_anonymous_usage_stats--ril_dns--kgdb--start_gnss_proxy--gnss_file_path--fixed_location_file_path--enable_modem_simulator--modem_simulator_sim_type--console--enable_kernel_log--vhost_net--vhost_user_mac80211_hwim--wmediumd_config--ap_rootfs_image--ap_kernel_image--record_screen--smt--vsock_guest_cid--secure_hals--use_sdcard--enable_audio--camera_server_port--modem_simulator_count--blank_sdcard_image_mb--adb_mode