Cuttlefish: รีสตาร์ทและรีเซ็ต

หน้านี้จะอธิบายวิธีรีสตาร์ทและรีเซ็ตอุปกรณ์เสมือน Cuttlefish การรีเซ็ตอุปกรณ์ Cuttlefish ให้กลับสู่สถานะดิสก์เริ่มต้นเรียกว่า Powerwash ในเครื่องมือบรรทัดคำสั่ง

เมื่อเรียกใช้เวิร์กโฟลว์อัตโนมัติหรือเวิร์กโฟลว์ด้วยตนเองที่มีขั้นตอนต่างๆ หลายขั้นตอน เช่น ชุดการทดสอบ การรีเซ็ตอุปกรณ์ Cuttlefish ระหว่างขั้นตอนจะช่วยให้มั่นใจได้ ว่าลักษณะการทำงานของแต่ละขั้นตอนจะไม่ขึ้นต่อกัน หากไม่ได้ รีเซ็ตสถานะดิสก์ ขั้นตอนหนึ่งอาจส่งผลต่อลักษณะการทำงานของขั้นตอนถัดไป

ขั้นตอนการรีสตาร์ทและการรีเซ็ตที่อธิบายไว้ในหน้านี้ถือว่าคุณได้ สร้างอุปกรณ์ Cuttlefish และตั้งค่าสถานะบางอย่างในดิสก์แล้ว

# Launch a device
launch_cvd
# Make some modifications to the device
adb shell touch /storage/self/primary/Documents/hello
# Check the device state
adb shell ls /storage/self/primary/Documents

จากจุดเริ่มต้นนี้ คุณสามารถใช้ขั้นตอนการรีสตาร์ทและรีเซ็ตต่อไปนี้

การติดตั้งใช้งานการรีเซ็ตอย่างรวดเร็วของ Cuttlefish

Cuttlefish ใช้การติดตั้งใช้งานการรีเซ็ตอย่างรวดเร็วซึ่งขึ้นอยู่กับการปกป้อง ดิสก์ที่อยู่เบื้องหลัง การซ้อนทับดิสก์ qcow2 โดยค่าเริ่มต้น Cuttlefish จะถือว่าดิสก์ต้นฉบับเป็นแบบอ่านอย่างเดียวและใช้การซ้อนทับเพื่อบันทึกการเขียนดิสก์

อย่างไรก็ตาม การใช้การซ้อนทับแบบคัดลอกเมื่อเขียนก็มีข้อเสียเช่นกัน โปรดทราบว่า การเปลี่ยนแปลงภายนอกในดิสก์พื้นฐานจะทำให้ความเข้ากันได้กับ การซ้อนทับที่มีอยู่ใช้งานไม่ได้ และทำให้สถานะดิสก์ไม่สอดคล้องกัน Cuttlefish จะสร้างการซ้อนทับใหม่โดยบังคับ เมื่อตรวจพบการเปลี่ยนแปลงที่ไม่เข้ากัน

การสร้างการซ้อนทับใหม่โดยบังคับไม่เป็นที่ต้องการเมื่อพัฒนาฟีเจอร์ที่ ต้องเก็บส่วนหนึ่งของดิสก์ไว้ในสถานะเริ่มต้นที่เฉพาะเจาะจงขณะ สลับส่วนอื่นของดิสก์ เช่น การติดตั้งแอปที่มีการกำหนดค่าผู้ใช้ที่เฉพาะเจาะจง แล้วสลับเคอร์เนลซ้ำๆ เพื่อทดสอบการโต้ตอบระหว่างแอปกับบิลด์เคอร์เนลต่างๆ ในกรณีนี้ คุณอาจปิดใช้ภาพซ้อนทับ

รีเซ็ตอุปกรณ์

ส่วนต่อไปนี้จะอธิบายวิธีรีเซ็ตอุปกรณ์ Cuttlefish เป็นสถานะดิสก์เริ่มต้น

รีเซ็ตอุปกรณ์ 1 เครื่อง

หากต้องการรีเซ็ตอุปกรณ์ Cuttlefish เครื่องหนึ่งให้กลับสู่สถานะดิสก์เริ่มต้น ให้เรียกใช้คำสั่งต่อไปนี้

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 กระบวนการนี้อาจไม่พร้อมใช้งานหากอุปกรณ์ เข้าสู่สถานะที่ไม่ดีและไม่ตอบสนอง

หากต้องการรีสตาร์ทอุปกรณ์ 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 อื่น

หากต้องการหยุดอุปกรณ์อย่างน้อย 1 เครื่องและเปิดใช้ใหม่ด้วย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 ไม่สามารถเปลี่ยนระหว่างโฟลว์ที่มีและไม่มีการซ้อนทับได้อย่างปลอดภัย การเปลี่ยนแปลงนี้จึงลบสถานะการจัดการ 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

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