На этой странице описывается, как перезапустить и сбросить виртуальные устройства 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 disk overlays . По умолчанию Cuttlefish рассматривает исходные диски как доступные только для чтения и использует overlays для захвата записей на диск.
Однако есть недостатки в использовании оверлеев копирования-при-записи. В частности, внешние изменения базовых дисков нарушают совместимость с существующими оверлеями и приводят к несогласованному состоянию диска. 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
ждет, пока устройство полностью не загрузится снова, прежде чем выйти.
В конфигурации multi-tenant 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