Choco: reiniciar e redefinir

Esta página descreve como reiniciar e redefinir dispositivos virtuais Cuttlefish. A redefinição de um dispositivo Cuttlefish para seu estado inicial de disco é chamada de powerwashing na ferramenta de linha de comando.

Ao executar fluxos de trabalho automatizados ou manuais com vários procedimentos diferentes, como conjuntos de testes, a redefinição do dispositivo Cuttlefish entre procedimentos garante que o comportamento de cada procedimento seja independente. Se o estado do disco não for redefinido, um procedimento poderá afetar o comportamento do procedimento a seguir.

Os procedimentos de reinicialização e redefinição descritos nesta página pressupõem que você criou um dispositivo Cuttlefish e definiu algum estado no 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

A partir deste ponto de partida, você pode usar os seguintes fluxos de reinicialização e redefinição:

Implementação de reinicialização rápida do choco

O Cuttlefish usa uma implementação de redefinição rápida que depende da proteção dos discos por trás das sobreposições de disco qcow2 . Por padrão, o Cuttlefish trata os discos originais como somente leitura e usa sobreposições para capturar gravações em disco.

No entanto, existem desvantagens no uso de sobreposições de cópia na gravação. Notavelmente, alterações externas nos discos subjacentes quebram a compatibilidade com as sobreposições existentes e causam um estado inconsistente do disco. O Cuttlefish recria à força as sobreposições quando detecta alterações incompatíveis.

A recriação forçada das sobreposições é indesejável ao desenvolver um recurso que requer manter parte do disco em um determinado estado inicializado enquanto troca uma parte diferente do disco. Por exemplo, instalar um aplicativo com uma configuração de usuário específica e, em seguida, trocar repetidamente o kernel para testar a interação entre o aplicativo e diferentes compilações de kernel. Neste caso, pode valer a pena desabilitar as sobreposições .

Redefinir dispositivos

As seções a seguir descrevem maneiras de redefinir um dispositivo Cuttlefish para seu estado inicial de disco.

Redefinir um dispositivo

Para redefinir um dispositivo Cuttlefish ao estado inicial do disco, execute:

powerwash_cvd

powerwash_cvd desliga a máquina virtual, redefine quaisquer alterações feitas no disco da máquina virtual, reinicia a máquina virtual e aguarda até que ela termine a inicialização. A instância preserva os sinalizadores originais fornecidos para launch_cvd .

Em uma configuração multilocatário , powerwash_cvd reinicia uma única instância do grupo de instâncias:

powerwash_cvd --instance_num=N

Redefinir todos os dispositivos

Para parar e redefinir um ou mais dispositivos para seus estados iniciais do disco, execute:

stop_cvd
launch_cvd --resume=false

stop_cvd executa um desligamento impuro e para o dispositivo.

Adicionar --resume=false a launch_cvd faz com que o Cuttlefish destrua todos os arquivos relacionados à instância em execução anteriormente antes de iniciar a próxima execução. É seguro adicionar sinalizadores launch_cvd adicionais.

Em uma configuração multilocatário , stop_cvd encerra todo o grupo de instâncias.

Reiniciar dispositivos

As seções a seguir descrevem maneiras de reiniciar um dispositivo sem redefini-lo ao estado inicial do disco.

Reinicialização limpa

Para fazer uma reinicialização limpa do dispositivo quando ele responder, execute:

adb reboot

adb reboot conduz o dispositivo através do procedimento de desligamento completo, sincronizando as alterações no disco e garantindo que os processos sejam encerrados. Os processos hospedeiros do choco não estão envolvidos. Este procedimento poderá não estar disponível se o dispositivo entrar em um estado ruim e parar de responder.

Para fazer uma reinicialização limpa de um único dispositivo Cuttlefish em uma configuração multilocatário , especifique o número de série do dispositivo de destino ao executar adb-reboot . Se nenhum dispositivo de destino for especificado, adb não reinicia nenhum dispositivo.

adb -s SERIAL reboot

Reinicialização suja

Para executar uma reinicialização incorreta quando o dispositivo não responder, execute:

restart_cvd

restart_cvd executa um desligamento impuro desligando instantaneamente o dispositivo Cuttlefish. restart_cvd equivale a desconectar e reconectar a bateria a um dispositivo físico. As gravações em disco podem não persistir se estiverem em andamento. restart_cvd espera até que o dispositivo seja totalmente inicializado novamente antes de sair.

Em uma configuração multilocatário , restart_cvd reinicia uma única instância fora do grupo de instâncias. Para especificar qual instância do Cuttlefish reiniciar, use o sinalizador instance_num .

restart_cvd --instance_num=N

Se --instance_num não for usado, o número da instância será padronizado como 1 .

Reinicie usando diferentes sinalizadores launch_cvd

Para parar um ou mais dispositivos e reiniciar com sinalizadores launch_cvd diferentes, execute:

stop_cvd
launch_cvd NEW_FLAG

stop_cvd executa um desligamento não limpo semelhante a restart_cvd . Ele deixa o dispositivo em um estado inativo que pode ser reiniciado posteriormente com um comando launch_cvd diferente. Tal como acontece com restart_cvd , as gravações no disco podem não persistir se não estiverem totalmente sincronizadas com o disco. Para salvar dados com segurança no disco, execute primeiro adb reboot .

adb reboot
stop_cvd
launch_cvd NEW_FLAG

Se as alterações nos sinalizadores launch_cvd forçarem uma alteração no layout do disco que seja incompatível com a implementação de cópia na gravação, launch_cvd ignorará as modificações antigas do disco e redefinirá para o estado original do disco. Para obter uma lista completa de sinalizadores, consulte Sinalizadores .

Execute sem sobreposição

Para cancelar o suporte de redefinição rápida, execute:

launch_cvd --use_overlay=false

--use_overlay=false trata os arquivos do disco Cuttlefish como leitura-gravação e as alterações são propagadas para esses arquivos.

Alterar entre --use_overlay=false e o padrão pode causar erros de compatibilidade. Para limpar à força o estado anterior do dispositivo, execute:

stop_cvd
rm $HOME/cuttlefish $HOME/cuttlefish_runtime $HOME/cuttlefish_assembly

O Cuttlefish não consegue navegar com segurança na transição entre os fluxos com e sem sobreposições, portanto esta alteração elimina todo o estado de gestão do Cuttlefish. Se os arquivos do disco externo forem modificados e reutilizados posteriormente junto com sobreposições, as modificações anteriores serão consideradas parte do estado de linha de base.

Bandeiras

Você pode adicionar argumentos usando sinalizadores ao iniciar um dispositivo Cuttlefish usando launch_cvd . No entanto, para determinados sinalizadores ( Sinalizadores que devem permanecer iguais ), pode ocorrer perda de dados se os sinalizadores forem alterados entre os comandos launch_cvd . Para garantir que nenhuma perda de dados ocorra ao executar uma sequência de comandos que inclua launch_cvd , stop_cvd e, em seguida, launch_cvd novamente, use os mesmos sinalizadores para cada comando launch_cvd . Por exemplo, se o primeiro sinalizador launch_cvd incluir o argumento --kernel_path= KERNEL_PATH , a segunda invocação launch_cvd também deverá incluir o mesmo argumento --kernel_path= KERNEL_PATH ou quaisquer alterações no sistema de arquivos feitas antes de stop_cvd serão perdidas na segunda invocação launch_cvd . O arquivo referenciado por KERNEL_PATH também deve ter o mesmo conteúdo.

Alguns sinalizadores podem ser alterados com segurança entre invocações launch_cvd . As seções a seguir listam os sinalizadores que devem permanecer iguais para evitar perda de dados e os sinalizadores que podem ser alterados com segurança sem perda de dados. Para obter detalhes sobre sinalizadores individuais, consulte a fonte ( flags.cc , disk_flags.cc ) ou execute launch_cvd --help .

Bandeiras que devem permanecer as mesmas

Esses sinalizadores devem permanecer os mesmos de uma invocação launch_cvd para a próxima para evitar perda de dados:

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

Bandeiras que podem mudar

Esses sinalizadores podem ser alterados com segurança entre invocações launch_cvd sem causar perda de dados:

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