Mątwa: uruchom ponownie i zresetuj

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 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żesz użyć tych procesów ponownego uruchamiania i resetowania:

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