Auf dieser Seite wird beschrieben, wie Sie virtuelle Cuttlefish-Geräte neu starten und zurücksetzen. Das Zurücksetzen eines Cuttlefish-Geräts auf seinen ursprünglichen Festplattenzustand wird im Befehlszeilentool als Powerwashing bezeichnet.
Bei der Ausführung automatisierter oder manueller Arbeitsabläufe mit mehreren verschiedenen Prozeduren, wie z. B. Testsuiten, stellt das Zurücksetzen des Cuttlefish-Geräts zwischen den Prozeduren sicher, dass das Verhalten jeder Prozedur unabhängig ist. Wenn der Festplattenstatus nicht zurückgesetzt wird, kann sich eine Prozedur auf das Verhalten der folgenden Prozedur auswirken.
Bei den auf dieser Seite beschriebenen Neustart- und Rücksetzvorgängen wird davon ausgegangen, dass Sie ein Cuttlefish-Gerät erstellt und einen bestimmten Status 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 Reset-Abläufe verwenden:
- Wenn das Gerät reagiert, führen Sie einen sauberen Neustart mit
adb reboot
durch. - Wenn das Gerät nicht reagiert, führen Sie 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 das Löschen des Gerätestatus erzwingen .
Implementierung des schnellen Zurücksetzens von Tintenfischen
Cuttlefish verwendet eine Schnell-Reset-Implementierung, die darauf angewiesen ist, die Festplatten hinter qcow2-Festplatten-Overlays zu schützen. Standardmäßig behandelt Cuttlefish Originalfestplatten als schreibgeschützt und verwendet Overlays, um Schreibvorgänge auf der Festplatte zu erfassen.
Die Verwendung von Copy-on-Write-Overlays hat jedoch Nachteile. Insbesondere externe Änderungen an den zugrunde liegenden Festplatten beeinträchtigen die Kompatibilität mit vorhandenen Overlays und führen zu einem inkonsistenten Festplattenstatus. Cuttlefish erstellt die Überlagerungen zwangsweise neu, wenn es inkompatible Änderungen erkennt.
Die erzwungene Neuerstellung der Overlays ist unerwünscht, wenn eine Funktion entwickelt wird, die es erfordert, einen Teil der Festplatte in einem bestimmten Initialisierungszustand zu belassen, während ein anderer Teil der Festplatte ausgetauscht wird. Zum Beispiel die Installation einer App mit einer bestimmten Benutzerkonfiguration und das anschließende wiederholte Austauschen des Kernels, um die Interaktion zwischen der App und verschiedenen Kernel-Builds zu testen. In diesem Fall könnte es sich lohnen, die Overlays zu deaktivieren .
Geräte zurücksetzen
In den folgenden Abschnitten werden Möglichkeiten beschrieben, wie Sie ein Cuttlefish-Gerät auf seinen ursprünglichen Festplattenzustand zurücksetzen können.
Ein Gerät zurücksetzen
Führen Sie Folgendes aus, um ein Cuttlefish-Gerät auf seinen ursprünglichen Festplattenzustand zurückzusetzen:
powerwash_cvd
powerwash_cvd
fährt die virtuelle Maschine herunter, setzt alle an der Festplatte der virtuellen Maschine vorgenommenen Änderungen 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 mandantenfähigen Konfiguration startet powerwash_cvd
eine einzelne Instanz aus der Instanzgruppe neu:
powerwash_cvd --instance_num=N
Alle Geräte zurücksetzen
Führen Sie Folgendes aus, um ein oder mehrere Geräte anzuhalten und auf ihren ursprünglichen Festplattenstatus zurückzusetzen:
stop_cvd
launch_cvd --resume=false
stop_cvd
führt ein unsauberes Herunterfahren durch und stoppt das Gerät.
Durch das Hinzufügen von --resume=false
zu launch_cvd
zerstört Cuttlefish alle Dateien, die sich auf die zuvor ausgeführte Instanz beziehen, bevor die nächste Ausführung gestartet wird. Es ist sicher, zusätzliche launch_cvd
Flags hinzuzufügen.
In einer mandantenfähigen Konfiguration fährt stop_cvd
die gesamte Instanzgruppe herunter.
Geräte neu starten
In den folgenden Abschnitten werden Möglichkeiten zum Neustarten eines Geräts beschrieben, ohne das Gerät auf seinen ursprünglichen Festplattenzustand zurückzusetzen.
Sauberer Neustart
Um einen sauberen Neustart des Geräts durchzuführen, wenn das Gerät reagiert, führen Sie Folgendes aus:
adb reboot
adb reboot
führt das Gerät durch den vollständigen Herunterfahrvorgang, synchronisiert Änderungen auf der Festplatte und stellt sicher, dass Prozesse heruntergefahren werden. Tintenfisch-Wirtsprozesse sind nicht beteiligt. Dieses Verfahren ist möglicherweise nicht verfügbar, wenn das Gerät in einen fehlerhaften Zustand geraten ist und nicht mehr reagiert.
Um einen sauberen Neustart eines einzelnen Cuttlefish-Geräts in einer mandantenfähigen Konfiguration durchzuführen, 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
Um einen unsauberen Neustart durchzuführen, wenn das Gerät nicht reagiert, führen Sie Folgendes aus:
restart_cvd
restart_cvd
führt ein unsauberes Herunterfahren durch, indem das Cuttlefish-Gerät sofort heruntergefahren wird. restart_cvd
entspricht dem Trennen und erneuten Anschließen der Batterie an ein physisches Gerät. Schreibvorgänge auf die Festplatte bleiben möglicherweise nicht bestehen, wenn sie gerade ausgeführt werden. restart_cvd
wartet, bis das Gerät wieder vollständig hochgefahren ist, bevor es beendet wird.
In einer mandantenfähigen Konfiguration startet restart_cvd
eine einzelne Instanz aus der Instanzgruppe neu. Um anzugeben, welche Cuttlefish-Instanz neu gestartet werden soll, verwenden Sie das Flag instance_num
.
restart_cvd --instance_num=N
Wenn --instance_num
nicht verwendet wird, ist die Instanznummer standardmäßig 1
.
Starten Sie mit anderen launch_cvd-Flags neu
Führen Sie Folgendes aus, um ein oder mehrere Geräte anzuhalten und mit anderen launch_cvd
Flags neu zu starten:
stop_cvd
launch_cvd NEW_FLAG
stop_cvd
führt ein unsauberes Herunterfahren ähnlich wie restart_cvd
durch. Dadurch verbleibt das Gerät in einem Ruhezustand, der später mit einem anderen Befehl launch_cvd
erneut gestartet werden kann. Wie bei restart_cvd
bleiben Schreibvorgänge auf der Festplatte möglicherweise nicht bestehen, wenn sie nicht vollständig mit der Festplatte synchronisiert sind. Um Daten sicher auf der Festplatte zu speichern, führen Sie zuerst adb reboot
aus.
adb reboot
stop_cvd
launch_cvd NEW_FLAG
Wenn Änderungen an den launch_cvd
Flags eine Änderung des Festplattenlayouts erzwingen, die mit der Copy-on-Write-Implementierung nicht kompatibel 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 laufen
Um die Schnell-Reset-Unterstützung zu deaktivieren, führen Sie Folgendes aus:
launch_cvd --use_overlay=false
--use_overlay=false
behandelt die Cuttlefish-Festplattendateien als Lese-/Schreibzugriff und Änderungen werden in diese Dateien übertragen.
Der Wechsel zwischen --use_overlay=false
und dem Standardwert kann zu Kompatibilitätsfehlern führen. Führen Sie Folgendes 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 Flüssen mit und ohne Überlagerungen nicht sicher navigieren, daher löscht diese Änderung den gesamten Verwaltungsstatus von Tintenfischen. Wenn externe Festplattendateien geändert und später zusammen mit Overlays wiederverwendet werden, werden die früheren Änderungen als Teil des Grundzustands 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 gleich bleiben müssen ) kann es jedoch zu Datenverlust kommen, wenn Flags zwischen launch_cvd
Befehlen geändert werden. Um sicherzustellen, dass kein Datenverlust auftritt, wenn eine Befehlsfolge ausgeführt wird, die launch_cvd
, stop_cvd
und dann erneut launch_cvd
enthält, 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 auch dasselbe Argument --kernel_path= KERNEL_PATH
enthalten, sonst gehen alle vor stop_cvd
vorgenommenen Dateisystemänderungen beim zweiten launch_cvd
Aufruf verloren. Die durch KERNEL_PATH
referenzierte Datei muss ebenfalls denselben Inhalt haben.
Einige Flags können sicher 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 Flags, die sicher und ohne Datenverlust geändert werden können. Einzelheiten zu einzelnen Flags finden Sie in der Quelle ( flags.cc
, disk_flags.cc
) oder führen Sie launch_cvd --help
aus.
Fahnen, 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
Flaggen, die sich ändern können
Diese Flags können sicher zwischen launch_cvd
Aufrufen geändert werden, ohne dass es zu Datenverlusten kommt:
-
--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