Cuttlefish: Mulai ulang dan reset

Halaman ini menjelaskan cara memulai ulang dan mereset perangkat virtual Cuttlefish. Mereset perangkat Cuttlefish ke status disk awalnya disebut sebagai powerwashing di alat command line.

Saat menjalankan alur kerja otomatis atau manual dengan beberapa prosedur yang berbeda, seperti rangkaian pengujian, mereset perangkat Cuttlefish di antara prosedur memastikan bahwa perilaku setiap prosedur bersifat independen. Jika status disk tidak direset, satu prosedur dapat memengaruhi perilaku prosedur berikutnya.

Prosedur memulai ulang dan mereset yang dijelaskan di halaman ini mengasumsikan bahwa Anda telah membuat perangkat Cuttlefish dan telah menetapkan beberapa status di disk.

# 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

Dari titik awal ini, Anda dapat menggunakan alur mulai ulang dan reset berikut:

Implementasi reset cepat Cuttlefish

Cuttlefish menggunakan implementasi reset cepat yang bergantung pada perlindungan disk di balik overlay disk qcow2. Secara default, Cuttlefish memperlakukan disk asli sebagai hanya baca dan menggunakan overlay untuk mencatat penulisan disk.

Namun, ada kekurangan dalam menggunakan overlay salin saat tulis. Khususnya, perubahan eksternal pada disk pokok merusak kompatibilitas dengan overlay yang ada, dan menyebabkan status disk tidak konsisten. Cuttlefish secara paksa membuat ulang overlay saat mendeteksi perubahan yang tidak kompatibel.

Membuat ulang overlay secara paksa tidak diinginkan saat mengembangkan fitur yang memerlukan penyimpanan sebagian disk dalam status yang diinisialisasi tertentu saat menukar bagian disk yang berbeda. Misalnya, menginstal aplikasi dengan konfigurasi pengguna tertentu, lalu berulang kali menukar kernel untuk menguji interaksi antara aplikasi dan berbagai build kernel. Dalam hal ini, sebaiknya nonaktifkan overlay.

Mereset perangkat

Bagian berikut menjelaskan cara mereset perangkat Cuttlefish ke status disk awalnya.

Mereset satu perangkat

Untuk mereset satu perangkat Cuttlefish ke status disk awalnya, jalankan:

powerwash_cvd

powerwash_cvd akan mematikan mesin virtual, mereset semua perubahan yang dilakukan pada disk mesin virtual, memulai ulang mesin virtual, dan menunggu hingga selesai melakukan booting. Instance mempertahankan tanda asli yang diberikan ke launch_cvd.

Dalam konfigurasi multi-tenant, powerwash_cvd memulai ulang satu instance dari grup instance:

powerwash_cvd --instance_num=N

Mereset semua perangkat

Untuk menghentikan dan mereset satu atau beberapa perangkat ke status disk awalnya, jalankan:

stop_cvd
launch_cvd --resume=false

stop_cvd melakukan penonaktifan yang tidak benar dan menghentikan perangkat.

Menambahkan --resume=false ke launch_cvd akan membuat Cuttlefish menghapus semua file yang terkait dengan instance yang berjalan sebelumnya sebelum memulai proses berikutnya. Anda dapat menambahkan tanda launch_cvd lainnya dengan aman.

Dalam konfigurasi multi-tenantstop_cvd akan mematikan seluruh grup instance.

Mulai ulang perangkat

Bagian berikut menjelaskan cara memulai ulang perangkat tanpa mereset perangkat ke status disk awalnya.

Mulai ulang bersih

Untuk melakukan mulai ulang bersih perangkat saat perangkat responsif, jalankan:

adb reboot

adb reboot membuat perangkat melalui prosedur penonaktifan penuh, menyinkronkan perubahan ke disk, dan memastikan proses ditutup. Proses host Cuttlefish tidak terlibat. Prosedur ini mungkin tidak tersedia jika perangkat telah memasuki kondisi buruk dan tidak merespons.

Untuk melakukan mulai ulang bersih pada satu perangkat Cuttlefish dalam konfigurasi multi-tenant, tentukan nomor seri perangkat target saat menjalankan adb-reboot. Jika tidak ada perangkat target yang ditentukan, adb tidak akan memulai ulang perangkat apa pun.

adb -s SERIAL reboot

Mulai ulang yang tidak bersih

Untuk melakukan mulai ulang yang tidak bersih saat perangkat tidak responsif, jalankan:

restart_cvd

restart_cvd melakukan penonaktifan yang tidak bersih dengan langsung menonaktifkan perangkat Cuttlefish. restart_cvd setara dengan mencabut dan menghubungkan kembali baterai ke perangkat fisik. Penulisan disk mungkin tidak bertahan jika sedang berlangsung. restart_cvd menunggu hingga perangkat selesai di-boot ulang sebelum keluar.

Dalam konfigurasi multi-tenant, restart_cvd memulai ulang satu instance dari grup instance. Untuk menentukan instance Cuttlefish mana yang akan dimulai ulang, gunakan flag instance_num.

restart_cvd --instance_num=N

Jika --instance_num tidak digunakan, nomor instance secara default adalah 1.

Mulai ulang menggunakan tanda launch_cvd yang berbeda

Untuk menghentikan satu atau beberapa perangkat dan meluncurkan kembali dengan tanda launch_cvd yang berbeda, jalankan:

stop_cvd
launch_cvd NEW_FLAG

stop_cvd melakukan penonaktifan yang tidak bersih, mirip dengan restart_cvd. Perintah ini membuat perangkat dalam status tidak aktif yang dapat dimulai lagi nanti dengan perintah launch_cvd yang berbeda. Seperti pada restart_cvd, operasi tulis disk mungkin tidak dipertahankan jika tidak disinkronkan sepenuhnya ke disk. Untuk menyimpan data ke disk dengan aman, jalankan adb reboot terlebih dahulu.

adb reboot
stop_cvd
launch_cvd NEW_FLAG

Jika perubahan pada flag launch_cvd memaksakan perubahan pada tata letak disk yang tidak kompatibel dengan penerapan salin saat menulis, launch_cvd akan mengabaikan modifikasi disk lama dan mereset ke status disk asli. Untuk daftar lengkap flag, lihat Flag.

Menjalankan tanpa overlay

Untuk menonaktifkan dukungan reset cepat, jalankan:

launch_cvd --use_overlay=false

--use_overlay=false memperlakukan file disk Cuttlefish sebagai baca-tulis, dan perubahan disebarkan ke file tersebut.

Beralih antara --use_overlay=false dan default dapat menyebabkan error kompatibilitas. Untuk membersihkan status perangkat sebelumnya secara paksa, jalankan:

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

Cuttlefish tidak dapat melakukan transisi dengan aman antara alur dengan dan tanpa overlay, sehingga perubahan ini menghapus semua status pengelolaan Cuttlefish. Jika file disk eksternal diubah dan digunakan kembali bersama overlay di kemudian hari, modifikasi sebelumnya dianggap sebagai bagian dari status dasar.

Tanda

Anda dapat menambahkan argumen menggunakan tanda saat meluncurkan perangkat Cuttlefish menggunakan launch_cvd. Namun, untuk flag tertentu (Flag yang harus tetap sama), kehilangan data dapat terjadi jika flag diubah di antara perintah launch_cvd. Untuk memastikan tidak ada kehilangan data saat menjalankan urutan perintah yang mencakup launch_cvd, stop_cvd, lalu launch_cvd lagi, gunakan tanda yang sama untuk setiap perintah launch_cvd. Misalnya, jika tanda launch_cvd pertama menyertakan argumen --kernel_path=KERNEL_PATH, pemanggilan launch_cvd kedua juga harus menyertakan argumen --kernel_path=KERNEL_PATH yang sama, atau perubahan sistem file yang dilakukan sebelum stop_cvd akan hilang dalam pemanggilan launch_cvd kedua. File yang dirujuk oleh KERNEL_PATH juga harus memiliki konten yang sama.

Beberapa tanda aman untuk diubah di antara pemanggilan launch_cvd. Bagian berikut mencantumkan flag yang harus tetap sama untuk menghindari kehilangan data dan flag yang dapat diubah dengan aman tanpa kehilangan data. Untuk mengetahui detail tentang setiap tanda, lihat sumbernya ( flags.cc , disk_flags.cc ) atau jalankan launch_cvd --help.

Tanda yang harus tetap sama

Flag ini harus tetap sama dari satu pemanggilan launch_cvd ke pemanggilan berikutnya untuk menghindari kehilangan data:

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

Tanda yang dapat berubah

Flag ini dapat diubah dengan aman di antara pemanggilan launch_cvd tanpa menyebabkan kehilangan data:

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