Questa pagina descrive come riavviare e reimpostare i dispositivi virtuali Cuttlefish. Il ripristino dello stato iniziale del disco di un dispositivo Cuttlefish è denominato powerwash nello strumento a riga di comando.
Quando esegui flussi di lavoro automatici o manuali con più procedure diverse, come le suite di test, il ripristino del dispositivo Cuttlefish tra le procedure garantisce che il comportamento di ogni procedura sia indipendente. Se lo stato del disco non viene reimpostato, una procedura può influire sul comportamento della procedura successiva.
Le procedure di riavvio e ripristino descritte in questa pagina presuppongono che tu abbia creato un dispositivo Cuttlefish e impostato uno stato sul 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
Da questo punto di partenza, puoi utilizzare i seguenti flussi di riavvio e ripristino:
- Se il dispositivo risponde, esegui un riavvio pulito utilizzando
adb reboot
. - Se il dispositivo non risponde, esegui un riavvio non pulito utilizzando
restart_cvd
. - Reimposta lo stato del dispositivo utilizzando
powerwash_cvd
. - Arresta il dispositivo e modifica gli argomenti
launch_cvd
mantenendo lo stato del dispositivo o cancellandolo forzatamente .
Implementazione del ripristino rapido di Cuttlefish
Cuttlefish utilizza un'implementazione di ripristino rapido che dipende dalla protezione dei dischi dietro i sovrapposizioni del disco qcow2. Per impostazione predefinita, Cuttlefish considera i dischi originali di sola lettura e utilizza le sovrapposizioni per acquisire le scritture su disco.
Tuttavia, l'utilizzo di overlay copy-on-write presenta degli svantaggi. In particolare, le modifiche esterne ai dischi sottostanti interrompono la compatibilità con gli overlay esistenti e causano uno stato del disco incoerente. Cuttlefish ricrea forzatamente le sovrapposizioni quando rileva modifiche incompatibili.
La ricreazione forzata degli overlay non è auspicabile quando si sviluppa una funzionalità che richiede di mantenere una parte del disco in un particolare stato inizializzato mentre si sostituisce un'altra parte del disco. Ad esempio, installare un'app con una particolare configurazione utente e poi sostituire ripetutamente il kernel per testare l'interazione tra l'app e diverse build del kernel. In questo caso, potrebbe valere la pena disattivare le sovrapposizioni.
Reimposta dispositivi
Le sezioni seguenti descrivono i modi per ripristinare lo stato iniziale del disco di un dispositivo Cuttlefish.
Reimpostare un dispositivo
Per reimpostare un dispositivo Cuttlefish allo stato iniziale del disco, esegui:
powerwash_cvd
powerwash_cvd
arresta la macchina virtuale, reimposta le modifiche apportate al
disco della macchina virtuale, riavvia la macchina virtuale e attende il completamento
dell'avvio. L'istanza conserva i flag originali assegnati a launch_cvd
.
In una configurazione multi-tenant,
powerwash_cvd
riavvia una singola istanza del gruppo di istanze:
powerwash_cvd --instance_num=N
Reimposta tutti i dispositivi
Per arrestare e reimpostare uno o più dispositivi ai loro stati iniziali del disco, esegui:
stop_cvd
launch_cvd --resume=false
stop_cvd
esegue un arresto anomalo e arresta il dispositivo.
L'aggiunta di --resume=false
a launch_cvd
fa sì che Cuttlefish distrugga tutti i file
correlati all'istanza in esecuzione precedente prima di avviare l'esecuzione successiva. Puoi aggiungere in sicurezza eventuali launch_cvd
flag aggiuntivi.
In una configurazione multi-tenant,ß
stop_cvd
arresta l'intero gruppo di istanze.
Riavviare i dispositivi
Le sezioni seguenti descrivono i modi per riavviare un dispositivo senza ripristinare lo stato iniziale del disco.
Riavvio pulito
Per eseguire un riavvio pulito del dispositivo quando risponde, esegui:
adb reboot
adb reboot
esegue la procedura di spegnimento completa del dispositivo, sincronizzando
le modifiche sul disco e assicurandosi che i processi vengano chiusi. I processi host Cuttlefish
non sono coinvolti. Questa procedura potrebbe non essere disponibile se il dispositivo
è entrato in uno stato anomalo e non risponde.
Per eseguire un riavvio pulito di un singolo dispositivo Cuttlefish in una
configurazione multi-tenant, specifica il
numero di serie
del dispositivo di destinazione quando esegui adb-reboot
. Se non viene specificato alcun dispositivo di destinazione, adb
non riavvia alcun dispositivo.
adb -s SERIAL reboot
Riavvio non pulito
Per eseguire un riavvio non pulito quando il dispositivo non risponde, esegui:
restart_cvd
restart_cvd
esegue un arresto anomalo spegnendo immediatamente il
dispositivo Cuttlefish. restart_cvd
equivale a
scollegare e ricollegare la batteria a un dispositivo fisico. Le scritture sul disco
potrebbero non essere mantenute se erano in corso. restart_cvd
attende il riavvio completo del dispositivo prima di uscire.
In una configurazione multi-tenant,
restart_cvd
riavvia una singola istanza del gruppo di istanze. Per specificare
quale istanza di Cuttlefish riavviare, utilizza il flag instance_num
.
restart_cvd --instance_num=N
Se --instance_num
non viene utilizzato, il numero dell'istanza è 1
per impostazione predefinita.
Riavvia utilizzando flag launch_cvd diversi
Per arrestare uno o più dispositivi e riavviarli con flag launch_cvd
diversi, esegui:
stop_cvd
launch_cvd NEW_FLAG
stop_cvd
esegue un arresto anomalo simile a restart_cvd
. Il dispositivo viene lasciato in uno stato inattivo che può essere riavviato in un secondo momento con un comando launch_cvd
diverso. Come per restart_cvd
, le scritture sul disco potrebbero non essere persistenti se non vengono sincronizzate completamente con il disco. Per salvare in modo sicuro i dati sul disco, esegui
adb reboot
prima.
adb reboot
stop_cvd
launch_cvd NEW_FLAG
Se le modifiche ai flag launch_cvd
forzano una modifica al layout del disco
incompatibile con l'implementazione copy-on-write, launch_cvd
ignora
le vecchie modifiche al disco e ripristina lo stato originale del disco. Per un elenco
completo dei flag, consulta Flag.
Esegui senza overlay
Per disattivare il supporto del ripristino rapido, esegui:
launch_cvd --use_overlay=false
--use_overlay=false
considera i file del disco Cuttlefish come lettura/scrittura e
le modifiche vengono propagate in questi file.
Il passaggio da --use_overlay=false
a quello predefinito può causare errori di compatibilità. Per forzare la pulizia dello stato precedente del dispositivo, esegui:
stop_cvd
rm $HOME/cuttlefish $HOME/cuttlefish_runtime $HOME/cuttlefish_assembly
Cuttlefish non può gestire in modo sicuro la transizione tra i flussi con e senza overlay, pertanto questa modifica elimina tutto lo stato di gestione di Cuttlefish. Se i file del disco esterno vengono modificati e riutilizzati in un secondo momento insieme alle sovrapposizioni, le modifiche precedenti vengono considerate parte dello stato di base.
Bandiere
Puoi aggiungere argomenti utilizzando i flag quando avvii un dispositivo Cuttlefish utilizzando
launch_cvd
. Tuttavia, per determinati flag
(Flag che devono rimanere invariati), può verificarsi una perdita di dati se i flag vengono
modificati tra i comandi launch_cvd
. Per evitare perdite di dati quando esegui una sequenza di comandi che includono launch_cvd
, stop_cvd
e poi di nuovo launch_cvd
, utilizza gli stessi flag per ogni comando launch_cvd
. Ad esempio, se il primo flag launch_cvd
include l'argomento --kernel_path=KERNEL_PATH
, la seconda chiamata launch_cvd
deve includere anche lo stesso argomento --kernel_path=KERNEL_PATH
o qualsiasi modifica al file system apportata prima di stop_cvd
viene persa nella seconda chiamata launch_cvd
. Anche il file a cui fa riferimento
KERNEL_PATH
deve avere gli stessi contenuti.
È possibile modificare in sicurezza alcuni flag tra le invocazioni di launch_cvd
. Le sezioni seguenti elencano i flag che devono rimanere invariati per evitare la perdita di dati e i flag che possono essere modificati in sicurezza senza perdita di dati. Per i dettagli sui singoli flag,
consulta l'origine (
flags.cc
, disk_flags.cc
) o esegui launch_cvd --help
.
Flag che devono rimanere invariati
Questi flag devono rimanere invariati da un'invocazione di launch_cvd
all'altra per
evitare la perdita di dati:
--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
Flag che possono cambiare
Questi flag possono essere modificati in modo sicuro tra le invocazioni di launch_cvd
senza
causare perdita di dati:
--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