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, la reimpostazione del dispositivo Cuttlefish tra le procedure garantisce che il comportamento di ciascuna 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 reimpostazione descritte in questa pagina presuppongono che tu abbia creato un dispositivo Cuttlefish e abbia 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 reimpostazione:
- Se il dispositivo risponde, esegui un riavvio pulito utilizzando
adb reboot
. - Se il dispositivo non risponde, esegui un riavvio non corretto utilizzando
restart_cvd
. - Ripristina lo stato del dispositivo utilizzando
powerwash_cvd
. - Interrompi il dispositivo e modifica gli argomenti
launch_cvd
mantenendo lo stato del dispositivo o cancellando forzatamente lo stato del dispositivo.
Implementazione del ripristino rapido di Cuttlefish
Cuttlefish utilizza un'implementazione di reimpostazione rapida che dipende dalla protezione dei dischi dietro gli overlay dei dischi qcow2. Per impostazione predefinita, Cuttlefish tratta i dischi originali come di sola lettura e utilizza gli overlay per acquisire le scritture sul disco.
Tuttavia, l'utilizzo di overlay con copia su scrittura presenta degli svantaggi. In particolare, le modifiche esterne ai dischi sottostanti rompono la compatibilità con gli overlay esistenti e causano uno stato del disco incoerente. Cuttlefish ricrea forzatamente gli overlay quando rileva modifiche incompatibili.
La ricostituzione forzata degli overlay non è auspicabile durante lo sviluppo di una funzionalità che richiede di mantenere parte del disco in un determinato stato di inizializzazione mentre si sostituisce un'altra parte del disco. Ad esempio, installare un'app con una determinata configurazione utente e poi sostituire ripetutamente il kernel per testare l'interazione tra l'app e build del kernel diverse. In questo caso, potrebbe essere opportuno disattivare gli overlay.
Ripristinare i dispositivi
Le sezioni seguenti descrivono i modi per reimpostare un dispositivo Cuttlefish allo stato iniziale del disco.
Ripristinare 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 interrompere e reimpostare uno o più dispositivi sui relativi stati iniziali del disco, esegui:
stop_cvd
launch_cvd --resume=false
stop_cvd
esegue uno spegnimento non corretto 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 in precedenza prima di avviare l'esecuzione successiva. Puoi tranquillamente aggiungere altri flag launch_cvd
.
In una configurazione multi-tenant, stop_cvd
chiude l'intero gruppo di istanze.
Riavviare i dispositivi
Le sezioni seguenti descrivono i modi per riavviare un dispositivo senza ripristinarne lo stato iniziale del disco.
Riavvio pulito
Per riavviare il dispositivo quando è reattivo, esegui:
adb reboot
adb reboot
esegue la procedura di arresto completo del dispositivo, sincronizza le modifiche sul disco e assicura l'arresto dei processi. I processi dell'host Cuttlefish non sono coinvolti. Questa procedura potrebbe non essere disponibile se il dispositivo
è entrato in uno stato errato 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 corretto
Per eseguire un riavvio non corretto quando il dispositivo non risponde, esegui:
restart_cvd
restart_cvd
esegue uno spegnimento non corretto spegnendo immediatamente il dispositivo Seppia. restart_cvd
è l'equivalente di scollegamento e ricollegamento della batteria a un dispositivo fisico. Le scritture sul disco
potrebbero non essere persistenti se erano in corso. restart_cvd
attende che il dispositivo sia nuovamente avviato prima di uscire.
In una configurazione multi-tenant,
restart_cvd
riavvia una singola istanza del gruppo di istanze. Per specificare
l'istanza Cuttlefish da riavviare, utilizza il flag instance_num
.
restart_cvd --instance_num=N
Se non viene utilizzato --instance_num
, il numero di istanze predefinito è 1
.
Riavviare utilizzando diversi flag launch_cvd
Per interrompere uno o più dispositivi e riavviare 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 permanenti se non sono completamente sincronizzate con il disco. Per salvare in sicurezza i dati sul disco, esegui prima
adb reboot
.
adb reboot
stop_cvd
launch_cvd NEW_FLAG
Se le modifiche ai flag launch_cvd
forzano una modifica del layout del disco incompatibile con l'implementazione della copia su scrittura, launch_cvd
ignora le modifiche al disco precedente e reimposta lo stato originale del disco. Per un elenco completo dei flag, consulta Flag.
Eseguire senza un overlay
Per disattivare il supporto del ripristino rapido, esegui:
launch_cvd --use_overlay=false
--use_overlay=false
tratta i file di Cuttlefish come di sola lettura e le modifiche vengono propagate in questi file.
Il passaggio da --use_overlay=false
al valore predefinito può causare errori di compatibilità. Per ripulire forzatamente lo stato precedente del dispositivo, esegui:
stop_cvd
rm $HOME/cuttlefish $HOME/cuttlefish_runtime $HOME/cuttlefish_assembly
Cuttlefish non è in grado di gestire in sicurezza 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 agli overlay, le modifiche precedenti sono considerate parte dello stato di riferimento.
Bandiere
Puoi aggiungere argomenti utilizzando i flag quando avvii un dispositivo Cuttlefish utilizzando
launch_cvd
. Tuttavia, per alcuni flag
(flag che devono rimanere invariati), può verificarsi una perdita di dati se i flag vengono
modificati tra i comandi launch_cvd
. Per assicurarti che non si verifichino perdite di dati quando
esegui una sequenza di comandi che include launch_cvd
, stop_cvd
e poi nuovamentelaunch_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
, altrimenti eventuali modifiche al file system apportate prima di stop_cvd
andranno perse nella seconda chiamata launch_cvd
. Anche il file a cui fa riferimento KERNEL_PATH
deve avere gli stessi contenuti.
Alcuni flag possono essere modificati in sicurezza 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 informazioni dettagliate sui singoli flag, consulta la fonte (flags.cc
, disk_flags.cc
) o esegui launch_cvd --help
.
Indicatori che devono rimanere invariati
Per evitare la perdita di dati, questi flag devono rimanere invariati da un'invocazione di launch_cvd
all'altra:
--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
Indicatori che possono cambiare
Questi flag possono essere modificati in sicurezza tra le invocazioni di launch_cvd
senza causare la 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