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 Powerwashing bezeichnet.
Wenn Sie automatisierte oder manuelle Workflows mit mehreren verschiedenen Verfahren ausführen, z. B. Testsuiten, 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 ein Vorgang das Verhalten des folgenden Vorgangs beeinträchtigen.
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 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 Punkt aus können Sie die folgenden Abläufe zum Neustarten und Zurücksetzen 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 mit
restart_cvd
einen nicht sauberen Neustart durch. - Setzen Sie den Gerätestatus mit
powerwash_cvd
zurück. - Beenden Sie das Gerät und ändern Sie die
launch_cvd
-Argumente, während Sie den Gerätestatus beibehalten oder das Löschen des Gerätestatus erzwingen.
Cuttlefish-Implementierung für schnelles Zurücksetzen
Cuttlefish verwendet eine schnell zurückgesetzte Implementierung, die darauf angewiesen ist, die Laufwerke hinter qcow2-Laufwerk-Overlays zu schützen. Cuttlefish behandelt die ursprünglichen Laufwerke standardmäßig 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. Beachten Sie, dass externe Änderungen an den zugrunde liegenden Laufwerken die Kompatibilität mit vorhandenen Overlays beeinträchtigen und einen inkonsistenten Laufwerkstatus verursachen. Wenn inkompatible Änderungen erkannt werden, erzwingt der Tintenfisch die Neuerstellung der Overlays.
Die erzwungene Neuerstellung der Overlays ist bei der Entwicklung einer Funktion nicht wünschenswert, bei der ein Teil des Laufwerks in einem bestimmten initialisierten Zustand gehalten werden 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 Laufwerkstatus zurücksetzen.
Ein Gerät zurücksetzen
Führen Sie folgenden Befehl aus, um ein Cuttlefish-Gerät auf den ursprünglichen Laufwerkstatus zurückzusetzen:
powerwash_cvd
powerwash_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 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, zerstört Cuttlefish alle Dateien, die sich auf die zuvor ausgeführte Instanz beziehen, bevor die nächste Ausführung 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 werden Möglichkeiten beschrieben, ein Gerät neu zu starten, ohne es auf den ursprünglichen Laufwerkstatus zurückzusetzen.
Sauberer 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. Die Hostprozesse von Tintenfischen
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 einen sauberen Neustart eines einzelnen Cuttlefish-Geräts in einer mehrmandantenfähigen Konfiguration ausführen möchten, geben Sie die Seriennummer des Zielgeräts an, wenn Sie adb-reboot
ausführen. Wenn kein Zielgerät angegeben ist, startet adb
kein Gerät neu.
adb -s SERIAL reboot
Nicht bereinigter Neustart
Wenn das Gerät nicht reagiert, führen Sie einen Neustart ohne vorheriges Herunterfahren aus:
restart_cvd
restart_cvd
fährt das Cuttlefish-Gerät nicht ordnungsgemäß herunter, indem es sofort heruntergefahren wird. restart_cvd
entspricht dem Trennen und erneuten Verbinden des Akkus mit einem physischen Gerät. Laufwerkschreibvorgänge bleiben möglicherweise nicht bestehen, wenn sie gerade ausgeführt werden. restart_cvd
wartet, bis das Gerät wieder vollständig gestartet wurde, bevor es beendet wird.
In einer Konfiguration mit mehreren Mietern startet restart_cvd
eine einzelne Instanz aus der Instanzgruppe neu. Mit dem Flag instance_num
können Sie angeben, 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
Führen Sie folgenden Befehl aus, um ein oder mehrere Geräte anzuhalten und mit unterschiedlichen launch_cvd
-Flags neu zu starten:
stop_cvd
launch_cvd NEW_FLAG
stop_cvd
führt ein nicht ordnungsgemäßes Herunterfahren aus, ähnlich wie restart_cvd
. Das Gerät befindet sich dabei im Ruhezustand, das später mit einem anderen launch_cvd
-Befehl neu gestartet werden kann. Wie bei restart_cvd
bleiben Laufwerkschreiben möglicherweise nicht erhalten, wenn sie nicht vollständig mit dem Laufwerk synchronisiert werden. Führen Sie zuerst adb reboot
aus, um Daten sicher auf dem Laufwerk zu speichern.
adb reboot
stop_cvd
launch_cvd NEW_FLAG
Wenn Änderungen an den Flags launch_cvd
eine Änderung des Laufwerkslayouts erzwingen, das mit der Copy-on-Write-Implementierung nicht kompatibel ist, ignoriert launch_cvd
die alten Laufwerksänderungen und wird auf den ursprünglichen Laufwerkstatus zurückgesetzt. Eine vollständige Liste der Flags finden Sie unter Flags.
Ohne Overlay ausführen
Führen Sie folgenden Befehl aus, um die Unterstützung für das schnelle Zurücksetzen zu deaktivieren:
launch_cvd --use_overlay=false
--use_overlay=false
behandelt die Cuttlefish-Laufwerkdateien als Lese-/Schreibzugriff und die Änderungen werden in diese Dateien übernommen.
Das Wechseln zwischen --use_overlay=false
und dem Standard kann zu Kompatibilitätsfehlern führen. Führen Sie folgenden Befehl aus, um die Bereinigung des vorherigen Gerätestatus zu erzwingen:
stop_cvd
rm $HOME/cuttlefish $HOME/cuttlefish_runtime $HOME/cuttlefish_assembly
Tintenfische können den Übergang zwischen den Datenflüssen mit und ohne Overlays nicht sicher verwenden. Daher wird durch diese Änderung der gesamte Verwaltungsstatus der Sepien gelöscht. Wenn Dateien von externen Laufwerken geändert und später zusammen mit Overlays wiederverwendet werden, werden die früheren Änderungen als Teil des Referenzstatus 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 beispielsweise das erste launch_cvd
-Flag das Argument --kernel_path=KERNEL_PATH
enthält, muss der zweite launch_cvd
-Aufruf ebenfalls dasselbe --kernel_path=KERNEL_PATH
-Argument enthalten. Andernfalls gehen alle Dateisystemänderungen, die vor stop_cvd
vorgenommen wurden, im 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 gleich 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 sicher geändert werden, ohne Datenverlust zu verursachen:
--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