หน้านี้จะอธิบายวิธีรีสตาร์ทและรีเซ็ตอุปกรณ์เสมือนจริง Cuttlefish การรีเซ็ตอุปกรณ์ Cuttlefish ให้กลับสู่สถานะดิสก์เริ่มต้นเรียกว่า powerwashing ในเครื่องมือบรรทัดคำสั่ง
เมื่อเรียกใช้เวิร์กโฟลว์อัตโนมัติหรือด้วยตนเองที่มีขั้นตอนต่างๆ หลายขั้นตอน เช่น ชุดโปรแกรมทดสอบ การรีเซ็ตอุปกรณ์ Cuttlefish ระหว่างขั้นตอนต่างๆ จะช่วยให้มั่นใจได้ว่าลักษณะการทำงานของแต่ละขั้นตอนจะเป็นอิสระ หากไม่รีเซ็ตสถานะดิสก์ ขั้นตอนหนึ่งอาจส่งผลต่อลักษณะการทำงานของขั้นตอนถัดไป
ขั้นตอนการรีสตาร์ทและรีเซ็ตที่อธิบายไว้ในหน้านี้จะถือว่าคุณได้สร้างอุปกรณ์ Cuttlefish และตั้งค่าสถานะบางอย่างในดิสก์แล้ว
# 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
จากจุดเริ่มต้นนี้ คุณสามารถใช้โฟลว์การรีสตาร์ทและรีเซ็ตต่อไปนี้
- หากอุปกรณ์ตอบสนอง ให้รีสตาร์ทอย่างสะอาดโดยใช้
adb reboot - หากอุปกรณ์ไม่ตอบสนอง ให้รีสตาร์ทอย่างไม่สะอาดโดยใช้
restart_cvd - รีเซ็ตสถานะอุปกรณ์โดยใช้
powerwash_cvd - หยุดอุปกรณ์และเปลี่ยนอาร์กิวเมนต์
launch_cvdขณะที่ ยังคงสถานะอุปกรณ์ไว้ หรือ ล้างสถานะอุปกรณ์ออก
การใช้งานการรีเซ็ตอย่างรวดเร็วของ Cuttlefish
Cuttlefish ใช้การใช้งานการรีเซ็ตอย่างรวดเร็วซึ่งขึ้นอยู่กับการปกป้อง ดิสก์ที่อยู่เบื้องหลัง การซ้อนทับดิสก์ qcow2 โดยค่าเริ่มต้น Cuttlefish จะถือว่าดิสก์ต้นฉบับเป็นแบบอ่านอย่างเดียวและใช้การซ้อนทับเพื่อบันทึกการเขียนดิสก์
อย่างไรก็ตาม การใช้การซ้อนทับแบบคัดลอกเมื่อเขียนมีข้อเสีย โดยเฉพาะอย่างยิ่ง การเปลี่ยนแปลงภายนอกในดิสก์พื้นฐานจะทำให้เกิดการใช้งานร่วมกันไม่ได้กับการซ้อนทับที่มีอยู่ และทำให้สถานะดิสก์ไม่สอดคล้องกัน Cuttlefish จะสร้างการซ้อนทับใหม่โดยบังคับเมื่อตรวจพบการเปลี่ยนแปลงที่ไม่เข้ากัน
การสร้างการซ้อนทับใหม่โดยบังคับเป็นสิ่งที่ไม่พึงประสงค์เมื่อพัฒนาฟีเจอร์ที่ต้องเก็บดิสก์บางส่วนไว้ในสถานะเริ่มต้นที่เฉพาะเจาะจงขณะที่สลับดิสก์ส่วนอื่นออก เช่น การติดตั้งแอปที่มีการกำหนดค่าผู้ใช้ที่เฉพาะเจาะจง แล้วสลับเคอร์เนลออกซ้ำๆ เพื่อทดสอบการโต้ตอบระหว่างแอปกับเคอร์เนลบิลด์ต่างๆ ในกรณีนี้ การปิดใช้การซ้อนทับ อาจเป็นทางเลือกที่ดี
รีเซ็ตอุปกรณ์
ส่วนต่อไปนี้จะอธิบายวิธีรีเซ็ตอุปกรณ์ Cuttlefish ให้กลับสู่สถานะดิสก์เริ่มต้น
รีเซ็ตอุปกรณ์ 1 เครื่อง
หากต้องการรีเซ็ตอุปกรณ์ Cuttlefish 1 เครื่องให้กลับสู่สถานะดิสก์เริ่มต้น ให้เรียกใช้คำสั่งต่อไปนี้
powerwash_cvdpowerwash_cvd จะปิดเครื่องเสมือน รีเซ็ตการเปลี่ยนแปลงที่ทำกับดิสก์ของเครื่องเสมือน รีสตาร์ทเครื่องเสมือน และรอจนกว่าจะบูตเสร็จ อินสแตนซ์จะเก็บแฟล็กเดิมที่ส่งไปยัง launch_cvd ไว้
ในการกำหนดค่าแบบ หลายผู้เช่า
powerwash_cvd จะรีสตาร์ทอินสแตนซ์เดียวจากกลุ่มอินสแตนซ์:
powerwash_cvd --instance_num=Nรีเซ็ตอุปกรณ์ทั้งหมด
หากต้องการหยุดและรีเซ็ตอุปกรณ์อย่างน้อย 1 เครื่องให้กลับสู่สถานะดิสก์เริ่มต้น ให้เรียกใช้คำสั่งต่อไปนี้
stop_cvdlaunch_cvd --resume=false
stop_cvd จะทำการปิดระบบอย่างไม่สะอาดและหยุดอุปกรณ์
การเพิ่ม --resume=false ลงใน launch_cvd จะทำให้ Cuttlefish ทำลายไฟล์ทั้งหมดที่เกี่ยวข้องกับอินสแตนซ์ที่ทำงานก่อนหน้านี้ก่อนที่จะเริ่มการทำงานครั้งถัดไป คุณสามารถเพิ่มแฟล็ก launch_cvd อื่นๆ ได้อย่างปลอดภัย
ในการกำหนดค่าแบบ หลายผู้เช่า
stop_cvd จะปิดกลุ่มอินสแตนซ์ทั้งหมด
รีสตาร์ทอุปกรณ์
ส่วนต่อไปนี้จะอธิบายวิธีรีสตาร์ทอุปกรณ์โดยไม่ต้องรีเซ็ตอุปกรณ์ให้กลับสู่สถานะดิสก์เริ่มต้น
รีสตาร์ทอย่างสะอาด
หากต้องการรีสตาร์ทอุปกรณ์อย่างสะอาดเมื่ออุปกรณ์ตอบสนอง ให้เรียกใช้คำสั่งต่อไปนี้
adb rebootadb reboot จะนำอุปกรณ์ผ่านขั้นตอนการปิดระบบทั้งหมด โดยจะซิงค์การเปลี่ยนแปลงกับดิสก์และตรวจสอบว่ากระบวนการต่างๆ ปิดลง กระบวนการโฮสต์ของ Cuttlefish จะไม่เกี่ยวข้อง ขั้นตอนนี้อาจไม่พร้อมใช้งานหากอุปกรณ์เข้าสู่สถานะที่ไม่ดีและไม่ตอบสนอง
หากต้องการรีสตาร์ทอุปกรณ์ Cuttlefish เครื่องเดียวอย่างสะอาดในการกำหนดค่าแบบ
หลายผู้เช่า ให้ระบุ
หมายเลขซีเรียล
ของอุปกรณ์เป้าหมายเมื่อเรียกใช้ adb-reboot หากไม่ได้ระบุอุปกรณ์เป้าหมาย adb จะไม่รีสตาร์ทอุปกรณ์ใดๆ
adb -s SERIAL rebootรีสตาร์ทอย่างไม่สะอาด
หากต้องการรีสตาร์ทอย่างไม่สะอาดเมื่ออุปกรณ์ไม่ตอบสนอง ให้เรียกใช้คำสั่งต่อไปนี้
restart_cvdrestart_cvd จะทำการปิดระบบอย่างไม่สะอาดโดยการปิดอุปกรณ์ Cuttlefish ทันที restart_cvd เทียบเท่ากับการถอดและเสียบแบตเตอรี่ของอุปกรณ์จริงอีกครั้ง การเขียนดิสก์อาจไม่คงอยู่หากยังดำเนินการไม่เสร็จ restart_cvd จะรอจนกว่าอุปกรณ์จะบูตอีกครั้งจนเสร็จก่อนที่จะออก
ในการกำหนดค่าแบบ หลายผู้เช่า,
restart_cvd จะรีสตาร์ทอินสแตนซ์เดียวจากกลุ่มอินสแตนซ์ หากต้องการระบุอินสแตนซ์ Cuttlefish ที่จะรีสตาร์ท ให้ใช้แฟล็ก instance_num
restart_cvd --instance_num=Nหากไม่ได้ใช้ --instance_num หมายเลขอินสแตนซ์จะเป็น 1 โดยค่าเริ่มต้น
รีสตาร์ทโดยใช้แฟล็ก launch_cvd อื่นๆ
หากต้องการหยุดอุปกรณ์อย่างน้อย 1 เครื่องและเปิดใช้อีกครั้งด้วยแฟล็ก launch_cvd อื่นๆ ให้เรียกใช้คำสั่งต่อไปนี้
stop_cvdlaunch_cvd NEW_FLAG
stop_cvd จะทำการปิดระบบอย่างไม่สะอาดคล้ายกับ restart_cvd โดยจะทำให้อุปกรณ์อยู่ในสถานะพักซึ่งสามารถเริ่มทำงานอีกครั้งได้ในภายหลังด้วยคำสั่ง launch_cvd อื่น เช่นเดียวกับ restart_cvd การเขียนดิสก์อาจไม่คงอยู่หากไม่ได้ซิงค์กับดิสก์จนเสร็จ หากต้องการบันทึกข้อมูลลงในดิสก์อย่างปลอดภัย ให้เรียกใช้ adb reboot ก่อน
adb rebootstop_cvdlaunch_cvd NEW_FLAG
หากการเปลี่ยนแปลงแฟล็ก launch_cvd บังคับให้มีการเปลี่ยนแปลงเลย์เอาต์ดิสก์ที่ไม่เข้ากันกับการใช้งานแบบคัดลอกเมื่อเขียน launch_cvd จะไม่สนใจการแก้ไขดิสก์เก่าและรีเซ็ตเป็นสถานะดิสก์เดิม ดูรายการแฟล็กทั้งหมดได้ที่แฟล็ก
เรียกใช้โดยไม่มีการซ้อนทับ
หากต้องการยกเลิกการเข้าร่วมการรองรับการรีเซ็ตอย่างรวดเร็ว ให้เรียกใช้คำสั่งต่อไปนี้
launch_cvd --use_overlay=false--use_overlay=false จะถือว่าไฟล์ดิสก์ของ Cuttlefish เป็นแบบอ่าน-เขียน และการเปลี่ยนแปลงจะเผยแพร่ไปยังไฟล์เหล่านั้น
การเปลี่ยนระหว่าง --use_overlay=false กับค่าเริ่มต้นอาจทำให้เกิดข้อผิดพลาดด้านความเข้ากันได้ หากต้องการล้างสถานะอุปกรณ์ก่อนหน้านี้โดยบังคับ ให้เรียกใช้คำสั่งต่อไปนี้
stop_cvdrm $HOME/cuttlefish $HOME/cuttlefish_runtime $HOME/cuttlefish_assembly
Cuttlefish ไม่สามารถนำทางการเปลี่ยนระหว่างโฟลว์ที่มีและไม่มีการซ้อนทับได้อย่างปลอดภัย ดังนั้นการเปลี่ยนแปลงนี้จะลบสถานะการจัดการทั้งหมดของ Cuttlefish หากมีการแก้ไขไฟล์ดิสก์ภายนอกและนำกลับมาใช้ร่วมกับการซ้อนทับในภายหลัง การแก้ไขก่อนหน้านี้จะถือเป็นส่วนหนึ่งของสถานะพื้นฐาน
แฟล็ก
คุณสามารถเพิ่มอาร์กิวเมนต์โดยใช้แฟล็กเมื่อเปิดใช้อุปกรณ์ Cuttlefish โดยใช้ launch_cvd อย่างไรก็ตาม สำหรับแฟล็กบางรายการ
(แฟล็กที่ต้องคงเดิม) อาจเกิดการสูญเสียข้อมูลได้หากมีการเปลี่ยนแปลงแฟล็ก
ระหว่างคำสั่ง launch_cvd หากต้องการให้แน่ใจว่าจะไม่มีการสูญเสียข้อมูลเมื่อเรียกใช้ลำดับคำสั่งที่มี launch_cvd, stop_cvd แล้วเรียกใช้ launch_cvd อีกครั้ง ให้ใช้แฟล็กเดียวกันสำหรับคำสั่ง launch_cvd ทุกคำสั่ง ตัวอย่างเช่น หากแฟล็ก launch_cvd แรกมีอาร์กิวเมนต์
--kernel_path=KERNEL_PATH การเรียกใช้ launch_cvd ครั้งที่ 2
ก็ต้องมีอาร์กิวเมนต์ --kernel_path=KERNEL_PATH
เดียวกันด้วย ไม่เช่นนั้นการเปลี่ยนแปลงระบบไฟล์ที่ทำก่อน stop_cvd จะหายไปในการ
เรียกใช้ launch_cvd ครั้งที่ 2 ไฟล์ที่อ้างอิงโดย KERNEL_PATH ต้องมีเนื้อหาเดียวกันด้วย
คุณสามารถเปลี่ยนแฟล็กบางรายการได้อย่างปลอดภัยระหว่างการเรียกใช้ launch_cvd ส่วนต่อไปนี้จะแสดงรายการแฟล็กที่ต้องคงเดิมเพื่อหลีกเลี่ยงการสูญเสียข้อมูล และแฟล็กที่สามารถเปลี่ยนแปลงได้อย่างปลอดภัยโดยไม่ทำให้ข้อมูลสูญหาย ดูรายละเอียดเกี่ยวกับแฟล็กแต่ละรายการได้ที่ซอร์สโค้ด
(
flags.cc
, disk_flags.cc
) หรือเรียกใช้ launch_cvd --help
แฟล็กที่ต้องคงเดิม
แฟล็กต่อไปนี้ต้องคงเดิมจากการเรียกใช้ launch_cvd ครั้งหนึ่งไปยังครั้งถัดไปเพื่อหลีกเลี่ยงการสูญเสียข้อมูล
--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
แฟล็กที่เปลี่ยนแปลงได้
คุณสามารถเปลี่ยนแฟล็กต่อไปนี้ได้อย่างปลอดภัยระหว่างการเรียกใช้ launch_cvd โดยไม่ทำให้ข้อมูลสูญหาย
--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