Esta página describe cómo reiniciar y restablecer los dispositivos virtuales Cuttlefish. Restablecer un dispositivo Cuttlefish a su estado de disco inicial se conoce como lavado de energía en la herramienta de línea de comandos.
Cuando se ejecutan flujos de trabajo automatizados o manuales con múltiples procedimientos diferentes, como conjuntos de pruebas, restablecer el dispositivo Cuttlefish entre procedimientos garantiza que el comportamiento de cada procedimiento sea independiente. Si no se restablece el estado del disco, un procedimiento puede afectar el comportamiento del siguiente procedimiento.
Los procedimientos de reinicio y restablecimiento descritos en esta página suponen que ha creado un dispositivo Cuttlefish y ha establecido algún estado en el disco.
# 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
Desde este punto de partida, puede utilizar los siguientes flujos de reinicio y restablecimiento:
- Si el dispositivo responde, realice un reinicio limpio usando
adb reboot
. - Si el dispositivo no responde, realice un reinicio sucio usando
restart_cvd
. - Restablezca el estado del dispositivo usando
powerwash_cvd
. - Detenga el dispositivo y cambie los argumentos
launch_cvd
mientras mantiene el estado del dispositivo o lo borra por la fuerza .
Implementación de reinicio rápido de sepia
Cuttlefish utiliza una implementación de reinicio rápido que depende de la protección de los discos detrás de las superposiciones de discos qcow2 . De forma predeterminada, Cuttlefish trata los discos originales como de solo lectura y utiliza superposiciones para capturar escrituras en el disco.
Sin embargo, existen inconvenientes al utilizar superposiciones de copia en escritura. En particular, los cambios externos en los discos subyacentes rompen la compatibilidad con las superposiciones existentes y provocan un estado del disco inconsistente. Cuttlefish recrea a la fuerza las superposiciones cuando detecta cambios incompatibles.
No es deseable recrear las superposiciones a la fuerza cuando se desarrolla una función que requiere mantener parte del disco en un estado inicializado particular mientras se intercambia una parte diferente del disco. Por ejemplo, instalar una aplicación con una configuración de usuario particular y luego cambiar repetidamente el kernel para probar la interacción entre la aplicación y las diferentes compilaciones del kernel. En este caso, podría valer la pena desactivar las superposiciones .
Restablecer dispositivos
Las siguientes secciones describen formas de restablecer un dispositivo Cuttlefish a su estado de disco inicial.
Restablecer un dispositivo
Para restablecer un dispositivo Cuttlefish a su estado de disco inicial, ejecute:
powerwash_cvd
powerwash_cvd
apaga la máquina virtual, restablece los cambios realizados en el disco de la máquina virtual, reinicia la máquina virtual y espera hasta que termine de iniciarse. La instancia conserva los indicadores originales proporcionados a launch_cvd
.
En una configuración multiinquilino , powerwash_cvd
reinicia una única instancia fuera del grupo de instancias:
powerwash_cvd --instance_num=N
Restablecer todos los dispositivos
Para detener y restablecer uno o más dispositivos a sus estados iniciales de disco, ejecute:
stop_cvd
launch_cvd --resume=false
stop_cvd
realiza un apagado sucio y detiene el dispositivo.
Agregar --resume=false
a launch_cvd
hace que Cuttlefish destruya todos los archivos relacionados con la instancia que se ejecutó anteriormente antes de comenzar la siguiente ejecución. Es seguro agregar indicadores launch_cvd
adicionales.
En una configuración multiinquilino , stop_cvd
cierra todo el grupo de instancias.
Reiniciar dispositivos
Las siguientes secciones describen formas de reiniciar un dispositivo sin restablecerlo a su estado inicial de disco.
Reinicio limpio
Para realizar un reinicio limpio del dispositivo cuando el dispositivo responde, ejecute:
adb reboot
adb reboot
lleva el dispositivo a través del procedimiento de apagado completo, sincroniza los cambios en el disco y garantiza que los procesos se cierren. Los procesos del huésped de la sepia no están involucrados. Este procedimiento podría no estar disponible si el dispositivo ha entrado en mal estado y no responde.
Para realizar un reinicio limpio de un único dispositivo Cuttlefish en una configuración multiinquilino , especifique el número de serie del dispositivo de destino cuando ejecute adb-reboot
. Si no se especifica ningún dispositivo de destino, adb
no reinicia ningún dispositivo.
adb -s SERIAL reboot
Reinicio sucio
Para realizar un reinicio sucio cuando el dispositivo no responde, ejecute:
restart_cvd
restart_cvd
realiza un apagado sucio al apagar instantáneamente el dispositivo Cuttlefish. restart_cvd
es el equivalente a desconectar y volver a conectar la batería a un dispositivo físico. Es posible que las escrituras en disco no persistan si estuvieran en curso. restart_cvd
espera hasta que el dispositivo se haya reiniciado completamente antes de salir.
En una configuración multiinquilino , restart_cvd
reinicia una única instancia fuera del grupo de instancias. Para especificar qué instancia de Cuttlefish reiniciar, utilice el indicador instance_num
.
restart_cvd --instance_num=N
Si no se utiliza --instance_num
, el número de instancia predeterminado es 1
.
Reinicie usando diferentes indicadores launch_cvd
Para detener uno o más dispositivos y reiniciar con diferentes indicadores launch_cvd
, ejecute:
stop_cvd
launch_cvd NEW_FLAG
stop_cvd
realiza un apagado sucio similar a restart_cvd
. Deja el dispositivo en un estado inactivo que se puede iniciar nuevamente más tarde con un comando launch_cvd
diferente. Al igual que con restart_cvd
, es posible que las escrituras en el disco no persistan si no están completamente sincronizadas con el disco. Para guardar datos en el disco de forma segura, primero ejecute adb reboot
.
adb reboot
stop_cvd
launch_cvd NEW_FLAG
Si los cambios en los indicadores launch_cvd
fuerzan un cambio en el diseño del disco que es incompatible con la implementación de copia en escritura, launch_cvd
ignora las modificaciones antiguas del disco y se restablece al estado original del disco. Para obtener una lista completa de banderas, consulte Banderas .
Ejecutar sin superposición
Para optar por no recibir soporte de reinicio rápido, ejecute:
launch_cvd --use_overlay=false
--use_overlay=false
trata los archivos del disco Cuttlefish como lectura-escritura y los cambios se propagan a esos archivos.
Cambiar entre --use_overlay=false
y el valor predeterminado puede provocar errores de compatibilidad. Para limpiar a la fuerza el estado anterior del dispositivo, ejecute:
stop_cvd
rm $HOME/cuttlefish $HOME/cuttlefish_runtime $HOME/cuttlefish_assembly
La sepia no puede navegar con seguridad en la transición entre los flujos con y sin superposiciones, por lo que este cambio elimina todo el estado de gestión de la sepia. Si los archivos del disco externo se modifican y se reutilizan más adelante junto con las superposiciones, las modificaciones anteriores se consideran parte del estado de referencia.
Banderas
Puede agregar argumentos usando banderas al iniciar un dispositivo Cuttlefish usando launch_cvd
. Sin embargo, para ciertos indicadores ( indicadores que deben permanecer iguales ), se puede producir una pérdida de datos si se cambian los indicadores entre los comandos launch_cvd
. Para garantizar que no se produzca pérdida de datos al ejecutar una secuencia de comandos que incluyen launch_cvd
, stop_cvd
y luego launch_cvd
nuevamente, use las mismas marcas para cada comando launch_cvd
. Por ejemplo, si el primer indicador launch_cvd
incluye el argumento --kernel_path= KERNEL_PATH
, la segunda invocación launch_cvd
también debe incluir el mismo argumento --kernel_path= KERNEL_PATH
, o cualquier cambio en el sistema de archivos realizado antes de stop_cvd
se perderá en la segunda invocación launch_cvd
. El archivo al que hace referencia KERNEL_PATH
también debe tener el mismo contenido.
Es seguro cambiar algunos indicadores entre invocaciones launch_cvd
. Las siguientes secciones enumeran los indicadores que deben permanecer iguales para evitar la pérdida de datos y los indicadores que se pueden cambiar de forma segura sin pérdida de datos. Para obtener detalles sobre indicadores individuales, consulte la fuente ( flags.cc
, disk_flags.cc
) o ejecute launch_cvd --help
.
Banderas que deben permanecer iguales
Estos indicadores deben permanecer iguales de una invocación launch_cvd
a la siguiente para evitar la pérdida de datos:
-
--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
Banderas que pueden cambiar
Estos indicadores se pueden cambiar de forma segura entre invocaciones launch_cvd
sin causar pérdida de datos:
-
--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