หน้านี้จะอธิบายวิธีรีสตาร์ทและรีเซ็ตอุปกรณ์เสมือน Cuttlefish การรีเซ็ตอุปกรณ์ Cuttlefish กลับสู่สถานะดิสก์เริ่มต้นเรียกว่า Powerwash ในเครื่องมือบรรทัดคำสั่ง
เมื่อเรียกใช้เวิร์กโฟลว์อัตโนมัติหรือเวิร์กโฟลว์ด้วยตนเองที่มีขั้นตอนต่างๆ หลายขั้นตอน เช่น ชุดการทดสอบ การรีเซ็ตอุปกรณ์ 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 เครื่องหนึ่งให้กลับสู่สถานะดิสก์เริ่มต้น ให้เรียกใช้คำสั่งต่อไปนี้
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 ส่วนต่อไปนี้
จะแสดงรายการ Flag ที่ต้องคงไว้เหมือนเดิมเพื่อหลีกเลี่ยงการสูญเสียข้อมูล และ Flag
ที่เปลี่ยนได้อย่างปลอดภัยโดยไม่มีการสูญเสียข้อมูล ดูรายละเอียดเกี่ยวกับฟีเจอร์แต่ละรายการได้ที่แหล่งที่มา (
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
- --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