Seppia: riavvia e reimposta

In questa pagina viene descritto come riavviare e reimpostare i dispositivi virtuali Cuttlefish. Il ripristino dello stato del disco iniziale di un dispositivo Cuttlefish prende il nome di powerwashing nello strumento a riga di comando.

Quando si eseguono flussi di lavoro automatizzati o manuali con più procedure diverse, come le suite di test, la reimpostazione del dispositivo Seppia tra una procedura e l'altra garantisce che il comportamento di ogni procedura sia indipendente. Se lo stato del disco non è una delle due procedure può influire sul comportamento della procedura riportata di seguito.

Le procedure di riavvio e ripristino descritte in questa pagina presuppone che tu abbia ha creato un dispositivo Cuttlefish e ha 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 della seppia

La seppia usa un'implementazione di ripristino rapido che dipende dalla protezione i dischi alla base overlay del disco qcow2. Di l'impostazione predefinita, Cuttlefish considera i dischi originali come di sola lettura e utilizza gli overlay per ed acquisire le scritture su disco.

Tuttavia, l'utilizzo degli overlay di copia alla scrittura presenta alcuni svantaggi. In particolare, le modifiche esterne ai dischi sottostanti interrompono la compatibilità con si sovrappongono e causano uno stato incoerente del disco. Seppia con la forza ricrea gli overlay quando rileva modifiche incompatibili.

Non è consigliabile ricreare forzatamente gli overlay quando si sviluppa una funzionalità che richiede di mantenere parte del disco in un particolare stato inizializzato scambiando una parte diversa del disco. Ad esempio, l'installazione di un'app con configurazione utente e poi scambiando ripetutamente il kernel testare l'interazione tra l'app e le diverse build del kernel. In questo caso, potrebbe valere la pena disattivare gli overlay.

Reimposta dispositivi

Le seguenti sezioni descrivono come ripristinare lo stato iniziale di un dispositivo Seppia stato del disco.

Reimpostare un dispositivo

Per ripristinare lo stato del disco iniziale di un dispositivo Cuttlefish, esegui:

powerwash_cvd

powerwash_cvd arresta la macchina virtuale, reimposta le eventuali modifiche apportate il disco della macchina virtuale, riavvia la macchina virtuale e attende il suo completamento all'avvio. L'istanza conserva i flag originali assegnati a launch_cvd.

In una configurazione multi-tenant, powerwash_cvd riavvia una singola istanza dal gruppo di istanze:

powerwash_cvd --instance_num=N

Reimposta tutti i dispositivi

Per arrestare e reimpostare lo stato iniziale del disco di uno o più dispositivi, esegui:

stop_cvd
launch_cvd --resume=false

stop_cvd esegue un arresto sporco e arresta il dispositivo.

Se aggiungi --resume=false a launch_cvd, Cuttlefish distrugge tutti i file all'istanza precedentemente in esecuzione prima di iniziare la successiva. È aggiungere eventuali altre segnalazioni launch_cvd.

In una configurazione multi-tenant, stop_cvd l'intero gruppo di istanze.

Riavviare i dispositivi

Le sezioni seguenti descrivono i modi per riavviare un dispositivo senza reimpostarlo del dispositivo allo 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 completa del dispositivo, eseguendo la sincronizzazione modifiche al disco e assicurarsi che i processi vengano arrestati. Ospite di seppie non sono coinvolti. Questa procedura potrebbe non essere disponibile se il dispositivo è in uno stato non valido e non risponde.

Per eseguire un riavvio pulito di un singolo dispositivo Seppia in una configurazione multi-tenant, devi specificare numero di serie del dispositivo di destinazione durante l'esecuzione di adb-reboot. Se il dispositivo di destinazione non è specificato, adb non riavvia alcun dispositivo.

adb -s SERIAL reboot

Riavvio sporco

Per eseguire un riavvio non pulito quando il dispositivo non risponde, esegui:

restart_cvd

restart_cvd esegue un arresto sporco arrestando immediatamente Dispositivo seppia. restart_cvd equivale a Scollegare e ricollegare la batteria a un dispositivo fisico. Scritture disco potrebbero non essere mantenuti se erano in corso. restart_cvd attende che il dispositivo si sia riavviato completamente prima di uscire.

In una configurazione multi-tenant, restart_cvd riavvia una singola istanza dal gruppo di istanze. Per specificare quale istanza Cuttlefish riavviare, usa il flag instance_num.

restart_cvd --instance_num=N

Se non viene utilizzato --instance_num, il numero di istanza sarà 1 per impostazione predefinita.

Riavvio con 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. Lascia il inattivo per il dispositivo, che può essere riavviato in un secondo momento con un Comando launch_cvd. Come con restart_cvd, le scritture su disco potrebbero non essere mantenute se non sono completamente sincronizzati con il disco. Per salvare i dati su disco in modo sicuro, 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 della funzione di copia al momento della scrittura, launch_cvd ignora le modifiche al disco precedente e viene ripristinato lo stato originale del disco. Per un per l'elenco di flag, consulta la sezione Flag.

Esegui senza overlay

Per disattivare il supporto del 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 questi file.

Il passaggio tra --use_overlay=false e il valore predefinito può causare la compatibilità errori. 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 affrontare in modo sicuro la transizione tra i flussi con e senza overlay, di conseguenza questa modifica elimina tutto lo stato di gestione dei Seppia. Se i file del disco esterno vengono modificati e riutilizzati in seguito insieme agli overlay, le modifiche precedenti sono considerate parte dello stato di riferimento.

Bandiere

Puoi aggiungere argomenti utilizzando flag all'avvio di un dispositivo Seppia con launch_cvd. Tuttavia, per alcune segnalazioni (Flag che devono rimanere invariati), la perdita di dati può verificarsi se i flag vengono è cambiato tra i comandi launch_cvd. Per assicurarti che non si verifichi alcuna perdita di dati quando eseguendo una sequenza di comandi che includono launch_cvd, stop_cvd, dopodiché launch_cvd di nuovo, usa gli stessi flag per ogni comando launch_cvd. Per esempio, se il primo flag launch_cvd include l'argomento --kernel_path=KERNEL_PATH, la seconda chiamata launch_cvd deve includere anche lo stesso --kernel_path=KERNEL_PATH oppure eventuali modifiche al file system apportate prima del giorno stop_cvd andranno perse seconda chiamata launch_cvd. Il file a cui fa riferimento Anche KERNEL_PATH deve avere gli stessi contenuti.

Alcuni flag possono essere modificati in sicurezza tra una chiamata di launch_cvd e l'altra. Le seguenti elencano i flag che devono rimanere invariati per evitare la perdita di dati e i flag che possono essere modificate in sicurezza senza perdita di dati. Per maggiori dettagli sulle singole segnalazioni, fare riferimento alla fonte ( flags.cc , disk_flags.cc ) o esegui launch_cvd --help.

Flag che devono rimanere invariati

Questi flag devono rimanere invariati da una chiamata launch_cvd all'altra per evitare perdite 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 sicurezza tra una chiamata launch_cvd e l'altra senza che causano 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