Seppia: riavvia e reimposta

In questa pagina viene descritto 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 si eseguono flussi di lavoro automatici o manuali con più procedure diverse, ad esempio i gruppi di test, la reimpostazione del dispositivo Cuttlefish tra una procedura e l'altra 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 reimpostazione descritte in questa pagina presuppongono che tu abbia creato un dispositivo Cuttlefish e abbia impostato uno stato sul disco.

# Launch a device
launch_cvd
# Make some modifications to the device
adb shell touch /storage/self/primary/Documents/hello
# Check the device state
adb shell ls /storage/self/primary/Documents

Da questo punto di partenza, puoi utilizzare i seguenti flussi di riavvio e reimpostazione:

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 interrompono la compatibilità con gli overlay esistenti e causano uno stato incoerente del disco. La seppia ricrea a forza gli overlay quando rileva modifiche incompatibili.

Non è consigliabile ricreare forzatamente gli overlay quando si sviluppa una funzionalità che richiede di mantenere una parte del disco in un particolare stato inizializzato durante lo scambio di una parte diversa 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 valere la pena disattivare gli overlay.

Reimposta dispositivi

Le sezioni seguenti descrivono i modi per reimpostare un dispositivo Cuttlefish allo stato iniziale del disco.

Ripristinare le impostazioni di fabbrica di un dispositivo

Per ripristinare lo stato del disco iniziale di un dispositivo Cuttlefish, 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 al di fuori del gruppo di istanze:

powerwash_cvd --instance_num=N

Reimposta tutti i dispositivi

Per arrestare e reimpostare uno o più dispositivi agli stati iniziali del disco, esegui:

stop_cvd
launch_cvd --resume=false

stop_cvd esegue un arresto sporco e arresta il dispositivo.

Con l'aggiunta di --resume=false a launch_cvd, Cuttlefish eliminerà tutti i file relativi all'istanza in esecuzione in precedenza prima di avviare la successiva esecuzione. È possibile aggiungere eventuali 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 eseguire un riavvio pulito del 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 di hosting di Cuttlefish non sono coinvolti. Questa procedura potrebbe non essere disponibile se il dispositivo si trova in uno stato non valido 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 è in esecuzione adb-reboot. Se non viene specificato alcun dispositivo di destinazione, adb non riavvia nessun dispositivo.

adb -s SERIAL reboot

Riavvio non corretto

Per eseguire un riavvio non pulito 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 scollegare e ricollegare la batteria a un dispositivo fisico. Le scritture sul disco potrebbero non essere persistenti se erano in corso. restart_cvd attende il completamento dell'avvio del dispositivo prima di uscire.

In una configurazione multi-tenant, restart_cvd riavvia una singola istanza al di fuori del gruppo di istanze. Per specificare quale istanza Cuttlefish 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 flag launch_cvd diversi

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 sporco 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 con restart_cvd, le scritture su disco potrebbero non essere mantenute 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 al layout del disco che è incompatible 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 eseguire forzatamente la pulizia dello stato precedente del dispositivo, esegui:

stop_cvd
rm $HOME/cuttlefish $HOME/cuttlefish_runtime $HOME/cuttlefish_assembly

La seppia non è in grado di navigare in modo sicuro nella transizione tra i flussi con e senza overlay, di conseguenza questa modifica elimina tutto lo stato di gestione della seppia. 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 base.

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 seguenti sezioni 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 maggiori dettagli sui singoli flag, fai riferimento all'origine ( flags.cc , disk_flags.cc ) o esegui launch_cvd --help.

Flag che devono rimanere invariati

Per evitare la perdita di dati, questi flag devono rimanere invariati da una chiamata launch_cvd a quella successiva:

  • --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