На этой странице описывается, как перезапустить и сбросить настройки виртуальных устройств 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
Cuttlefish использует реализацию быстрого сброса, которая зависит от защиты дисков, находящихся под оверлеями qcow2 . По умолчанию Cuttlefish рассматривает исходные диски как доступные только для чтения и использует оверлеи для перехвата записей на диск.
Однако использование оверлеев с копированием при записи имеет свои недостатки. В частности, внешние изменения на базовых дисках нарушают совместимость с существующими оверлеями и приводят к несогласованному состоянию диска. Cuttlefish принудительно пересоздаёт оверлеи при обнаружении несовместимых изменений.
Принудительное пересоздание оверлеев нежелательно при разработке функции, требующей сохранения части диска в определённом инициализированном состоянии при выгрузке другой его части. Например, при установке приложения с определённой пользовательской конфигурацией и последующей многократной выгрузке ядра для проверки взаимодействия приложения с различными сборками ядра. В этом случае, возможно, стоит отключить оверлеи .
Сброс устройств
В следующих разделах описываются способы сброса устройства Cuttlefish до исходного состояния диска.
Сбросить одно устройство
Чтобы сбросить одно устройство Cuttlefish до исходного состояния диска, выполните:
powerwash_cvd
powerwash_cvd
завершает работу виртуальной машины, сбрасывает все изменения, внесённые на диск виртуальной машины, перезапускает её и ждёт завершения загрузки. Экземпляр сохраняет исходные флаги, заданные для launch_cvd
.
В многопользовательской конфигурации powerwash_cvd
перезапускает один экземпляр из группы экземпляров:
powerwash_cvd --instance_num=N
Сбросить все устройства
Чтобы остановить и сбросить одно или несколько устройств в исходное состояние дисков, выполните:
stop_cvd
launch_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_cvd
launch_cvd NEW_FLAG
stop_cvd
выполняет некорректное завершение работы, аналогично restart_cvd
. Она оставляет устройство в спящем состоянии, которое можно запустить позже другой командой launch_cvd
. Как и в случае с restart_cvd
, записи на диск могут не сохраняться, если они не полностью синхронизированы с диском. Для безопасного сохранения данных на диск сначала выполните команду adb reboot
.
adb reboot
stop_cvd
launch_cvd NEW_FLAG
Если изменение флагов launch_cvd
приводит к изменению структуры диска, несовместимому с реализацией копирования при записи, launch_cvd
игнорирует старые изменения диска и возвращается к исходному состоянию. Полный список флагов см. в разделе Флаги .
Запустить без наложения
Чтобы отказаться от поддержки быстрого сброса, выполните:
launch_cvd --use_overlay=false
--use_overlay=false
обрабатывает файлы на диске Cuttlefish как доступные для чтения и записи, и изменения распространяются на эти файлы.
Изменение между --use_overlay=false
и значением по умолчанию может привести к ошибкам совместимости. Чтобы принудительно очистить предыдущее состояние устройства, выполните:
stop_cvd
rm $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