Sepia: reiniciar y restablecer

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 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

Desde este punto de partida, puede utilizar los siguientes flujos de reinicio y restablecimiento:

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