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 Festplattenstatus wird im Befehlszeilentool als Powerwash bezeichnet.
Wenn Sie automatisierte oder manuelle Workflows mit mehreren verschiedenen Verfahren ausführen, z. B. Testsuites, wird durch das Zurücksetzen des Cuttlefish-Geräts zwischen den Verfahren sichergestellt, dass das Verhalten der einzelnen Verfahren unabhängig ist. Wenn der Laufwerkstatus nicht zurückgesetzt wird, kann sich ein Vorgang auf das Verhalten des folgenden Vorgangs auswirken.
Bei den auf dieser Seite beschriebenen Verfahren zum Neustarten und Zurücksetzen wird davon ausgegangen, dass Sie ein Cuttlefish-Gerät erstellt und einen Zustand auf der Festplatte 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ücksetzungsabläufe verwenden:
- Wenn das Gerät reagiert, führen Sie mit
adb reboot
einen sauberen Neustart durch. - Wenn das Gerät nicht reagiert, führe einen unsauberen Neustart mit
restart_cvd
durch. - Setzen Sie den Gerätestatus mit
powerwash_cvd
zurück. - Stoppen Sie das Gerät und ändern Sie die
launch_cvd
-Argumente, während Sie den Gerätestatus beibehalten oder den Gerätestatus erzwingen.
Implementierung des Schnellzurücksetzens in Cuttlefish
Cuttlefish verwendet eine schnelle Reset-Implementierung, die vom Schutz der Laufwerke hinter qcow2-Laufwerk-Overlays abhängt. Standardmäßig behandelt Cuttlefish Original-Laufwerke als schreibgeschützt und verwendet Overlays, um Schreibvorgänge auf dem Laufwerk zu erfassen.
Die Verwendung von Copy-on-Write-Overlays hat jedoch auch Nachteile. Externe Änderungen an den zugrunde liegenden Laufwerken führen zu Inkompatibilitäten mit vorhandenen Overlays und zu einem inkonsistenten Laufwerkstatus. Cuttlefish erstellt die Overlays neu, wenn inkompatible Änderungen erkannt werden.
Das erzwungene Neuerstellen der Overlays ist unerwünscht, wenn Sie ein Feature entwickeln, bei dem ein Teil der Festplatte in einem bestimmten initialisierten Zustand bleiben muss, während ein anderer Teil der Festplatte ausgetauscht wird. Beispielsweise kann eine App mit einer bestimmten Nutzerkonfiguration installiert und dann der Kernel wiederholt ausgetauscht werden, um die Interaktion zwischen der App und verschiedenen Kernel-Builds zu testen. In diesem Fall kann es sich lohnen, die Overlays zu deaktivieren.
Geräte zurücksetzen
In den folgenden Abschnitten wird beschrieben, wie Sie ein Cuttlefish-Gerät auf den ursprünglichen Festplattenstatus zurücksetzen.
Ein Gerät zurücksetzen
So setzen Sie ein Cuttlefish-Gerät auf seinen ursprünglichen Festplattenstatus zurück:
powerwash_cvd
powerwash_cvd
fährt die VM herunter, setzt alle Änderungen an der VM-Festplatte zurück, startet die VM neu und wartet, bis sie hochgefahren ist. Die Instanz behält die ursprünglichen Flags bei, die an launch_cvd
übergeben wurden.
In einer Multi-Tenant-Konfiguration startet powerwash_cvd
eine einzelne Instanz aus der Instanzgruppe neu:
powerwash_cvd --instance_num=N
Alle Geräte zurücksetzen
So beenden Sie den Vorgang und setzen ein oder mehrere Geräte auf ihren ursprünglichen Laufwerkstatus zurück:
stop_cvd
launch_cvd --resume=false
Mit stop_cvd
wird das Gerät nicht ordnungsgemäß heruntergefahren und angehalten.
Wenn Sie --resume=false
zu launch_cvd
hinzufügen, werden alle Dateien, die mit der zuvor ausgeführten Instanz zusammenhängen, von Cuttlefish gelöscht, bevor der nächste Lauf gestartet wird. Sie können problemlos zusätzliche launch_cvd
-Flags hinzufügen.
In einer Konfiguration mit mehreren Mandanten wird durch stop_cvd
die gesamte Instanzgruppe heruntergefahren.
Geräte neu starten
In den folgenden Abschnitten wird beschrieben, wie Sie ein Gerät neu starten, ohne es auf den ursprünglichen Festplattenstatus zurückzusetzen.
Sauberer Neustart
Wenn das Gerät reagiert, führen Sie folgenden Befehl aus, um einen sauberen Neustart des Geräts durchzuführen:
adb reboot
adb reboot
führt das Gerät durch den vollständigen Herunterfahrvorgang, synchronisiert Änderungen auf der Festplatte und sorgt dafür, dass Prozesse beendet werden. Cuttlefish-Hostprozesse sind nicht beteiligt. Dieses Verfahren ist möglicherweise nicht verfügbar, wenn sich das Gerät in einem fehlerhaften Zustand befindet und nicht mehr reagiert.
Wenn Sie ein einzelnes Cuttlefish-Gerät in einer Konfiguration mit mehreren Mandanten neu starten möchten, geben Sie beim Ausführen von adb-reboot
die Seriennummer des Zielgeräts an. Wenn kein Zielgerät angegeben ist, startet adb
kein Gerät neu.
adb -s SERIAL reboot
Unsauberer Neustart
Wenn das Gerät nicht reagiert, führen Sie den folgenden Befehl aus, um einen unsauberen Neustart durchzuführen:
restart_cvd
Mit restart_cvd
wird das Cuttlefish-Gerät sofort heruntergefahren. restart_cvd
entspricht dem Trennen und Wiederverbinden des Akkus mit einem physischen Gerät. Laufwerkschreibvorgänge, die gerade ausgeführt wurden, werden möglicherweise nicht beibehalten. restart_cvd
wartet, bis das Gerät vollständig neu gestartet wurde, bevor es beendet wird.
In einer Multi-Tenant-Konfiguration startet restart_cvd
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=N
Wenn --instance_num
nicht verwendet wird, ist die Standardeinstellung für die Instanznummer 1
.
Mit anderen launch_cvd-Flags neu starten
So beenden Sie ein oder mehrere Geräte und starten sie mit anderen launch_cvd
-Flags neu:
stop_cvd
launch_cvd NEW_FLAG
stop_cvd
führt ein unsauberes Herunterfahren ähnlich wie restart_cvd
durch. Das Gerät wird in einen Ruhezustand versetzt, der später mit einem anderen launch_cvd
-Befehl wieder aktiviert werden kann. Wie bei restart_cvd
werden Festplattenschreibvorgänge möglicherweise nicht beibehalten, wenn sie nicht vollständig mit der Festplatte synchronisiert werden. Führen Sie zuerst adb reboot
aus, um Daten sicher auf der Festplatte zu speichern.
adb reboot
stop_cvd
launch_cvd NEW_FLAG
Wenn Änderungen an launch_cvd
-Flags eine Änderung am Festplattenlayout erzwingen, die mit der Copy-on-Write-Implementierung inkompatibel ist, ignoriert launch_cvd
die alten Festplattenänderungen und setzt den ursprünglichen Festplattenstatus zurück. Eine vollständige Liste der Flags finden Sie unter Flags.
Ohne Overlay ausführen
So deaktivieren Sie die Unterstützung für das schnelle Zurücksetzen:
launch_cvd --use_overlay=false
--use_overlay=false
behandelt die Cuttlefish-Festplattendateien als Lese-/Schreibzugriff und Änderungen werden in diese Dateien übertragen.
Das Wechseln zwischen --use_overlay=false
und dem Standard kann zu Kompatibilitätsfehlern führen. Führen Sie Folgendes aus, um den vorherigen Gerätestatus zu bereinigen:
stop_cvd
rm $HOME/cuttlefish $HOME/cuttlefish_runtime $HOME/cuttlefish_assembly
Cuttlefish kann den Übergang zwischen den Abläufen mit und ohne Overlays nicht sicher bewältigen. Daher werden durch diese Änderung alle Cuttlefish-Verwaltungsstatus gelöscht. Wenn Dateien auf externen Festplatten geändert und später zusammen mit Overlays wiederverwendet werden, gelten die früheren Änderungen als Teil des Ausgangszustands.
Flaggen
Sie können Argumente mithilfe von Flags hinzufügen, wenn Sie ein Cuttlefish-Gerät mit launch_cvd
starten. 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 bei der Ausführung einer Befehlsfolge, die launch_cvd
, stop_cvd
und dann noch einmal launch_cvd
enthält, keine Daten verloren gehen, 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 auch der zweite launch_cvd
-Aufruf 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 Datei, auf die von KERNEL_PATH
verwiesen wird, muss denselben Inhalt haben.
Einige Flags können zwischen launch_cvd
-Aufrufen geändert werden. In den folgenden Abschnitten werden die Flags aufgeführt, die gleich bleiben müssen, um Datenverlust zu vermeiden, und die Flags, die ohne Datenverlust geändert werden können. Weitere Informationen zu den 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 Datenverlust 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 sich ändern können
Diese Flags können zwischen launch_cvd
-Aufrufen ohne Datenverlust geändert werden:
--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
--netsim_bt
--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