Na tej stronie dowiesz się, jak ponownie uruchamiać i resetować wirtualne urządzenia Cuttlefish. Przywracanie urządzenia Cuttlefish do początkowego stanu dysku jest w narzędziu wiersza poleceń określane jako powerwash.
Podczas uruchamiania automatycznych lub ręcznych przepływów pracy z wieloma różnymi procedurami, takimi jak zestawy testów, zresetowanie urządzenia Cuttlefish między procedurami zapewnia niezależność działania każdej z nich. Jeśli stan dysku nie zostanie zresetowany, jedna procedura może wpłynąć na działanie następnej.
Procedury ponownego uruchamiania i resetowania opisane na tej stronie zakładają, że masz utworzone urządzenie Cuttlefish i ustawiony na dysku pewien stan.
# 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
W tym miejscu możesz skorzystać z tych procesów ponownego uruchamiania i resetowania:
- Jeśli urządzenie odpowiada, wykonaj czyste ponowne uruchomienie za pomocą przycisku
adb reboot. - Jeśli urządzenie nie odpowiada, wykonaj niepełne ponowne uruchomienie za pomocą przycisku
restart_cvd. - Zresetuj stan urządzenia za pomocą
powerwash_cvd. - Zatrzymaj urządzenie i zmień argumenty
launch_cvd, zachowując stan urządzenia lub wymuszając wyczyszczenie stanu urządzenia.
Implementacja szybkiego resetowania Cuttlefish
Cuttlefish korzysta z szybkiego resetowania, które zależy od ochrony dysków za pomocą nakładek dysku qcow2. Domyślnie Cuttlefish traktuje oryginalne dyski jako tylko do odczytu i używa nakładek do rejestrowania zapisów na dysku.
Korzystanie z nakładek typu copy-on-write ma jednak wady. W szczególności zewnętrzne zmiany na dyskach bazowych powodują utratę zgodności z istniejącymi nakładkami i niespójny stan dysku. Cuttlefish wymusza ponowne utworzenie nakładek, gdy wykryje niezgodne zmiany.
Wymuszone ponowne tworzenie nakładek jest niepożądane podczas opracowywania funkcji, która wymaga utrzymania części dysku w określonym stanie zainicjowania przy jednoczesnej wymianie innej części dysku. Może to być na przykład instalowanie aplikacji z określoną konfiguracją użytkownika, a następnie wielokrotne zamienianie 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 kolejnych sekcjach opisujemy sposoby przywracania urządzenia Cuttlefish do początkowego stanu dysku.
Resetowanie jednego urządzenia
Aby zresetować jedno urządzenie Cuttlefish do początkowego stanu dysku, uruchom:
powerwash_cvdpowerwash_cvd wyłącza maszynę wirtualną, resetuje wszelkie zmiany wprowadzone na dysku maszyny wirtualnej, ponownie uruchamia maszynę wirtualną i czeka, aż zakończy się jej uruchamianie. Instancja zachowuje oryginalne flagi przekazane do launch_cvd.
W konfiguracji z wieloma najemcami:powerwash_cvd ponownie uruchamia jedną instancję z grupy instancji:
powerwash_cvd --instance_num=NResetowanie wszystkich urządzeń
Aby zatrzymać i zresetować co najmniej 1 urządzenie do początkowego stanu dysku, uruchom to polecenie:
stop_cvdlaunch_cvd --resume=false
stop_cvd wykonuje nieprawidłowe wyłączenie i zatrzymuje urządzenie.
Dodanie --resume=false do launch_cvd powoduje, że Cuttlefish usuwa wszystkie pliki
związane z poprzednio uruchomioną instancją przed rozpoczęciem kolejnego uruchomienia. Możesz bezpiecznie dodać dowolne dodatkowe launch_cvdflagi.
W konfiguracji wielodostępnejß
stop_cvd zamyka całą grupę instancji.
Uruchom urządzenie ponownie
W kolejnych sekcjach opisujemy sposoby ponownego uruchamiania urządzenia bez przywracania go do początkowego stanu dysku.
Czysty restart
Aby wykonać czyste ponowne uruchomienie urządzenia, gdy odpowiada ono na polecenia, wpisz:
adb rebootadb reboot przeprowadza pełną procedurę zamykania urządzenia, synchronizując zmiany na dysku i dbając o to, aby procesy zostały zamknięte. Procesy hosta Cuttlefish nie są zaangażowane. Ta procedura może być niedostępna, jeśli urządzenie
jest w złym stanie i przestało reagować.
Aby przeprowadzić czysty restart pojedynczego urządzenia Cuttlefish w konfiguracji wielodostępowej, podczas uruchamiania adb-reboot podaj numer seryjny urządzenia docelowego. Jeśli nie określono urządzenia docelowego, adb nie uruchamia ponownie żadnego urządzenia.
adb -s SERIAL rebootNieprawidłowe ponowne uruchomienie
Aby wykonać nieprawidłowe ponowne uruchomienie, gdy urządzenie nie odpowiada, wpisz:
restart_cvdrestart_cvd wykonuje nieprawidłowe zamknięcie, natychmiast wyłączając urządzenie Cuttlefish. restart_cvd jest odpowiednikiem odłączenia i ponownego podłączenia baterii do urządzenia fizycznego. Zapisy na dysku mogą nie zostać zachowane, jeśli były w trakcie. restart_cvd czeka, aż urządzenie ponownie się w pełni uruchomi, zanim zakończy działanie.
W konfiguracji z wieloma najemcamirestart_cvd ponowne uruchomienie pojedynczej instancji z grupy instancji. Aby określić, którą instancję Cuttlefish chcesz ponownie uruchomić, użyj flagi instance_num.
restart_cvd --instance_num=NJeśli nie użyjesz --instance_num, numer instancji domyślnie będzie wynosić 1.
Uruchom ponownie, używając innych flag launch_cvd
Aby zatrzymać co najmniej 1 urządzenie i uruchomić je ponownie z innymi flagami launch_cvd, wpisz:
stop_cvdlaunch_cvd NEW_FLAG
stop_cvd wykonuje nieprawidłowe wyłączenie podobne do restart_cvd. Urządzenie przechodzi w stan uśpienia, z którego można je później wybudzić 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
adb reboot.
adb rebootstop_cvdlaunch_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 zignoruje stare modyfikacje dysku i przywróci pierwotny stan dysku. Pełną listę flag znajdziesz w sekcji Flagi.
Uruchom bez nakładki
Aby zrezygnować z obsługi szybkiego resetowania, uruchom to polecenie:
launch_cvd --use_overlay=false--use_overlay=false traktuje pliki dysku Cuttlefish jako pliki do odczytu i zapisu, a zmiany są propagowane do tych plików.
Przełączanie między --use_overlay=false a domyślnym może powodować błędy zgodności. Aby wymusić wyczyszczenie poprzedniego stanu urządzenia, uruchom to polecenie:
stop_cvdrm $HOME/cuttlefish $HOME/cuttlefish_runtime $HOME/cuttlefish_assembly
Cuttlefish nie może bezpiecznie przechodzić między przepływami z nakładkami i bez nich, więc ta zmiana usuwa cały stan zarządzania Cuttlefish. Jeśli pliki na dysku zewnętrznym zostaną zmodyfikowane i później ponownie użyte razem z nakładkami, wcześniejsze modyfikacje będą traktowane jako część stanu bazowego.
Flagi
Podczas uruchamiania urządzenia Cuttlefish za pomocą polecenia
launch_cvd możesz dodawać argumenty za pomocą flag. W przypadku niektórych flag (flag, które muszą pozostać takie same) utrata danych może jednak nastąpić, jeśli flagi zostaną zmienione między poleceniami launch_cvd. Aby uniknąć utraty danych podczas wykonywania sekwencji poleceń, które zawierają launch_cvd, stop_cvd, a potem ponownie launch_cvd, używaj tych samych flag w każdym poleceniu launch_cvd. Jeśli na przykład pierwszy tag 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ę element KERNEL_PATH, musi zawierać tę samą treść.
Niektóre flagi można bezpiecznie zmieniać między wywołaniami launch_cvd. W sekcjach poniżej 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 uruchom polecenie launch_cvd --help.
Flagi, które muszą pozostać bez zmian
Aby uniknąć utraty danych, te flagi muszą pozostać takie same od jednego wywołania funkcji launch_cvd do następnego:
--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ć
Te flagi można bezpiecznie zmieniać mię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