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 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 użyć tych procesów ponownego uruchamiania i resetowania:
- Jeśli urządzenie reaguje, uruchom ponownie urządzenie za pomocą polecenia
adb reboot
. - Jeśli urządzenie nie odpowiada, uruchom ponownie urządzenie, używając polecenia
restart_cvd
. - Przywracać stan urządzenia za pomocą
powerwash_cvd
. - Zatrzymaj urządzenie i zmień argumenty
launch_cvd
, zachowując stan urządzenia lub przymusowo wyczyść stan urządzenia.
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_cvd
flagi.
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