Questa pagina descrive come riavviare e ripristinare i dispositivi virtuali Cuttlefish. Il ripristino di un dispositivo Cuttlefish allo stato iniziale del disco viene definito powerwash nello strumento da riga di comando.
Quando si eseguono flussi di lavoro automatizzati o manuali con più procedure diverse, come le suite di test, il ripristino 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 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 è possibile utilizzare i seguenti flussi di riavvio e ripristino:
- Se il dispositivo risponde, esegui un riavvio pulito utilizzando
adb reboot
. - Se il dispositivo non risponde, eseguire un riavvio non pulito utilizzando
restart_cvd
. - Ripristina 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 delle seppie
Cuttlefish utilizza un'implementazione di ripristino rapido che dipende dalla protezione dei dischi dietro gli overlay del disco qcow2 . Per impostazione predefinita, Cuttlefish considera i dischi originali come di sola lettura e utilizza gli overlay per acquisire le scritture su disco.
Tuttavia ci sono degli svantaggi nell'usare gli overlay copy-on-write. In particolare, le modifiche esterne ai dischi sottostanti interrompono la compatibilità con gli overlay esistenti e causano uno stato del disco incoerente. Seppia ricrea forzatamente le sovrapposizioni quando rileva modifiche incompatibili.
La ricreazione forzata delle sovrapposizioni non è auspicabile quando si sviluppa una funzionalità che richiede di mantenere parte del disco in un particolare stato inizializzato durante la sostituzione di una parte diversa del disco. Ad esempio, installando un'app con una particolare configurazione utente e quindi sostituendo ripetutamente il kernel per testare l'interazione tra l'app e le diverse build del kernel. In questo caso potrebbe valere la pena disabilitare gli overlay .
Ripristina i dispositivi
Le sezioni seguenti descrivono le modalità per ripristinare un dispositivo Cuttlefish allo stato iniziale del disco.
Reimposta un dispositivo
Per ripristinare un dispositivo Cuttlefish allo stato iniziale del disco, esegui:
powerwash_cvd
powerwash_cvd
spegne la macchina virtuale, reimposta tutte le modifiche apportate al disco della macchina virtuale, riavvia la macchina virtuale e attende fino al completamento dell'avvio. L'istanza conserva i flag originali forniti a launch_cvd
.
In una configurazione multi-tenant , powerwash_cvd
riavvia una singola istanza dal gruppo di istanze:
powerwash_cvd --instance_num=N
Ripristina tutti i dispositivi
Per arrestare e ripristinare uno o più dispositivi allo stato iniziale del disco, eseguire:
stop_cvd
launch_cvd --resume=false
stop_cvd
esegue uno spegnimento non pulito e arresta il dispositivo.
Aggiungendo --resume=false
a launch_cvd
fa sì che Cuttlefish distrugga tutti i file relativi all'istanza precedentemente eseguita prima di avviare l'esecuzione successiva. È sicuro aggiungere eventuali flag launch_cvd
aggiuntivi.
In una configurazione multi-tenant , stop_cvd
arresta l'intero gruppo di istanze.
Riavvia i dispositivi
Le sezioni seguenti descrivono le modalità di riavvio di un dispositivo senza reimpostare il dispositivo allo stato iniziale del disco.
Riavvio pulito
Per eseguire un riavvio pulito del dispositivo quando il dispositivo risponde, eseguire:
adb reboot
adb reboot
accompagna il dispositivo attraverso la procedura di spegnimento completo, sincronizzando le modifiche sul disco e assicurandosi che i processi si spengano. I processi host delle seppie 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 , specificare il numero di serie del dispositivo di destinazione durante l'esecuzione adb-reboot
. Se non viene specificato alcun dispositivo di destinazione, adb
non riavvia alcun dispositivo.
adb -s SERIAL reboot
Riavvio sporco
Per eseguire un riavvio non pulito quando il dispositivo non risponde, eseguire:
restart_cvd
restart_cvd
esegue uno spegnimento non corretto spegnendo immediatamente il dispositivo Cuttlefish. restart_cvd
equivale a scollegare e ricollegare la batteria a un dispositivo fisico. Le scritture su disco potrebbero non persistere se fossero in corso. restart_cvd
attende finché il dispositivo non si è riavviato completamente prima di uscire.
In una configurazione multi-tenant , restart_cvd
riavvia una singola istanza dal gruppo di istanze. Per specificare quale istanza di Cuttlefish riavviare, utilizzare il flag instance_num
.
restart_cvd --instance_num=N
Se --instance_num
non viene utilizzato, il numero di istanza predefinito è 1
.
Riavvia utilizzando diversi flag launch_cvd
Per arrestare uno o più dispositivi e riavviarli con diversi flag launch_cvd
, eseguire:
stop_cvd
launch_cvd NEW_FLAG
stop_cvd
esegue un arresto non corretto simile a restart_cvd
. Lascia il dispositivo in uno stato dormiente che può essere riavviato in seguito con un diverso comando launch_cvd
. Come con restart_cvd
, le scritture su disco potrebbero non persistere se non sono completamente sincronizzate con il disco. Per salvare in sicurezza i dati su disco, esegui prima adb reboot
.
adb reboot
stop_cvd
launch_cvd NEW_FLAG
Se le modifiche ai flag launch_cvd
impongono una modifica al layout del disco che è incompatibile con l'implementazione copy-on-write, launch_cvd
ignora le vecchie modifiche del disco e ripristina lo stato originale del disco. Per un elenco completo dei flag, vedere Flag .
Esegui senza sovrapposizione
Per disattivare il supporto per il ripristino rapido, esegui:
launch_cvd --use_overlay=false
--use_overlay=false
tratta i file del disco Cuttlefish come lettura-scrittura e le modifiche vengono propagate in tali file.
La modifica tra --use_overlay=false
e il valore predefinito può causare errori di compatibilità. Per pulire forzatamente lo stato precedente del dispositivo, eseguire:
stop_cvd
rm $HOME/cuttlefish $HOME/cuttlefish_runtime $HOME/cuttlefish_assembly
Cuttlefish non può navigare in sicurezza nella transizione tra i flussi con e senza sovrapposizioni, quindi questa modifica elimina tutto lo stato di gestione di Cuttlefish. Se i file del disco esterno vengono modificati e riutilizzati successivamente 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 alcuni flag ( Flag che devono rimanere gli stessi ), può verificarsi una perdita di dati se i flag vengono modificati tra i comandi launch_cvd
. Per garantire che non si verifichi alcuna perdita di dati durante l'esecuzione di una sequenza di comandi che includono launch_cvd
, stop_cvd
e quindi di nuovo launch_cvd
, utilizzare gli stessi flag per ogni comando launch_cvd
. Ad esempio, se il primo flag launch_cvd
include l'argomento --kernel_path= KERNEL_PATH
, anche la seconda invocazione launch_cvd
deve includere lo stesso argomento --kernel_path= KERNEL_PATH
, altrimenti eventuali modifiche al file system apportate prima di stop_cvd
verranno perse nella seconda invocazione launch_cvd
. Anche il file a cui fa riferimento KERNEL_PATH
deve avere lo stesso contenuto.
Alcuni flag possono essere modificati in modo sicuro tra le invocazioni 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 modo sicuro senza perdita di dati. Per dettagli sui singoli flag, fare riferimento al sorgente ( flags.cc
, disk_flags.cc
) o eseguire launch_cvd --help
.
Bandiere che devono restare le stesse
Questi flag devono rimanere gli stessi da un'invocazione launch_cvd
a quella successiva 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
Bandiere che possono cambiare
Questi flag possono essere modificati in modo sicuro tra le invocazioni 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