Mątwa: uruchom ponownie i zresetuj

Na tej stronie dowiesz się, jak uruchomić ponownie i zresetować urządzenia wirtualne Cuttlefish. Przywracanie początkowego stanu dysku urządzenia Cuttlefish jest nazywane w narzędziu wiersza poleceń Powerwash.

Jeśli uruchamiasz zautomatyzowane lub ręczne przepływy pracy z kilkoma różnymi procedurami, np. w apartamentach testowych, resetowanie urządzenia Cuttlefish między procedurami daje pewność, że każda procedura jest niezależna. Jeśli stan dysku nie zostanie zresetowany, na działanie tej procedury może mieć wpływ jedna procedura.

Procedury ponownego uruchamiania i resetowania opisane na tej stronie zakładają, że urządzenie Cuttlefish zostało utworzone i masz ustawiony określony stan na dysku.

# 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

W tym miejscu możesz użyć tych procesów ponownego uruchamiania i resetowania:

Szybkie zresetowanie Cuttlefish

Cuttlefish używa szybkiego resetowania, które zależy od ochrony dysków za pomocą nakładek dysków qcow2. Domyślnie Cuttlefish traktuje oryginalne dyski jako dyski tylko do odczytu i używa nakładek do rejestrowania zapisów na dysku.

Korzystanie z przesłonek kopiowania podczas zapisu ma jednak pewne wady. W szczególności zmiany zewnętrzne w podstawowych dyskach powodują utratę zgodności z dotychczasowymi nakładkami i niespójny stan dysku. Cuttlefish przymusowo odtwarza nakładki, gdy wykryje niezgodne zmiany.

Wymuszone odtwarzanie nakładek jest niepożądane podczas opracowywania funkcji, która wymaga zachowania części dysku w określonym zainicjowanym stanie przy zamianie innej części dysku. Dotyczy to na przykład instalowania aplikacji o określonej konfiguracji użytkownika, a potem ciągłego wymiany jądra w celu przetestowania interakcji między aplikacją a różnymi kompilacjami jądra. W takim przypadku warto wyłączyć nakładki.

Resetowanie urządzeń

W następnych sekcjach opisano sposoby przywracania urządzenia Cuttlefish do pierwotnego stanu dysku.

Resetowanie jednego urządzenia

Aby zresetować jedno urządzenie Cuttlefish do początkowego stanu dysku, uruchom:

powerwash_cvd

powerwash_cvd wyłącza maszynę wirtualną, resetuje wszystkie zmiany wprowadzone na jej dysku, uruchamia ją ponownie i czeka, aż się zakończy. Inicjuje instancję, która zachowuje oryginalne flagi podane dla launch_cvd.

W konfiguracji wielodzierżawczej: powerwash_cvd powoduje ponowne uruchomienie pojedynczej instancji z grupy instancji:

powerwash_cvd --instance_num=N

Zresetuj wszystkie urządzenia

Aby zatrzymać i przywrócić początkowy stan dysku na jednym lub kilku urządzeniach, uruchom polecenie:

stop_cvd
launch_cvd --resume=false

stop_cvd wyłącza urządzenie w wyniku zanieczyszczenia i zatrzymuje je.

Dodanie pliku --resume=false do pliku launch_cvd spowoduje, że Cuttlefish zniszczy wszystkie pliki powiązane z wcześniej uruchomioną instancją przed rozpoczęciem następnego uruchomienia. Możesz dodać dodatkowe launch_cvdflagi.

W konfiguracji z wieloma najemcami stop_cvd wyłącza całą grupę instancji.

Uruchom urządzenie ponownie

W następnych sekcjach opisano sposoby ponownego uruchamiania urządzenia bez przywracania go do pierwotnego stanu dysku.

Czyste ponowne uruchomienie

Aby uruchomić ponownie urządzenie, gdy odpowiada ono za reagowanie, uruchom polecenie:

adb reboot

adb reboot przeprowadza na urządzeniu pełną procedurę wyłączania, synchronizując zmiany na dysku i pilnując wyłączenia procesów. Procesy hostowania mątwy nie obejmują mątwy. Ta procedura może być niedostępna, jeśli urządzenie jest w złym stanie i nie reaguje.

Aby uruchomić ponownie jedno urządzenie Cuttlefish w konfiguracji z wieloma najemcami, podaj numer seryjny urządzenia docelowego, gdy uruchomisz adb-reboot. Jeśli nie zostanie określone żadne urządzenie docelowe, adb nie uruchomi ponownie żadnego urządzenia.

adb -s SERIAL reboot

Nieprawidłowe ponowne uruchomienie

Aby uruchomić ponowne uruchomienie urządzenia, gdy nie reaguje, uruchom polecenie:

restart_cvd

restart_cvd wykonuje nieprawidłowe wyłączenie, natychmiast wyłączając urządzenie Cuttlefish. restart_cvd jest odpowiednikiem odłączenia i ponownie podłączenia baterii do urządzenia fizycznego. Zapisy na dysku mogą nie zachowywać się, jeśli były w toku. restart_cvd czeka, aż urządzenie ponownie się uruchomi, a potem zamyka się.

W konfiguracji dla wielu dzierżawcówrestart_cvd powoduje ponowne uruchomienie pojedynczej instancji z grupy instancji. Aby określić, którą instancję Cuttlefish ma zostać ponownie uruchomiona, użyj flagi instance_num.

restart_cvd --instance_num=N

Jeśli nie użyjesz parametru --instance_num, numer instancji zostanie domyślnie ustawiony na 1.

Ponowne uruchamianie z użyciem różnych flag launch_cvd

Aby zatrzymać co najmniej 1 urządzenie i uruchomić go ponownie z różnymi flagami launch_cvd, uruchom polecenie:

stop_cvd
launch_cvd NEW_FLAG

stop_cvd wykonuje nieczytelne wyłączenie (podobne do sytuacji restart_cvd). Pozostawia urządzenie w stanie uśpienia, z którego można je później ponownie uruchomić za pomocą innego polecenia launch_cvd. Tak jak w przypadku metody restart_cvd, zapisy na dysku mogą nie zachowywać się, jeśli nie zostaną w pełni zsynchronizowane z dyskiem. Aby bezpiecznie zapisać dane na dysku, najpierw uruchom adb reboot.

adb reboot
stop_cvd
launch_cvd NEW_FLAG

Jeśli zmiany w flagach launch_cvd wymuszą zmianę układu dysku, która jest niezgodna z implementacją kopiowania na zapis, launch_cvd zignoruje stare modyfikacje dysku i przywróci go do pierwotnego stanu. Pełną listę flag znajdziesz na stronie Flagi.

Uruchom bez nakładki

Aby zrezygnować z obsługi szybkiego resetowania, uruchom polecenie:

launch_cvd --use_overlay=false

--use_overlay=false traktuje pliki dyskowe Cuttlefish jako do odczytu i zapisu, a zmiany są rozpowszechniane w tych plikach.

Przełączanie się między --use_overlay=false a ustawieniem domyślnym może spowodować błędy zgodności. Aby wymusić wyczyszczenie poprzedniego stanu urządzenia, uruchom polecenie:

stop_cvd
rm $HOME/cuttlefish $HOME/cuttlefish_runtime $HOME/cuttlefish_assembly

Mątwy nie mogą bezpiecznie przechodzić między przepływami z nakładkami i bez nich, dlatego ta zmiana usuwa cały stan zarządzania mątwy. Jeśli pliki dysku zewnętrznego zostaną zmodyfikowane i ponownie użyte później razem z nakładkami, wcześniejsze modyfikacje zostaną uznane za część stanu bazowego.

Flagi

Podczas uruchamiania urządzenia Cuttlefish za pomocą launch_cvd możesz dodać argumenty za pomocą flag. W przypadku niektórych flag (flagi muszą pozostać takie same) może dojść do utraty danych, jeśli flagi zmienią się między poleceniami launch_cvd. Aby mieć pewność, że podczas wykonywania sekwencji poleceń, które obejmują launch_cvd, stop_cvd, a następnie ponownie launch_cvd, nie dojdzie do utraty danych, użyj tych samych flag dla każdego polecenia launch_cvd. Jeśli na przykład pierwsza flaga launch_cvd zawiera argument --kernel_path=KERNEL_PATH, drugie wywołanie launch_cvd musi też zawierać ten sam argument --kernel_path=KERNEL_PATH. W przeciwnym razie wszelkie zmiany w systemie plików wprowadzone przed stop_cvd zostaną utracone w drugim wywołaniu funkcji launch_cvd. Plik, do którego odwołuje się KERNEL_PATH, musi też zawierać tę samą zawartość.

Niektóre flagi można bezpiecznie zmieniać między wywołaniami launch_cvd. W następnych sekcjach znajdziesz listę flag, które muszą pozostać bez zmian, aby uniknąć utraty danych, oraz flag, które można bezpiecznie zmienić bez utraty danych. Szczegółowe informacje o poszczególnych flagach znajdziesz w źródle (flags.cc, disk_flags.cc) lub w zapytaniu launch_cvd --help.

Flagi, które muszą pozostać bez zmian

Aby uniknąć utraty danych, te flagi muszą być takie same między kolejnymi wywołaniami launch_cvd:

  • --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

Flagi, które mogą się zmienić

Te flagi można bezpiecznie zmienić między wywołaniami launch_cvd bez wywoływania utraty danych:

  • --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