Каракатица: перезагрузка и сброс

На этой странице описывается, как перезапустить и сбросить настройки виртуальных устройств Cuttlefish. Сброс устройства Cuttlefish к исходному состоянию диска в командной строке называется Powerwashing .

При запуске автоматизированных или ручных рабочих процессов с несколькими различными процедурами, такими как наборы тестов, сброс устройства Cuttlefish между процедурами обеспечивает независимость поведения каждой процедуры. Если состояние диска не сброшено, одна процедура может повлиять на поведение следующей процедуры.

Процедуры перезапуска и сброса, описанные на этой странице, предполагают, что вы создали устройство Cuttlefish и задали определенное состояние на диске.

# 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

С этой отправной точки вы можете использовать следующие потоки перезапуска и сброса:

Реализация быстрого сброса 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