Mực nang: Khởi động lại và thiết lập lại

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ị Mực nang về trạng thái đĩa ban đầu được gọi là powerwashing 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ộ thử nghiệm, việc đặt lại thiết bị Mực nang giữa các quy trình sẽ đảm bảo rằng hoạt động của từng quy trình là độc lập. Nếu trạng thái ổ đĩa không được đặt lại thì một quy trình có thể ảnh hưởng đến hoạt động 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 một thiết bị Mực nang và đã đặt một số trạng thái trên đĩa.

# 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

Từ điểm bắt đầu này, bạn có thể sử dụng quy trình khởi động lại và đặt lại sau:

Thực hiện reset nhanh mực nang

Mực nang sử dụng triển khai thiết lập 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 xử lý các đĩa gốc ở dạng chỉ đọc và sử dụng các lớp phủ để ghi lại hoạt động ghi đĩa.

Tuy nhiên, có những hạn chế khi sử dụng lớp phủ sao chép khi ghi. Đáng chú ý là những thay đổi bên ngoài đối với các ổ đĩa cơ bản sẽ phá vỡ tính 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. Mực nang buộc phải tạo lại lớp phủ khi phát hiện những thay đổi không tương thích.

Việc buộc tạo lại các lớp phủ là điều không mong muốn 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 tạo 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 kernel để kiểm tra sự tương tác giữa ứng dụng và các bản dựng kernel khác nhau. Trong trường hợp này, có thể nên tắt lớp phủ .

Đặt lại thiết bị

Các phần sau đây mô tả các cách đặt lại thiết bị Mực nang về trạng thái đĩa ban đầu.

Đặt lại một thiết bị

Để đặt lại một thiết bị Mực nang 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 được thực hiện đối với đĩa máy ảo, khởi động lại máy ảo và đợi cho đến khi khởi động xong. Phiên bản này giữ nguyên các cờ ban đầu được cấp cho launch_cvd .

Trong cấu hình nhiều bên thuê , powerwash_cvd khởi động lại một phiên bản duy nhất trong nhóm phiên bản:

powerwash_cvd --instance_num=N

Đặt lại tất cả cá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:

stop_cvd
launch_cvd --resume=false

stop_cvd thực hiện tắt máy không sạch sẽ và dừng thiết bị.

Việc thêm --resume=false vào launch_cvd sẽ khiến Cuttlefish hủy 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. Việc thêm bất kỳ cờ launch_cvd bổ sung nào là an toàn.

Trong cấu hình nhiều người thuê , stop_cvd sẽ tắt toàn bộ nhóm phiên bản.

Khởi động lại thiết bị

Các phần sau đây mô tả các 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 sẽ

Để thực hiện khởi động lại thiết bị sạch khi thiết bị phản hồi, hãy chạy:

adb reboot

adb reboot sẽ đưa thiết bị đi qua quy trình tắt hoàn toàn, đồng bộ hóa các thay đổi vào ổ đĩa và đảm bảo các quy trình đã được tắt. Quá trình lưu trữ mực nang không được tham gia. Quy trình này có thể không khả dụng nếu thiết bị rơi vào trạng thái xấu và không phản hồi.

Để thực hiện khởi động lại sạch một thiết bị Mực nang trong cấu hình nhiều bên thuê , hãy chỉ định số sê-ri của thiết bị đích khi chạy adb-reboot . Nếu không có thiết bị đích 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 sẽ

Để thực hiện 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 máy không sạch bằng cách tắt ngay thiết bị Mực nang. restart_cvd tương đương với việc ngắt kết nối và kết nối lại pin với thiết bị vật lý. Việc ghi đĩa có thể không tồn tại nếu chúng đang được tiến hành. restart_cvd đợ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 người thuê , restart_cvd khởi động lại một phiên bản duy nhất trong nhóm phiên bản. Để chỉ định phiên bản Mực nang nào sẽ khởi động lại, hãy sử dụng cờ instance_num .

restart_cvd --instance_num=N

Nếu --instance_num không được sử dụng, số phiên bản 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à khởi chạy lại với các cờ launch_cvd khác, hãy chạy:

stop_cvd
launch_cvd NEW_FLAG

stop_cvd thực hiện tắt máy không sạch tương tự như restart_cvd . Nó để thiết bị ở trạng thái không hoạt động và có thể khởi động lại sau bằng lệnh launch_cvd khác. Giống như restart_cvd , việc ghi đĩa có thể không tiếp tục nếu chúng không được đồng bộ hóa hoàn toàn 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 phải thay đổi bố cục ổ đĩa không tương thích với việc triển khai sao chép khi ghi, thì launch_cvd sẽ bỏ qua các sửa đổi ổ đĩa cũ và đặt lại về trạng thái ổ đĩa ban đầu. Để biết danh sách đầy đủ các cờ, hãy xem Cờ .

Chạy mà không có lớp phủ

Để từ chối hỗ trợ thiết lập lại nhanh, hãy chạy:

launch_cvd --use_overlay=false

--use_overlay=false coi các tập tin trên đĩa Mực nang là đọc-ghi và các thay đổi sẽ được truyền vào các tập tin đó.

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 dọn sạch trạng thái thiết bị trước đó, hãy chạy:

stop_cvd
rm $HOME/cuttlefish $HOME/cuttlefish_runtime $HOME/cuttlefish_assembly

Mực nang không thể điều hướng một cách an toàn quá trình chuyển đổi giữa các dòng có và không có lớp phủ, vì vậy thay đổi này sẽ xóa tất cả trạng thái quản lý Mực nang. Nếu các tệp đĩa bên ngoài được sửa đổi và được sử dụng lại sau này cùng với các lớp phủ thì những sửa đổi trước đó đượ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ị Mực nang bằng cách sử dụng launch_cvd . Tuy nhiên, đối với một số cờ nhất định ( Cờ phải giữ nguyên ), mất dữ liệu có thể xảy ra nếu cờ được thay đổi giữa các lệnh launch_cvd . Để đảm bảo không xảy ra mất dữ liệu khi chạy một chuỗi lệnh bao gồm launch_cvd , stop_cvd và sau đó khởi chạy lại launch_cvd , hãy sử dụng cùng các 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 , lệnh gọi launch_cvd thứ hai cũng phải bao gồm đối số --kernel_path= KERNEL_PATH tương tự hoặc mọi thay đổi hệ thống tệp được thực hiện trước stop_cvd đều 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ần gọi launch_cvd . Các phần sau liệt kê các cờ phải giữ nguyên để tránh mất dữ liệu và các cờ có thể được thay đổi một cách an toàn mà không mất dữ liệu. Để biết 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ữ nguyên từ lần gọi launch_cvd này đến lần 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

Những cờ này có thể được thay đổi một cách an toàn giữa các lần 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