Tintenfisch: Neu starten und zurücksetzen

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 device
launch_cvd
# Make some modifications to the device
adb shell touch /storage/self/primary/Documents/hello
# Check the device state
adb shell ls /storage/self/primary/Documents

Von diesem Ausgangspunkt aus können Sie die folgenden Neustart- und Reset-Abläufe verwenden:

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