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 Laufwerkstatus wird im Befehlszeilentool als Powerwash bezeichnet.
Wenn Sie automatisierte oder manuelle Workflows mit mehreren verschiedenen Verfahren ausführen, z. B. Testsuites, sorgt das Zurücksetzen des Cuttlefish-Geräts zwischen den Verfahren dafür, dass das Verhalten der einzelnen Verfahren unabhängig ist. Wenn der Laufwerkstatus nicht zurückgesetzt wird, kann ein Vorgang das Verhalten des folgenden Vorgangs beeinträchtigen.
Bei den auf dieser Seite beschriebenen Neustart- und Zurücksetzungsverfahren wird davon ausgegangen, dass Sie ein Cuttlefish-Gerät erstellt und einen Status 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ücksetzungsabläufe verwenden:
- Wenn das Gerät reagiert, führen Sie einen vollständigen Neustart mit
adb reboot
aus. - Wenn das Gerät nicht reagiert, führen Sie einen Neustart ohne Datenspeicherung mit
restart_cvd
aus. - 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 schnellen Zurücksetzens von Cuttlefish
Cuttlefish verwendet eine Implementierung für das schnelle Zurücksetzen, die vom Schutz der Laufwerke hinter qcow2-Laufwerk-Overlays abhängt. Standardmäßig behandelt Cuttlefish die ursprünglichen Laufwerke als schreibgeschützt und verwendet Overlays, um Laufwerkschreiben zu erfassen.
Die Verwendung von Copy-on-Write-Overlays hat jedoch Nachteile. Insbesondere externe Änderungen an den zugrunde liegenden Laufwerken beeinträchtigen die Kompatibilität mit vorhandenen Overlays und führen zu einem inkonsistenten Laufwerkstatus. Cuttlefish erstellt die Overlays dann zwangsweise neu, wenn inkompatible Änderungen erkannt werden.
Das Erzwingen des Neuaufbaus der Overlays ist nicht wünschenswert, wenn eine Funktion entwickelt wird, bei der ein Teil des Laufwerks in einem bestimmten initialisierten Zustand bleiben muss, während ein anderer Teil des Laufwerks ausgetauscht wird. Beispielsweise können Sie eine App mit einer bestimmten Nutzerkonfiguration installieren und dann wiederholt den Kernel austauschen, 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 wird beschrieben, wie Sie ein Cuttlefish-Gerät auf den ursprünglichen Laufwerksstatus zurücksetzen.
Ein Gerät zurücksetzen
Wenn Sie ein Cuttlefish-Gerät auf den ursprünglichen Laufwerkstatus zurücksetzen möchten, führen Sie Folgendes aus:
powerwash_cvd
powerwash_cvd
schaltet die virtuelle Maschine aus, 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 launch_cvd
zugewiesen 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
Wenn Sie ein oder mehrere Geräte beenden und auf ihren ursprünglichen Laufwerkstatus zurücksetzen möchten, führen Sie Folgendes aus:
stop_cvd
launch_cvd --resume=false
stop_cvd
führt einen nicht ordnungsgemäßen Herunterfahrvorgang aus und stoppt das Gerät.
Wenn Sie --resume=false
zu launch_cvd
hinzufügen, löscht Cuttlefish alle Dateien, die sich auf die zuvor ausgeführte Instanz beziehen, bevor der nächste Durchlauf gestartet wird. Sie können auch zusätzliche launch_cvd
-Flags hinzufügen.
In einer mehrmandantenfähigen Konfiguration schaltet stop_cvd
die gesamte Instanzgruppe aus.
Geräte neu starten
In den folgenden Abschnitten wird beschrieben, wie Sie ein Gerät neu starten, ohne es auf den ursprünglichen Laufwerkstatus zurückzusetzen.
Kompletter Neustart
Wenn das Gerät reagiert, führen Sie Folgendes aus, um es neu zu starten:
adb reboot
Mit adb reboot
wird das Gerät vollständig heruntergefahren, Änderungen werden mit dem Laufwerk synchronisiert und Prozesse werden beendet. Cuttlefish-Hostprozesse sind nicht beteiligt. Diese Option ist möglicherweise nicht verfügbar, wenn das Gerät in einen fehlerhaften Zustand gewechselt ist und nicht mehr reagiert.
Wenn Sie ein einzelnes Cuttlefish-Gerät in einer Multi-Tenant-Konfiguration 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
Unvollständiger Neustart
Wenn das Gerät nicht reagiert, führen Sie einen Neustart ohne vorheriges Herunterfahren aus:
restart_cvd
restart_cvd
führt ein nicht ordnungsgemäßes Herunterfahren durch, indem das Cuttlefish-Gerät sofort heruntergefahren wird. restart_cvd
entspricht dem Trennen und erneuten Verbinden des Akkus mit einem physischen Gerät. Laufwerkschreiben werden möglicherweise nicht beibehalten, wenn sie noch nicht abgeschlossen waren. restart_cvd
wartet, bis das Gerät vollständig neu gestartet wurde, bevor es beendet wird.
In einer Konfiguration mit mehreren Mietern 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, wird standardmäßig 1
als Instanznummer verwendet.
Neustart mit anderen launch_cvd-Flags
Wenn Sie ein oder mehrere Geräte beenden und mit anderen launch_cvd
-Flags neu starten möchten, führen Sie Folgendes aus:
stop_cvd
launch_cvd NEW_FLAG
stop_cvd
führt ein nicht ordnungsgemäßes Herunterfahren aus, ähnlich wie restart_cvd
. Das Gerät bleibt in einem Ruhezustand, der später mit einem anderen launch_cvd
-Befehl wieder gestartet werden kann. Wie bei restart_cvd
bleiben Schreibvorgänge auf dem Laufwerk möglicherweise nicht erhalten, wenn sie nicht vollständig mit dem Laufwerk synchronisiert werden. Wenn Sie Daten sicher auf dem Laufwerk speichern möchten, führen Sie zuerst adb reboot
aus.
adb reboot
stop_cvd
launch_cvd NEW_FLAG
Wenn Änderungen an launch_cvd
-Flags eine Änderung des Laufwerklayouts erzwingen, die nicht mit der Copy-on-Write-Implementierung kompatibel ist, ignoriert launch_cvd
die alten Laufwerkänderungen und setzt den ursprünglichen Laufwerkstatus zurück. Eine vollständige Liste der Flags finden Sie unter Flags.
Ohne Overlay ausführen
So deaktivieren Sie die Unterstützung für die Schnellwiederherstellung:
launch_cvd --use_overlay=false
--use_overlay=false
behandelt die Cuttlefish-Dateien als Lese-/Schreibdateien und Änderungen werden in diese Dateien übernommen.
Das Wechseln zwischen --use_overlay=false
und dem Standard kann zu Kompatibilitätsfehlern führen. Wenn Sie den vorherigen Gerätestatus erzwingen möchten, führen Sie Folgendes aus:
stop_cvd
rm $HOME/cuttlefish $HOME/cuttlefish_runtime $HOME/cuttlefish_assembly
Cuttlefish kann den Übergang zwischen den Flüssen mit und ohne Overlays nicht sicher steuern. Daher wird durch diese Änderung der gesamte Cuttlefish-Verwaltungsstatus gelöscht. Wenn externe Laufwerkdateien geändert und später zusammen mit Overlays wiederverwendet werden, werden die früheren Änderungen als Teil des Basiszustands betrachtet.
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 unverändert bleiben müssen) können jedoch Daten verloren gehen, wenn die Flags zwischen launch_cvd
-Befehlen geändert werden. Damit beim Ausführen einer Befehlssequenz, 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 die zweite launch_cvd
-Aufruf auch dasselbe --kernel_path=KERNEL_PATH
-Argument enthalten. Andernfalls gehen alle Dateisystemänderungen, die vor stop_cvd
vorgenommen wurden, bei der zweiten launch_cvd
-Aufruf verloren. Die Datei, auf die KERNEL_PATH
verweist, muss ebenfalls denselben Inhalt haben.
Einige Flags können zwischen launch_cvd
-Aufrufen sicher geändert werden. In den folgenden Abschnitten werden die Flags aufgeführt, die unverändert bleiben müssen, um Datenverluste zu vermeiden, und die Flags, die ohne Datenverlust geändert werden können. Weitere Informationen zu einzelnen Flags finden Sie in der Quelle (flags.cc
, disk_flags.cc
) oder Sie führen launch_cvd --help
aus.
Flags, die unverändert bleiben müssen
Diese Flags müssen bei jeder launch_cvd
-Aufrufssequenz 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 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