Esta página descreve como reiniciar e redefinir dispositivos virtuais Cuttlefish. A redefinição para o estado inicial do disco é chamada de Powerwash na ferramenta de linha de comando.
Ao executar fluxos de trabalho automatizados ou manuais com vários procedimentos, como pacotes de testes, a redefinição do dispositivo Cuttlefish entre procedimentos garante que o comportamento de cada um deles seja independente. Se o estado do disco não for redefinido, um procedimento poderá afetar o comportamento do próximo.
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
Após esse ponto de partida, é possível usar os seguintes fluxos de reinicialização e redefinição:
- Se o dispositivo estiver respondendo, execute uma reinicialização limpa usando o
adb reboot. - Se o dispositivo não estiver respondendo, execute uma reinicialização forçada usando o
restart_cvd. - Redefina o estado do dispositivo usando o
powerwash_cvd. - Interrompa o dispositivo e mude os argumentos
launch_cvdenquanto mantém ou apaga à força o estado dele.
Implementação da redefinição rápida do Cuttlefish
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 discos qcow2 (link em inglês). Por padrão, o Cuttlefish trata discos originais como somente leitura e usa sobreposições para capturar gravações de disco.
No entanto, as sobreposições do tipo copy-on-write têm desvantagens. As mudanças externas nos discos interrompem a compatibilidade com as sobreposições já existentes e causam um estado de disco inconsistente. O Cuttlefish força a recriação das sobreposições quando detecta mudanças incompatíveis.
Essa recriação não é recomendável ao desenvolver um recurso que exige que parte do disco seja mantida em um estado inicializado específico enquanto outra é substituída. Um exemplo disso seria instalar um app com uma configuração de usuário específica e depois trocar o kernel repetidamente para testar a interação entre o app e os diferentes builds do kernel. Nesse caso, é recomendável desativar as sobreposições.
Redefinir dispositivos
As seções a seguir descrevem maneiras de redefinir um dispositivo Cuttlefish para o estado inicial do disco.
Redefinir um dispositivo
Para redefinir um dispositivo Cuttlefish para o estado inicial do disco, execute o seguinte:
powerwash_cvdO powerwash_cvd desliga a máquina virtual, redefine as mudanças feitas no
disco, reinicia essa máquina e espera até o fim da
reinicialização. A instância preserva as flags originais fornecidas para launch_cvd.
Em uma configuração com vários locatários,
o powerwash_cvd reinicia uma única instância do grupo:
powerwash_cvd --instance_num=NRedefinir todos os dispositivos
Para interromper e redefinir um ou mais dispositivos para os estados iniciais do disco, execute o seguinte:
stop_cvdlaunch_cvd --resume=false
O stop_cvd força o desligamento e interrompe o dispositivo.
A adição de --resume=false ao launch_cvd faz com que o Cuttlefish destrua todos os arquivos
relacionados à instância que estava em execução anteriormente antes de iniciar a próxima execução. É
seguro adicionar outras flags launch_cvd.
Em uma configuração multilocatária,o
comando stop_cvd encerra todo o grupo de instâncias.
Reiniciar dispositivos
As seções a seguir descrevem maneiras de reiniciar um dispositivo sem fazer a redefinição para o estado inicial do disco.
Reinicialização limpa
Para fazer uma reinicialização limpa do dispositivo quando ele responder, execute o seguinte:
adb rebootO adb reboot conduz o dispositivo por todo o procedimento de desligamento, sincronizando
mudanças no disco e garantindo que os processos sejam encerrados. Os processos do host do Cuttlefish
não estão envolvidos. Esse procedimento poderá ficar indisponível se o dispositivo
entrar em um estado inadequado e parar de responder.
Para fazer uma reinicialização limpa de um único dispositivo Cuttlefish em uma
configuração de vários locatários, especifique o
número de série
do dispositivo de destino ao executar o adb-reboot. Se a especificação não for
feita, o adb não reiniciará nenhum dispositivo.
adb -s SERIAL rebootReinicialização forçada
Para realizar uma reinicialização forçada quando o dispositivo não estiver respondendo, execute o seguinte:
restart_cvdO restart_cvd desliga o dispositivo Cuttlefish de forma instantânea
e forçada. Executar o restart_cvd equivale a
remover e reinserir a bateria de um dispositivo físico. As gravações de disco
podem não ser mantidas caso estejam em andamento. O trabalho do restart_cvd só termina quando o dispositivo
for totalmente inicializado novamente.
Em uma configuração com vários locatários,
o restart_cvd reinicia uma única instância fora do grupo. Para especificar
qual instância do Cuttlefish vai ser reiniciada, use a flag instance_num.
restart_cvd --instance_num=NSe a --instance_num não for usada, o número da instância será definido como 1 por padrão.
Reiniciar usando diferentes flags launch_cvd
Se quiser parar um ou mais dispositivos e reiniciar com diferentes flags launch_cvd, execute o seguinte:
stop_cvdlaunch_cvd NEW_FLAG
O stop_cvd executa um desligamento forçado semelhante ao restart_cvd. O dispositivo fica
em um estado inativo que pode ser iniciado mais uma vez com um comando
launch_cvd diferente. Assim como em restart_cvd, as gravações de disco podem não persistir se
não forem totalmente sincronizadas. Para salvar dados no disco com segurança, execute o
adb reboot primeiro.
adb rebootstop_cvdlaunch_cvd NEW_FLAG
Se as mudanças nas flags launch_cvd forçarem uma mudança no layout do disco
que seja incompatível com a implementação de copy-on-write, o launch_cvd vai ignorar
as modificações de disco antigas e redefinir o disco para o estado original. Para uma
lista completa, consulte Flags.
Executar sem sobreposição
Para desativar o suporte à redefinição rápida, execute o seguinte:
launch_cvd --use_overlay=false--use_overlay=false trata os arquivos de disco do Cuttlefish como leitura/gravação e
as mudanças são propagadas para esses arquivos.
A mudança entre --use_overlay=false e o padrão pode causar erros
de compatibilidade. Para forçar a limpeza do estado anterior do dispositivo, execute o seguinte:
stop_cvdrm $HOME/cuttlefish $HOME/cuttlefish_runtime $HOME/cuttlefish_assembly
O Cuttlefish não consegue fazer a transição entre os fluxos com e sem sobreposições de forma segura. Portanto, essa mudança exclui todo o estado de gerenciamento do Cuttlefish. Se os arquivos do disco externo forem modificados e reutilizados depois com sobreposições, as modificações anteriores vão ser consideradas parte do estado de referência.
Flags
É possível adicionar argumentos usando flags ao iniciar um dispositivo Cuttlefish com
o launch_cvd. No entanto, a perda de dados poderá ocorrer com algumas flags
se elas forem modificadas entre os comandos launch_cvd.
Confira as flags que precisam permanecer iguais. Para garantir que não haja perda de dados ao
executar uma sequência de comandos que incluem launch_cvd, stop_cvd e
launch_cvd novamente, use as mesmas flags para cada comando launch_cvd. Por
exemplo, se a primeira flag launch_cvd incluir o argumento
--kernel_path=KERNEL_PATH, a segunda invocação de launch_cvd
também precisará incluir o mesmo argumento
--kernel_path=KERNEL_PATH, ou as mudanças do sistema de arquivos feitas antes de stop_cvd serão perdidas na
segunda invocação de launch_cvd. O arquivo referenciado por
KERNEL_PATH também precisa ter os mesmos conteúdos.
Algumas flags são seguras para mudanças entre as invocações de launch_cvd. As seções a seguir
listam as flags que precisam permanecer iguais para evitar a perda de dados e as
que podem ser modificadas com segurança sem essas perdas. Para detalhes sobre flags específicas,
consulte a origem
(flags.cc,
disk_flags.cc)
ou execute launch_cvd --help.
Flags que precisam permanecer iguais
Para evitar a perda de dados, estas flags não podem mudar de uma invocação de
launch_cvd para a próxima:
--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
Flags que podem mudar
Estas flags podem ser modificadas com segurança entre as invocações de 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