На этой странице описано, как перезапустить и сбросить виртуальные устройства Cuttlefish. Сброс устройства Cuttlefish в исходное состояние диска в инструменте командной строки называется промывкой питания .
При запуске автоматических или ручных рабочих процессов с несколькими различными процедурами, например наборами тестов, сброс настроек устройства 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 в исходное состояние диска, запустите:
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 в мультитенантной конфигурации , укажите серийный номер целевого устройства при запуске adb-reboot
. Если целевое устройство не указано, adb
не перезапускает ни одно устройство.
adb -s SERIAL reboot
Нечистый перезапуск
Чтобы выполнить нечистый перезапуск, когда устройство не отвечает, запустите:
restart_cvd
restart_cvd
выполняет некорректное завершение работы, мгновенно отключая устройство Каракатицы. 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
обрабатывает дисковые файлы Каракатиц как для чтения и записи, и изменения распространяются на эти файлы.
Изменение параметра --use_overlay=false
на значение по умолчанию может привести к ошибкам совместимости. Чтобы принудительно очистить предыдущее состояние устройства, запустите:
stop_cvd
rm $HOME/cuttlefish $HOME/cuttlefish_runtime $HOME/cuttlefish_assembly
Каракатица не может безопасно перемещаться между потоками с наложениями и без них, поэтому это изменение удаляет все состояние управления Каракатицей. Если файлы внешнего диска изменяются и впоследствии повторно используются вместе с наложениями, более ранние изменения считаются частью базового состояния.
Флаги
Вы можете добавлять аргументы, используя флаги, при запуске устройства 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
На этой странице описано, как перезапустить и сбросить виртуальные устройства Cuttlefish. Сброс устройства Cuttlefish в исходное состояние диска в инструменте командной строки называется промывкой питания .
При запуске автоматических или ручных рабочих процессов с несколькими различными процедурами, например наборами тестов, сброс устройства 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 в исходное состояние диска, запустите:
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 в мультитенантной конфигурации , укажите серийный номер целевого устройства при запуске adb-reboot
. Если целевое устройство не указано, adb
не перезапускает ни одно устройство.
adb -s SERIAL reboot
Нечистый перезапуск
Чтобы выполнить нечистый перезапуск, когда устройство не отвечает, запустите:
restart_cvd
restart_cvd
выполняет некорректное завершение работы, мгновенно отключая устройство Каракатицы. 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
обрабатывает дисковые файлы Каракатиц как для чтения и записи, и изменения распространяются на эти файлы.
Изменение параметра --use_overlay=false
на значение по умолчанию может привести к ошибкам совместимости. Чтобы принудительно очистить предыдущее состояние устройства, запустите:
stop_cvd
rm $HOME/cuttlefish $HOME/cuttlefish_runtime $HOME/cuttlefish_assembly
Каракатица не может безопасно перемещаться между потоками с наложениями и без них, поэтому это изменение удаляет все состояние управления Каракатицей. Если файлы внешнего диска изменяются и впоследствии повторно используются вместе с наложениями, более ранние изменения считаются частью базового состояния.
Флаги
Вы можете добавлять аргументы, используя флаги, при запуске устройства «Каракатица» с помощью 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