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 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
Od tego punktu początkowego można użyć następujących przepływów ponownego uruchamiania i resetowania:
- Jeśli urządzenie reaguje, wykonaj czysty restart za pomocą
adb reboot
. - Jeśli urządzenie nie odpowiada, wykonaj nieczysty restart za pomocą
restart_cvd
. - Zresetuj stan urządzenia za pomocą
powerwash_cvd
. - Zatrzymaj urządzenie i zmień argumenty
launch_cvd
, utrzymując stan urządzenia lub wymuszając jego czyszczenie .
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