หน้านี้อธิบายวิธีการรีสตาร์ทและรีเซ็ตอุปกรณ์เสมือน 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 ใช้การรีเซ็ตอย่างรวดเร็วซึ่งขึ้นอยู่กับการปกป้องดิสก์ที่อยู่ด้านหลัง ดิสก์โอเวอร์เลย์ qcow2 ตามค่าเริ่มต้น Cuttlefish จะถือว่าดิสก์ต้นฉบับเป็นแบบอ่านอย่างเดียวและใช้การซ้อนทับเพื่อบันทึกการเขียนดิสก์
อย่างไรก็ตาม การใช้การซ้อนทับแบบคัดลอกเมื่อเขียนมีข้อเสียอยู่ โดยเฉพาะอย่างยิ่ง การเปลี่ยนแปลงภายนอกกับดิสก์ต้นแบบทำลายความเข้ากันได้กับโอเวอร์เลย์ที่มีอยู่ และทำให้สถานะของดิสก์ไม่สอดคล้องกัน ปลาหมึกบังคับให้สร้างภาพซ้อนทับขึ้นใหม่เมื่อตรวจพบการเปลี่ยนแปลงที่เข้ากันไม่ได้
การบังคับให้สร้างโอเวอร์เลย์ขึ้นใหม่เป็นสิ่งที่ไม่พึงประสงค์เมื่อพัฒนาคุณสมบัติที่ต้องรักษาส่วนหนึ่งของดิสก์ให้อยู่ในสถานะเริ่มต้นโดยเฉพาะในขณะที่สลับส่วนอื่นของดิสก์ออก ตัวอย่างเช่น การติดตั้งแอพที่มีการกำหนดค่าผู้ใช้เฉพาะ จากนั้นสลับเคอร์เนลซ้ำ ๆ เพื่อทดสอบการโต้ตอบระหว่างแอพและบิลด์เคอร์เนลที่แตกต่างกัน ในกรณีนี้ อาจคุ้มค่า ที่จะปิดการใช้งานโอเวอร์เลย์
รีเซ็ตอุปกรณ์
ส่วนต่อไปนี้อธิบายวิธีรีเซ็ตอุปกรณ์ Cuttlefish ให้เป็นสถานะดิสก์เริ่มต้น
รีเซ็ตอุปกรณ์หนึ่งเครื่อง
หากต้องการรีเซ็ตอุปกรณ์ Cuttlefish หนึ่งเครื่องเป็นสถานะดิสก์เริ่มต้น ให้รัน:
powerwash_cvd
powerwash_cvd
ปิดเครื่องเสมือน รีเซ็ตการเปลี่ยนแปลงใด ๆ ที่ทำกับดิสก์เครื่องเสมือน รีสตาร์ทเครื่องเสมือน และรอจนกระทั่งบูตเสร็จสิ้น อินสแตนซ์จะรักษาแฟล็กดั้งเดิมที่กำหนดให้กับ launch_cvd
ใน การกำหนดค่าแบบหลายผู้เช่า powerwash_cvd
จะรีสตาร์ทอินสแตนซ์เดียวจากกลุ่มอินสแตนซ์:
powerwash_cvd --instance_num=N
รีเซ็ตอุปกรณ์ทั้งหมด
หากต้องการหยุดและรีเซ็ตอุปกรณ์ตั้งแต่หนึ่งเครื่องขึ้นไปเป็นสถานะดิสก์เริ่มต้น ให้รัน:
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
รีสตาร์ทโดยใช้แฟล็ก launch_cvd ที่แตกต่างกัน
หากต้องการหยุดอุปกรณ์ตั้งแต่หนึ่งเครื่องขึ้นไปและเปิดใหม่อีกครั้งด้วยแฟล็ก 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
จะละเว้นการแก้ไขดิสก์แบบเก่าและรีเซ็ตเป็นสถานะดิสก์ดั้งเดิม สำหรับรายการธงทั้งหมด โปรดดูที่ ธง
วิ่งโดยไม่มีการซ้อนทับ
หากต้องการยกเลิกการสนับสนุนการรีเซ็ตอย่างรวดเร็ว ให้รัน:
launch_cvd --use_overlay=false
--use_overlay=false
ถือว่าไฟล์ดิสก์ Cuttlefish เป็นแบบอ่าน-เขียน และการเปลี่ยนแปลงจะถูกเผยแพร่ไปยังไฟล์เหล่านั้น
การเปลี่ยนระหว่าง --use_overlay=false
และค่าเริ่มต้นอาจทำให้เกิดข้อผิดพลาดด้านความเข้ากันได้ หากต้องการบังคับให้ล้างสถานะอุปกรณ์ก่อนหน้า ให้รัน:
stop_cvd
rm $HOME/cuttlefish $HOME/cuttlefish_runtime $HOME/cuttlefish_assembly
ปลาหมึกไม่สามารถนำทางการเปลี่ยนแปลงระหว่างโฟลว์ที่มีและไม่มีโอเวอร์เลย์ได้อย่างปลอดภัย ดังนั้นการเปลี่ยนแปลงนี้จะลบสถานะการจัดการปลาหมึกทั้งหมด หากมีการแก้ไขไฟล์ดิสก์ภายนอกและนำมาใช้ใหม่ในภายหลังพร้อมกับการซ้อนทับ การแก้ไขก่อนหน้านี้จะถือว่าเป็นส่วนหนึ่งของสถานะพื้นฐาน
ธง
คุณสามารถเพิ่มข้อโต้แย้งโดยใช้แฟล็กเมื่อเปิดตัวอุปกรณ์ Cuttlefish โดยใช้ launch_cvd
อย่างไรก็ตาม สำหรับแฟล็กบางตัว ( แฟล็กที่ต้องคงเดิม ) ข้อมูลสูญหายอาจเกิดขึ้นได้หากแฟล็กถูกเปลี่ยนระหว่างคำสั่ง launch_cvd
เพื่อให้แน่ใจว่าข้อมูลจะไม่สูญหายเมื่อรันลำดับของคำสั่งที่มี launch_cvd
, stop_cvd
และจากนั้น launch_cvd
อีกครั้ง ให้ใช้แฟล็กเดียวกันสำหรับทุกคำสั่ง launch_cvd
ตัวอย่างเช่น หากแฟล็ก launch_cvd
แรกมีอาร์กิวเมนต์ --kernel_path= KERNEL_PATH
การเรียกใช้ launch_cvd
ที่สองต้องมีอาร์กิวเมนต์ --kernel_path= KERNEL_PATH
เดียวกันด้วย หรือการเปลี่ยนแปลงระบบไฟล์ใดๆ ที่ทำก่อนที่ stop_cvd
จะสูญหายไปในการเรียกใช้ launch_cvd
ครั้งที่สอง ไฟล์ที่อ้างอิงโดย 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
-
--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