На этой странице описано, как перезапустить и сбросить виртуальные устройства Cuttlefish. Сброс устройства Cuttlefish до исходного состояния диска в командной строке называется «powerwashing» .
При выполнении автоматизированных или ручных рабочих процессов с несколькими различными процедурами, например, наборами тестов, перезагрузка устройства Cuttlefish между процедурами гарантирует независимость поведения каждой процедуры. Если состояние диска не будет сброшено, одна процедура может повлиять на поведение следующей процедуры.
Описанные на этой странице процедуры перезапуска и сброса предполагают, что вы создали устройство Cuttlefish и установили некоторое состояние на диске.
# 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
Исходя из этого, вы можете использовать следующие сценарии перезапуска и сброса:
- Если устройство реагирует, выполните чистую перезагрузку с помощью
adb reboot. - Если устройство не отвечает, выполните некорректную перезагрузку с помощью
restart_cvd. - Сбросьте состояние устройства с помощью
powerwash_cvd. - Остановите устройство и измените аргументы
launch_cvd, сохранив состояние устройства или принудительно очистив его .
Реализация быстрого сброса для каракатицы
Cuttlefish использует реализацию быстрого сброса, которая зависит от защиты дисков с помощью наложений qcow2 . По умолчанию Cuttlefish рассматривает исходные диски как доступные только для чтения и использует наложения для захвата операций записи на диск.
Однако использование наложений с механизмом копирования при записи имеет свои недостатки. В частности, внешние изменения базовых дисков нарушают совместимость с существующими наложениями и приводят к несогласованному состоянию диска. Cuttlefish принудительно пересоздает наложения при обнаружении несовместимых изменений.
Принудительное пересоздание оверлеев нежелательно при разработке функции, требующей сохранения части диска в определенном инициализированном состоянии при выгрузке другой части диска. Например, установка приложения с определенной пользовательской конфигурацией, а затем многократная замена ядра для проверки взаимодействия приложения с различными сборками ядра. В этом случае может быть целесообразно отключить оверлеи .
Сброс устройств
В следующих разделах описаны способы сброса устройства Cuttlefish до исходного состояния диска.
Сбросьте настройки одного устройства.
Чтобы вернуть устройство Cuttlefish в исходное состояние диска, выполните следующую команду:
powerwash_cvd powerwash_cvd выключает виртуальную машину, сбрасывает все изменения, внесенные на диск виртуальной машины, перезапускает виртуальную машину и ожидает завершения загрузки. Экземпляр сохраняет исходные флаги, переданные функции launch_cvd .
В многопользовательской конфигурации powerwash_cvd перезапускает один экземпляр из группы экземпляров:
powerwash_cvd --instance_num=NСбросить все устройства
Чтобы остановить и восстановить исходное состояние дисков одного или нескольких устройств, выполните следующую команду:
stop_cvdlaunch_cvd --resume=false
stop_cvd выполняет некорректное завершение работы и останавливает устройство.
Добавление --resume=false к launch_cvd заставляет Cuttlefish уничтожить все файлы, связанные с ранее запущенным экземпляром, перед началом следующего запуска. Добавление любых дополнительных флагов launch_cvd безопасно.
В многопользовательской конфигурации команда ` stop_cvd завершает работу всей группы экземпляров.
Перезагрузите устройства
В следующих разделах описаны способы перезапуска устройства без возврата его в исходное состояние на диске.
Чистая перезагрузка
Для корректной перезагрузки устройства после его восстановления выполните следующую команду:
adb reboot adb reboot выполняет полную процедуру выключения устройства, синхронизируя изменения на диске и обеспечивая завершение процессов. Процессы хоста Cuttlefish в этом процессе не участвуют. Эта процедура может быть недоступна, если устройство перешло в некорректное состояние и перестало отвечать.
Для корректной перезагрузки одного устройства Cuttlefish в многопользовательской конфигурации укажите серийный номер целевого устройства при запуске adb-reboot . Если целевое устройство не указано, adb не перезагрузит ни одно устройство.
adb -s SERIAL rebootНекорректная перезагрузка
Для выполнения некорректной перезагрузки устройства, если оно не отвечает, выполните следующую команду:
restart_cvd restart_cvd выполняет некорректное завершение работы, мгновенно выключая устройство Cuttlefish. restart_cvd эквивалентна отключению и повторному подключению батареи к физическому устройству. Запись на диск может не сохраниться, если она была в процессе. restart_cvd ожидает полной загрузки устройства перед завершением работы.
В многопользовательской конфигурации restart_cvd перезапускает один экземпляр из группы экземпляров. Чтобы указать, какой именно экземпляр Cuttlefish следует перезапустить, используйте флаг instance_num .
restart_cvd --instance_num=N Если --instance_num не используется, номер экземпляра по умолчанию равен 1 .
Перезапустите систему, используя другие флаги launch_cvd.
Чтобы остановить одно или несколько устройств и запустить их заново с другими флагами launch_cvd , выполните следующую команду:
stop_cvdlaunch_cvd NEW_FLAG
stop_cvd выполняет некорректное завершение работы, аналогичное restart_cvd . Она оставляет устройство в спящем режиме, который можно будет снова запустить позже с помощью другой команды launch_cvd . Как и в случае с restart_cvd , данные, записанные на диск, могут не сохраняться, если они не полностью синхронизированы с диском. Для безопасного сохранения данных на диск сначала выполните adb reboot .
adb rebootstop_cvdlaunch_cvd NEW_FLAG
Если изменения флагов launch_cvd приводят к изменению структуры диска, несовместимому с реализацией механизма копирования при записи, launch_cvd игнорирует старые изменения диска и возвращается к исходному состоянию диска. Полный список флагов см. в разделе «Флаги» .
Запуск без наложения
Чтобы отказаться от поддержки быстрой перезагрузки, выполните следующую команду:
launch_cvd --use_overlay=false--use_overlay=false обрабатывает дисковые файлы Cuttlefish как файлы с возможностью чтения и записи, и изменения распространяются на эти файлы.
Изменение параметра --use_overlay=false на значение по умолчанию может привести к ошибкам совместимости. Для принудительной очистки предыдущего состояния устройства выполните следующую команду:
stop_cvdrm $HOME/cuttlefish $HOME/cuttlefish_runtime $HOME/cuttlefish_assembly
Cuttlefish не может безопасно осуществлять переход между потоками с наложениями и без них, поэтому это изменение удаляет все состояние управления Cuttlefish. Если внешние дисковые файлы изменяются и используются повторно позже вместе с наложениями, более ранние изменения считаются частью базового состояния.
Флаги
При запуске устройства Cuttlefish с помощью launch_cvd можно добавлять аргументы с помощью флагов. Однако для некоторых флагов ( флаги, которые должны оставаться неизменными ) может произойти потеря данных, если флаги изменяются между командами launch_cvd . Чтобы гарантировать отсутствие потери данных при выполнении последовательности команд, включающей launch_cvd , stop_cvd и снова launch_cvd , используйте одни и те же флаги для каждой команды launch_cvd . Например, если первый флаг launch_cvd включает аргумент --kernel_path= KERNEL_PATH , то второй вызов launch_cvd также должен включать тот же аргумент --kernel_path= KERNEL_PATH , иначе любые изменения файловой системы, внесенные до stop_cvd будут потеряны при втором вызове launch_cvd . Файл, на который ссылается KERNEL_PATH также должен иметь то же содержимое.
Некоторые флаги можно безопасно изменять между вызовами launch_cvd . В следующих разделах перечислены флаги, которые должны оставаться неизменными во избежание потери данных, и флаги, которые можно безопасно изменять без потери данных. Для получения подробной информации об отдельных флагах обратитесь к исходному коду ( flags.cc , disk_flags.cc ) или запустите launch_cvd --help .
Флаги, которые должны оставаться неизменными
Эти флаги должны оставаться неизменными от одного вызова 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
Флаги, которые могут меняться
Эти флаги можно безопасно изменять между вызовами launch_cvd без потери данных:
-
--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