Mątwa: Uruchom ponownie i zresetuj

Na tej stronie opisano, jak ponownie uruchomić i zresetować urządzenia wirtualne mątwy. Resetowanie urządzenia mątwy do początkowego stanu dysku jest określane w narzędziu wiersza poleceń mianem powerwashingu .

W przypadku uruchamiania automatycznych lub ręcznych przepływów pracy z wieloma różnymi procedurami, takimi jak zestawy testów, resetowanie urządzenia Cuttlefish pomiędzy procedurami zapewnia niezależność zachowania każdej procedury. Jeśli stan dysku nie zostanie zresetowany, jedna procedura może mieć wpływ na zachowanie poniższej procedury.

Procedury ponownego uruchomienia i resetowania opisane na tej stronie zakładają, że utworzyłeś urządzenie mątwy i ustawiłeś pewien 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

Od tego punktu początkowego można użyć następujących przepływów ponownego uruchamiania i resetowania:

Implementacja szybkiego resetu mątwy

Mątwa wykorzystuje implementację szybkiego resetowania, która polega na ochronie dysków za nakładkami dysków qcow2 . Domyślnie Mątwa traktuje oryginalne dyski jako tylko do odczytu i używa nakładek do przechwytywania zapisów na dysku.

Korzystanie z nakładek kopiujących przy zapisie ma jednak wady. Warto zauważyć, że zewnętrzne zmiany na dyskach bazowych zakłócają kompatybilność z istniejącymi nakładkami i powodują niespójny stan dysku. Mątwa na siłę odtwarza nakładki, gdy wykryje niezgodne zmiany.

Wymuszone odtwarzanie nakładek jest niepożądane w przypadku opracowywania funkcji wymagającej utrzymywania części dysku w określonym stanie zainicjowanym podczas wymiany innej części dysku. Na przykład zainstalowanie aplikacji z określoną konfiguracją użytkownika, a następnie wielokrotna wymiana jądra w celu przetestowania interakcji między aplikacją a różnymi kompilacjami jądra. W takim przypadku może warto wyłączyć nakładki .

Zresetuj urządzenia

W poniższych sekcjach opisano sposoby resetowania urządzenia mątwy do początkowego stanu dysku.

Zresetuj jedno urządzenie

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

powerwash_cvd

powerwash_cvd zamyka maszynę wirtualną, resetuje wszelkie zmiany wprowadzone na dysku maszyny wirtualnej, restartuje maszynę wirtualną i czeka na zakończenie jej uruchamiania. Instancja zachowuje oryginalne flagi nadane launch_cvd .

W konfiguracji z wieloma dzierżawcami powerwash_cvd uruchamia ponownie pojedynczą instancję z grupy instancji:

powerwash_cvd --instance_num=N

Zresetuj wszystkie urządzenia

Aby zatrzymać i zresetować jedno lub więcej urządzeń do początkowego stanu dysku, uruchom:

stop_cvd
launch_cvd --resume=false

stop_cvd wykonuje nieczyste zamknięcie i zatrzymuje urządzenie.

Dodanie --resume=false do launch_cvd powoduje, że Mątwa zniszczy wszystkie pliki związane z poprzednio uruchomioną instancją przed rozpoczęciem następnego uruchomienia. Można bezpiecznie dodać dodatkowe flagi launch_cvd .

W konfiguracji z wieloma dzierżawcami stop_cvd zamyka całą grupę instancji.

Uruchom ponownie urządzenia

W poniższych sekcjach opisano sposoby ponownego uruchamiania urządzenia bez resetowania urządzenia do początkowego stanu dysku.

Czysty restart

Aby wykonać czyste ponowne uruchomienie urządzenia, gdy urządzenie reaguje, uruchom:

adb reboot

adb reboot przeprowadza urządzenie przez pełną procedurę zamykania, synchronizując zmiany na dysku i upewniając się, że procesy zostaną zamknięte. Procesy żywicielskie mątwy nie są zaangażowane. Ta procedura może być niedostępna, jeśli urządzenie przeszło w zły stan i przestało odpowiadać.

Aby wykonać czysty restart pojedynczego urządzenia mątwy w konfiguracji z wieloma dzierżawcami , określ numer seryjny urządzenia docelowego podczas uruchamiania adb-reboot . Jeśli nie określono żadnego urządzenia docelowego, adb nie uruchomi ponownie żadnego urządzenia.

adb -s SERIAL reboot

Nieczysty restart

Aby wykonać nieczysty restart, gdy urządzenie nie odpowiada, uruchom:

restart_cvd

restart_cvd wykonuje nieczyste zamknięcie, natychmiastowo wyłączając urządzenie mątwy. restart_cvd jest odpowiednikiem odłączania i ponownego podłączania baterii do urządzenia fizycznego. Zapisy na dysku mogą nie zostać utrwalone, jeśli były w toku. restart_cvd czeka, aż urządzenie ponownie się w pełni uruchomi, zanim zakończy działanie.

W konfiguracji z wieloma dzierżawcami restart_cvd uruchamia ponownie pojedynczą instancję z grupy instancji. Aby określić, która instancja mątwy ma zostać zrestartowana, użyj flagi instance_num .

restart_cvd --instance_num=N

Jeśli nie użyto --instance_num , domyślnym numerem instancji jest 1 .

Uruchom ponownie, używając innych flag launch_cvd

Aby zatrzymać jedno lub więcej urządzeń i uruchomić je ponownie z różnymi flagami launch_cvd , uruchom:

stop_cvd
launch_cvd NEW_FLAG

stop_cvd wykonuje nieczyste zamknięcie podobne do restart_cvd . Pozostawia urządzenie w stanie uśpienia, który można później uruchomić ponownie za pomocą innego polecenia launch_cvd . Podobnie jak w przypadku restart_cvd , zapisy na dysku mogą nie zostać zachowane, jeśli nie zostaną w pełni zsynchronizowane z dyskiem. Aby bezpiecznie zapisać dane na dysku, najpierw uruchom polecenie adb reboot .

adb reboot
stop_cvd
launch_cvd NEW_FLAG

Jeśli zmiany flag launch_cvd wymuszą zmianę układu dysku, która jest niezgodna z implementacją kopiowania przy zapisie, launch_cvd ignoruje stare modyfikacje dysku i resetuje do pierwotnego stanu dysku. Aby zapoznać się z pełną listą flag, zobacz Flagi .

Uruchom bez nakładki

Aby zrezygnować ze wsparcia szybkiego resetowania, uruchom:

launch_cvd --use_overlay=false

--use_overlay=false traktuje pliki dyskowe mątwy w trybie odczytu i zapisu, a zmiany są propagowane do tych plików.

Zmiana pomiędzy --use_overlay=false a wartością domyślną może powodować błędy zgodności. Aby wymusić oczyszczenie poprzedniego stanu urządzenia, uruchom:

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

Mątwy nie mogą bezpiecznie poruszać się pomiędzy przepływami z nakładkami i bez nich, więc ta zmiana usuwa cały stan zarządzania mątwą. Jeżeli pliki na dysku zewnętrznym zostaną zmodyfikowane i później ponownie wykorzystane wraz z nakładkami, wcześniejsze modyfikacje uznawane są za część stanu bazowego.

Flagi

Możesz dodać argumenty za pomocą flag podczas uruchamiania urządzenia mątwy za pomocą launch_cvd . Jednakże w przypadku niektórych flag ( flagi, które muszą pozostać takie same ) może nastąpić utrata danych, jeśli flagi zostaną zmienione pomiędzy poleceniami launch_cvd . Aby mieć pewność, że podczas uruchamiania sekwencji poleceń obejmujących launch_cvd , stop_cvd i ponowne launch_cvd nie nastąpi utrata danych, należy użyć tych samych flag dla każdej komendy launch_cvd . Na przykład, jeśli pierwsza flaga launch_cvd zawiera argument --kernel_path= KERNEL_PATH , drugie wywołanie launch_cvd musi również 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 launch_cvd . Plik, do którego odwołuje się KERNEL_PATH również musi mieć tę samą zawartość.

Niektóre flagi można bezpiecznie zmieniać między wywołaniami launch_cvd . W poniższych sekcjach wymieniono flagi, które muszą pozostać takie same, aby uniknąć utraty danych, oraz flagi, które można bezpiecznie zmienić bez utraty danych. Aby uzyskać szczegółowe informacje na temat poszczególnych flag, zapoznaj się ze źródłami ( flags.cc , disk_flags.cc ) lub uruchom launch_cvd --help .

Flagi, które muszą pozostać takie same

Te flagi muszą pozostać takie same od jednego wywołania launch_cvd do następnego, aby uniknąć utraty danych:

  • --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 można zmienić

Flagi te można bezpiecznie zmieniać pomiędzy wywołaniami launch_cvd bez powodowania 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