Halaman ini menjelaskan cara memulai ulang dan mereset perangkat virtual Cuttlefish. Mereset perangkat Cuttlefish ke status disk awalnya disebut sebagai powerwash di alat command line.
Saat menjalankan alur kerja otomatis atau manual dengan beberapa prosedur yang berbeda, seperti suite 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 mulai ulang dan reset yang dijelaskan di halaman ini mengasumsikan bahwa Anda telah membuat perangkat Cuttlefish dan telah menetapkan beberapa status pada disk.
# 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
Dari titik awal ini, Anda dapat menggunakan alur mulai ulang dan reset berikut:
- Jika perangkat responsif, lakukan mulai ulang bersih menggunakan
adb reboot. - Jika perangkat tidak merespons, lakukan mulai ulang yang tidak bersih menggunakan
restart_cvd. - Reset status perangkat menggunakan
powerwash_cvd. - Hentikan perangkat dan ubah argumen
launch_cvdsambil mempertahankan status perangkat atau menghapus status perangkat secara paksa.
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 menangkap penulisan disk.
Namun, ada kekurangan dalam menggunakan overlay copy-on-write. Khususnya, perubahan eksternal pada disk yang mendasarinya akan merusak kompatibilitas dengan overlay yang ada, dan menyebabkan status disk yang 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 mengharuskan penyimpanan bagian disk dalam status tertentu yang diinisialisasi saat menukar bagian disk yang berbeda. Misalnya, menginstal aplikasi dengan konfigurasi pengguna tertentu, lalu menukar kernel berulang kali 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_cvdpowerwash_cvd mematikan virtual machine, mereset perubahan apa pun yang dilakukan pada disk virtual machine, memulai ulang virtual machine, dan menunggu hingga proses booting selesai. Instance mempertahankan flag asli yang diberikan ke launch_cvd.
Dalam konfigurasi multi-tenant,
powerwash_cvd memulai ulang satu instance dari grup instance:
powerwash_cvd --instance_num=NMereset semua perangkat
Untuk menghentikan dan mereset satu atau beberapa perangkat ke status disk awal, jalankan:
stop_cvdlaunch_cvd --resume=false
stop_cvd melakukan penonaktifan yang tidak bersih dan menghentikan perangkat.
Menambahkan --resume=false ke launch_cvd akan membuat Cuttlefish menghancurkan semua file
yang terkait dengan instance yang berjalan sebelumnya sebelum memulai operasi berikutnya. Anda dapat menambahkan flag launch_cvd tambahan dengan aman.
Dalam konfigurasi multi-tenant,ß
stop_cvd akan menonaktifkan seluruh grup instance.
Memulai ulang perangkat
Bagian berikut menjelaskan cara memulai ulang perangkat tanpa mereset perangkat ke status disk awalnya.
Mulai ulang bersih
Untuk memulai ulang perangkat secara bersih saat perangkat responsif, jalankan:
adb rebootadb reboot membawa perangkat melalui prosedur penonaktifan penuh, menyinkronkan
perubahan ke disk, dan memastikan proses dihentikan. Proses host Cuttlefish tidak terlibat. Prosedur ini mungkin tidak tersedia jika perangkat
telah memasuki status buruk dan tidak responsif.
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 rebootMulai ulang yang tidak bersih
Untuk melakukan mulai ulang yang tidak bersih saat perangkat tidak responsif, jalankan:
restart_cvdrestart_cvd melakukan penonaktifan yang tidak bersih dengan langsung menonaktifkan
perangkat Cuttlefish. restart_cvd setara dengan
melepaskan dan menghubungkan kembali baterai ke perangkat fisik. Penulisan disk
mungkin tidak bertahan jika sedang berlangsung. restart_cvd menunggu hingga perangkat
melakukan booting sepenuhnya lagi sebelum keluar.
Dalam konfigurasi multi-tenant,
restart_cvd memulai ulang satu instance dari grup instance. Untuk menentukan
instance Cuttlefish yang akan dimulai ulang, gunakan flag instance_num.
restart_cvd --instance_num=NJika --instance_num tidak digunakan, nomor instance akan ditetapkan secara default ke 1.
Memulai ulang menggunakan flag launch_cvd yang berbeda
Untuk menghentikan satu atau beberapa perangkat dan meluncurkan kembali dengan flag launch_cvd yang berbeda, jalankan:
stop_cvdlaunch_cvd NEW_FLAG
stop_cvd melakukan penonaktifan yang tidak bersih seperti 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 rebootstop_cvdlaunch_cvd NEW_FLAG
Jika perubahan pada flag launch_cvd memaksa perubahan pada tata letak disk yang
tidak kompatibel dengan implementasi copy-on-write, launch_cvd akan mengabaikan
modifikasi disk lama dan mereset ke status disk asli. Untuk mengetahui 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_cvdrm $HOME/cuttlefish $HOME/cuttlefish_runtime $HOME/cuttlefish_assembly
Cuttlefish tidak dapat menavigasi transisi antara alur dengan dan tanpa overlay secara aman, sehingga perubahan ini menghapus semua status pengelolaan Cuttlefish. Jika file disk eksternal diubah dan digunakan kembali nanti bersama dengan overlay, modifikasi sebelumnya dianggap sebagai bagian dari status dasar pengukuran.
Bendera
Anda dapat menambahkan argumen menggunakan flag 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 data yang hilang saat
menjalankan urutan perintah yang mencakup launch_cvd, stop_cvd, lalu
launch_cvd lagi, gunakan flag 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 direferensikan oleh
KERNEL_PATH juga harus memiliki konten yang sama.
Beberapa flag 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.
Bendera 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
Flag 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--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