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 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
A partir deste ponto de partida, você pode usar os seguintes fluxos de reinicialização e redefinição:
- Se o dispositivo responder, execute uma reinicialização limpa usando
adb reboot
. - Se o dispositivo não responder, execute uma reinicialização incorreta usando
restart_cvd
. - Redefina o estado do dispositivo usando
powerwash_cvd
. - Pare o dispositivo e altere os argumentos
launch_cvd
enquanto mantém o estado do dispositivo ou limpa forçosamente o estado do dispositivo .
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