Na tej stronie dowiesz się, jak uruchomić ponownie i zresetować urządzenia wirtualne Cuttlefish. Przywracanie początkowego stanu dysku urządzenia Cuttlefish to tzw. powerwashing w narzędziu wiersza poleceń.
Gdy uruchamiasz zautomatyzowane lub ręczne przepływy pracy z wieloma różnymi procedurami, np. w apartamentach testowych, resetowanie urządzenia Cuttlefish między procedurami że działanie każdej procedury jest niezależne od siebie. Jeśli stan dysku jest inny niż resetowanie danych, na działanie tej procedury może mieć wpływ jedna procedura.
Procedury ponownego uruchamiania i resetowania opisane na tej stronie przyjęto założenie, Użytkownik utworzył urządzenie Cuttlefish i ustawił 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żesz użyć tych procesów ponownego uruchamiania i resetowania:
- Jeśli urządzenie reaguje, uruchom ponownie urządzenie, używając
adb reboot
- Jeśli urządzenie nie odpowiada, uruchom ponownie urządzenie, używając
restart_cvd
- Resetuj stan urządzenia za pomocą
powerwash_cvd
. - Zatrzymaj urządzenie i zmień argumenty
launch_cvd
podczas zachowywanie stanu urządzenia lub wymusić wyczyszczenie stanu urządzenia.
Implementacja szybkiego resetowania Cuttlefish
Metoda mątwy korzysta z implementacji szybkiego resetowania, która zależy od ochrony dyski za nią nakładki dysku qcow2. Według domyślnie Cuttlefish traktuje oryginalne dyski jako tylko do odczytu i używa nakładek, aby i przechwytywać zapisy na dysku.
Stosowanie nakładek kopiujowych podczas zapisu ma jednak pewne wady. Istotne jest, zewnętrzne zmiany dysków bazowych powodują naruszenie zgodności z istniejącymi i powodują niespójny stan dysku. Mątwy na siłę odtwarza nakładki po wykryciu niezgodnych zmian.
Przymusowe odtwarzanie nakładek jest niepożądane przy opracowywaniu funkcji, która wymaga zachowania części dysku w konkretnym stanie zainicjowania podmienianie innej części dysku. Na przykład: jeśli zainstalujesz aplikację, która zawiera w określonej konfiguracji użytkownika, a następnie na stałe wymieniając jądro testowania interakcji między aplikacją i różnymi kompilacjami jądra systemu operacyjnego. W tym przypadku warto wyłączyć nakładki.
Resetuj urządzenia
W sekcjach poniżej opisano sposoby przywracania początkowego urządzenia mątwy stanu dysku.
Resetowanie jednego urządzenia
Aby zresetować jedno urządzenie Cuttlefish do początkowego stanu dysku, uruchom polecenie:
powerwash_cvd
powerwash_cvd
wyłącza maszynę wirtualną i resetuje wszystkie zmiany wprowadzone w
dysku maszyny wirtualnej, uruchamia ją ponownie i czeka, aż się zakończy
podczas uruchamiania. Instancja zachowuje pierwotne flagi podane w narzędziu launch_cvd
.
W konfiguracji z wieloma najemcami:
powerwash_cvd
uruchamia ponownie jedną instancję poza grupę 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
powoduje, że mątwy niszczą wszystkie pliki
powiązane z wcześniej uruchomioną instancją przed rozpoczęciem następnego uruchomienia. Jest
można bezpiecznie dodać kolejne flagi launch_cvd
.
W konfiguracji z wieloma najemcami stop_cvd
wyłącza całą grupę instancji.
Uruchom urządzenie ponownie
W tych sekcjach opisano sposoby ponownego uruchamiania urządzenia bez resetowania do początkowego stanu dysku.
Wyczyść ponownie
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 i synchronizuje
jego zmiany na dysku i zapewnienie wyłączenia procesów. Gospodarz mątwy
nie biorą w tym udziału. Ta procedura może być niedostępna, jeśli urządzenie
urządzenie jest w złym stanie i nie odpowiada.
Aby zrestartować jedno urządzenie mątwy w
konfiguracja wielu najemców, określ
numer seryjny
urządzenia docelowego po uruchomieniu adb-reboot
. Jeśli żadne urządzenie docelowe nie jest
określonych, adb
nie uruchamia 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 brudne wyłączanie, natychmiast wyłączając
Urządzenie mątwy. restart_cvd
to odpowiednik
odłączenie i ponowne podłączenie baterii do urządzenia fizycznego. Zapisy na dysku
mogą nie zachowywać się, jeśli były w toku. restart_cvd
czeka na urządzenie
program uruchomił się ponownie w pełni przed zamknięciem.
W konfiguracji z wieloma najemcami:
restart_cvd
uruchamia ponownie jedną instancję poza grupę instancji. Aby określić
które wystąpienie Cuttlefish ma zostać ponownie uruchomione, użyj flagi instance_num
.
restart_cvd --instance_num=N
Jeśli --instance_num
nie jest używany, domyślnym numerem instancji jest 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ądzenia w stanie uśpienia, które można później uruchomić ponownie za pomocą innego urządzenia.
launch_cvd
. Tak jak w przypadku funkcji restart_cvd
, zapisy na dysku mogą nie być utrzymywane, jeśli
nie są w pełni zsynchronizowane z dyskiem. Aby bezpiecznie zapisać dane na dysku, uruchom
Najpierw adb reboot
.
adb reboot
stop_cvd
launch_cvd NEW_FLAG
Jeśli zmiany we flagach launch_cvd
wymuszają zmianę układu dysku, który
niezgodne z implementacją kopiowania przy zapisie, launch_cvd
ignoruje
stary dysk zostanie zmieniony i przywrócony do pierwotnego stanu. Aby uzyskać pełną
Listę flag znajdziesz w sekcji Flagi.
Uruchom bez nakładki
Aby zrezygnować z obsługi szybkiego resetowania, uruchom polecenie:
launch_cvd --use_overlay=false
--use_overlay=false
traktuje pliki na dysku Cuttlefish jako pliki do odczytu i zapisu,
i propagowanie zmian w tych plikach.
Zmiana między --use_overlay=false
a wartością domyślną może spowodować zgodność
. Aby wymusić wyczyszczenie poprzedniego stanu urządzenia, uruchom polecenie:
stop_cvd
rm $HOME/cuttlefish $HOME/cuttlefish_runtime $HOME/cuttlefish_assembly
Mątwa nie może bezpiecznie przechodzić między przepływami z bez nakładek, więc ta zmiana spowoduje usunięcie całego stanu zarządzania Cuttlefish. Jeśli pliki na dysku zewnętrznym zostaną zmodyfikowane i będą później ponownie używane razem z nakładkami, wcześniejsze modyfikacje są uznawane za część stanu odniesienia.
Flagi
Możesz dodać argumenty za pomocą flag przy uruchamianiu urządzenia Cuttlefish za pomocą
launch_cvd
Jednak w przypadku niektórych flag
(Flagi, które muszą pozostać takie same), może dojść do utraty danych, jeśli flagi
zmieniono między poleceniami launch_cvd
. Aby zapobiec utracie danych, gdy:
uruchamianie sekwencji poleceń, które obejmują launch_cvd
i stop_cvd
, a następnie
launch_cvd
, użyj tych samych flag do każdego polecenia launch_cvd
. Dla:
jeśli na przykład pierwsza flaga launch_cvd
zawiera argument
--kernel_path=KERNEL_PATH
, drugie wywołanie launch_cvd
musi też zawierać te same --kernel_path=KERNEL_PATH
lub wszelkie zmiany w systemie plików wprowadzone przed stop_cvd
zostaną utracone w
drugie wywołanie launch_cvd
. Plik, do którego odwołuje się funkcja
KERNEL_PATH
również musi zawierać tę samą zawartość.
Niektóre flagi można bezpiecznie zmieniać między wywołaniami launch_cvd
. Poniżej
w sekcjach wymienione są flagi, które muszą pozostać takie same, aby uniknąć utraty danych i oznaczeń
które można bezpiecznie zmienić bez utraty danych. Szczegółowe informacje o poszczególnych flagach znajdziesz
odwołują się do źródła (
flags.cc
, disk_flags.cc
) lub uruchom launch_cvd --help
.
Flagi, które muszą pozostać bez zmian
Te flagi muszą być takie same od jednego wywołania launch_cvd
do kolejnego
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ć
Te flagi można bezpiecznie zmienić między launch_cvd
wywołaniami bez
powodujące utratę 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