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