Trang này mô tả cách khởi động lại và đặt lại thiết bị ảo Cuttlefish. Việc đặt lại thiết bị Cuttlefish về trạng thái ổ đĩa ban đầu được gọi là tẩy sạch trong công cụ dòng lệnh.
Khi chạy quy trình làm việc tự động hoặc thủ công với nhiều quy trình khác nhau, chẳng hạn như bộ kiểm thử, việc đặt lại thiết bị Cuttlefish giữa các quy trình sẽ đảm bảo rằng hành vi của mỗi quy trình là độc lập. Nếu trạng thái ổ đĩa không được đặt lại, một quy trình có thể ảnh hưởng đến hành vi của quy trình sau.
Quy trình khởi động lại và đặt lại được mô tả trên trang này giả định rằng bạn đã tạo thiết bị Mực ống và đặt một số trạng thái trên ổ đĩa.
# 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
Từ điểm bắt đầu này, bạn có thể sử dụng các quy trình khởi động lại và đặt lại sau đây:
- Nếu thiết bị có tính phản hồi, hãy khởi động lại sạch bằng
adb reboot
. - Nếu thiết bị không phản hồi, hãy khởi động lại không đúng cách bằng cách sử dụng
restart_cvd
. - Đặt lại trạng thái thiết bị bằng cách sử dụng
powerwash_cvd
. - Dừng thiết bị và thay đổi các đối số
launch_cvd
trong khi vẫn giữ trạng thái thiết bị hoặc buộc xoá trạng thái thiết bị.
Cách đặt lại nhanh cho con mực
Mực nang sử dụng phương thức triển khai đặt lại nhanh phụ thuộc vào việc bảo vệ các ổ đĩa phía sau lớp phủ đĩa qcow2. Theo mặc định, Cuttlefish coi các ổ đĩa gốc là chỉ có thể đọc và sử dụng lớp phủ để ghi lại quá trình ghi ổ đĩa.
Tuy nhiên, việc sử dụng lớp phủ sao chép khi ghi cũng có một số hạn chế. Đáng chú ý là các thay đổi bên ngoài đối với ổ đĩa cơ bản sẽ làm mất khả năng tương thích với các lớp phủ hiện có và gây ra trạng thái ổ đĩa không nhất quán. Cuttlefish buộc tạo lại các lớp phủ khi phát hiện thấy các thay đổi không tương thích.
Bạn không nên buộc tạo lại lớp phủ khi phát triển một tính năng yêu cầu giữ một phần của ổ đĩa ở trạng thái khởi động cụ thể trong khi hoán đổi một phần khác của ổ đĩa. Ví dụ: cài đặt một ứng dụng có cấu hình người dùng cụ thể, sau đó liên tục hoán đổi nhân để kiểm thử sự tương tác giữa ứng dụng và các bản dựng nhân hệ điều hành. Trong trường hợp này, bạn nên tắt lớp phủ.
Đặt lại thiết bị
Các phần sau đây mô tả cách đặt lại thiết bị Cuttlefish về trạng thái ổ đĩa ban đầu.
Đặt lại một thiết bị
Để đặt lại một thiết bị Cuttlefish về trạng thái ổ đĩa ban đầu, hãy chạy:
powerwash_cvd
powerwash_cvd
tắt máy ảo, đặt lại mọi thay đổi đã thực hiện đối với
ổ đĩa máy ảo, khởi động lại máy ảo và đợi cho đến khi máy ảo khởi động xong. Thực thể này giữ nguyên các cờ ban đầu được cấp cho launch_cvd
.
Trong cấu hình nhiều đối tượng thuê, powerwash_cvd
sẽ khởi động lại một thực thể bên ngoài nhóm thực thể:
powerwash_cvd --instance_num=N
Đặt lại tất cả thiết bị
Để dừng và đặt lại một hoặc nhiều thiết bị về trạng thái ổ đĩa ban đầu, hãy chạy mã:
stop_cvd
launch_cvd --resume=false
stop_cvd
thực hiện tắt không sạch và dừng thiết bị.
Việc thêm --resume=false
vào launch_cvd
sẽ khiến Cuttlefish huỷ bỏ tất cả các tệp liên quan đến phiên bản đang chạy trước đó trước khi bắt đầu lần chạy tiếp theo. Bạn có thể thêm bất kỳ cờ launch_cvd
nào khác một cách an toàn.
Trong cấu hình nhiều người dùng, stop_cvd
sẽ loại bỏ toàn bộ nhóm thực thể.
Khởi động lại thiết bị
Các phần sau đây mô tả cách khởi động lại thiết bị mà không cần đặt lại thiết bị về trạng thái ổ đĩa ban đầu.
Khởi động lại sạch
Để khởi động lại thiết bị khi thiết bị có tính thích ứng, hãy chạy mã:
adb reboot
adb reboot
sẽ thực hiện quy trình tắt hoàn toàn thiết bị, đồng bộ hoá các thay đổi với ổ đĩa và đảm bảo rằng các quy trình tắt. Không liên quan đến các quy trình lưu trữ mực ống. Quy trình này có thể không sử dụng được nếu thiết bị chuyển sang trạng thái xấu và không phản hồi.
Để khởi động lại sạch một thiết bị mực ống trong cấu hình nhiều đối tượng thuê, hãy chỉ định số sê-ri của thiết bị mục tiêu khi chạy adb-reboot
. Nếu không có thiết bị mục tiêu nào được chỉ định, thì adb
sẽ không khởi động lại bất kỳ thiết bị nào.
adb -s SERIAL reboot
Khởi động lại không sạch
Để khởi động lại không sạch khi thiết bị không phản hồi, hãy chạy:
restart_cvd
restart_cvd
thực hiện tắt không sạch bằng cách tắt ngay thiết bị Cuttlefish. restart_cvd
tương đương với việc ngắt kết nối rồi kết nối lại pin với một thiết bị thực tế. Các hoạt động ghi vào ổ đĩa có thể không tiếp tục nếu đang diễn ra. restart_cvd
sẽ đợi cho đến khi thiết bị khởi động lại hoàn toàn trước khi thoát.
Trong cấu hình nhiều đối tượng thuê, restart_cvd
sẽ khởi động lại một thực thể duy nhất bên ngoài nhóm thực thể. Để chỉ định thực thể Mực ống nào cần khởi động lại, hãy sử dụng cờ instance_num
.
restart_cvd --instance_num=N
Nếu bạn không sử dụng --instance_num
, số lượng thực thể sẽ mặc định là 1
.
Khởi động lại bằng các cờ launch_cvd khác nhau
Để dừng một hoặc nhiều thiết bị và chạy lại với nhiều cờ launch_cvd
, hãy chạy mã:
stop_cvd
launch_cvd NEW_FLAG
stop_cvd
thực hiện thao tác tắt không đúng cách tương tự như restart_cvd
. Thao tác này sẽ khiến thiết bị ở trạng thái không hoạt động và bạn có thể khởi động lại sau bằng một lệnh launch_cvd
khác. Giống như restart_cvd
, các hoạt động ghi ổ đĩa có thể không tồn tại nếu không được đồng bộ hoá đầy đủ với ổ đĩa. Để lưu dữ liệu vào ổ đĩa một cách an toàn, trước tiên, hãy chạy
adb reboot
.
adb reboot
stop_cvd
launch_cvd NEW_FLAG
Nếu các thay đổi đối với cờ launch_cvd
buộc thay đổi bố cục ổ đĩa không tương thích với phương thức triển khai thao tác sao chép khi ghi, thì launch_cvd
sẽ bỏ qua các thao tác sửa đổi ổ đĩa cũ và đặt lại về trạng thái ổ đĩa ban đầu. Để xem danh sách đầy đủ các cờ, hãy xem phần Cờ.
Chạy mà không có lớp phủ
Để chọn không sử dụng tính năng hỗ trợ đặt lại nhanh, hãy chạy:
launch_cvd --use_overlay=false
--use_overlay=false
coi các tệp ổ đĩa Cuttlefish là có thể đọc và ghi, đồng thời các thay đổi sẽ được truyền vào các tệp đó.
Việc thay đổi giữa --use_overlay=false
và giá trị mặc định có thể gây ra lỗi tương thích. Để buộc xoá trạng thái trước đó của thiết bị, hãy chạy:
stop_cvd
rm $HOME/cuttlefish $HOME/cuttlefish_runtime $HOME/cuttlefish_assembly
Cuttlefish không thể điều hướng an toàn quá trình chuyển đổi giữa các luồng có và không có lớp phủ, vì vậy, thay đổi này sẽ xoá tất cả trạng thái quản lý Cuttlefish. Nếu các tệp ổ đĩa ngoài được sửa đổi và sử dụng lại sau cùng với các lớp phủ, thì các nội dung sửa đổi trước đó sẽ được coi là một phần của trạng thái cơ sở.
Cờ
Bạn có thể thêm đối số bằng cờ khi khởi chạy thiết bị Cuttlefish bằng launch_cvd
. Tuy nhiên, đối với một số cờ nhất định (Cờ phải giữ nguyên), dữ liệu có thể bị mất nếu thay đổi cờ giữa các lệnh launch_cvd
. Để đảm bảo không xảy ra tình trạng mất dữ liệu khi chạy một chuỗi lệnh bao gồm launch_cvd
, stop_cvd
, sau đó lại chạy launch_cvd
, hãy sử dụng cùng một cờ cho mọi lệnh launch_cvd
. Ví dụ: nếu cờ launch_cvd
đầu tiên bao gồm đối số --kernel_path=KERNEL_PATH
, thì lệnh gọi launch_cvd
thứ hai cũng phải bao gồm cùng một đối số --kernel_path=KERNEL_PATH
, hoặc mọi thay đổi hệ thống tệp được thực hiện trước stop_cvd
sẽ bị mất trong lệnh gọi launch_cvd
thứ hai. Tệp được KERNEL_PATH
tham chiếu cũng phải có cùng nội dung.
Một số cờ có thể thay đổi an toàn giữa các lệnh gọi launch_cvd
. Các phần sau liệt kê các cờ phải được giữ nguyên để tránh mất dữ liệu và những cờ có thể thay đổi an toàn mà không bị mất dữ liệu. Để biết thông tin chi tiết về từng cờ, hãy tham khảo nguồn (flags.cc
, disk_flags.cc
) hoặc chạy launch_cvd --help
.
Cờ phải giữ nguyên
Các cờ này phải giống nhau từ một lệnh gọi launch_cvd
đến lệnh gọi tiếp theo để tránh mất dữ liệu:
--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
Cờ có thể thay đổi
Bạn có thể thay đổi các cờ này một cách an toàn giữa các lệnh gọi launch_cvd
mà không gây mất dữ liệu:
--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