Mực nang: Khởi động lại và đặt 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 ống về trạng thái ổ đĩa ban đầu được gọi là định dạng lại trong công cụ dòng lệnh.

Khi chạy quy trình công việc tự động hoặc thủ công với nhiều quy trình khác nhau, chẳng hạn như các bộ thử nghiệm, việc đặt lại thiết bị Mực ống 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 đặt lại, 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à thiết lập 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 các quy trình khởi động lại và đặt lại sau đây:

Cách đặt lại nhanh cho con mực

Mực nang sử dụng phương pháp đặ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, con nhộng coi các đĩa gốc là chỉ đọc và sử dụng lớp phủ để ghi dữ liệu đĩa đã ghi.

Tuy nhiên, có một số hạn chế khi sử dụng lớp phủ sao chép khi ghi. Đáng chú ý, các thay đổi bên ngoài đối với các ổ đĩa cơ bản làm hỏng khả năng tương thích với các ổ đĩa hiện có và gây ra trạng thái ổ đĩa không nhất quán. Mực nang bị cưỡng bức tạo lại lớp phủ khi phát hiện các thay đổi không tương thích.

Việc buộc tạo lại lớp phủ là không được mong muốn khi phát triển một tính năng yêu cầu duy trì một phần của ổ đĩa ở trạng thái khởi tạo cụ thể trong khi đang hoán đổi một phần khác của ổ đĩa. Ví dụ: cài đặt một ứng dụng bằng một 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 hạt nhân khác nhau. 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ác cách đặt lại thiết bị Mực nang về ban đầu trạng thái ổ đĩa.

Đặ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 mã:

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à chờ cho đến khi hoàn tất đang khởi động. Thực thể này giữ lại các cờ ban đầu được cấp cho launch_cvd.

Trong cấu hình nhiều người thuê, powerwash_cvd khởi động lại một thực thể duy nhất 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 tắt không đúng cách và dừng thiết bị.

Nếu thêm --resume=false vào launch_cvd, con mực sẽ huỷ tất cả tệp liên quan đến thực thể đã chạy trước đó trước khi bắt đầu lần chạy tiếp theo. Bây giờ thêm bất kỳ cờ launch_cvd nào khác.

Trong cấu hình nhiều người thuê, stop_cvd tắt 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á những thay đổi đối với đĩa và đảm bảo các quá trình tắt. Chủ đề mực nang không liên quan đến quá trình này. Quy trình này có thể không thực hiện đượ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 một 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 là đã chỉ định, 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 đúng cách

Để khởi động lại không đúng cách khi thiết bị không phản hồi, hãy chạy mã:

restart_cvd

restart_cvd tắt một cách không hợp lý bằng cách tắt ngay lập tức Thiết bị mực nang. restart_cvd tương đương với ngắt kết nối rồi kết nối lại pin với một thiết bị thực. Hoạt động ghi vào ổ đĩa có thể không duy trì nếu quá trình đó 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 người 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 nang 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ố thực thể sẽ được 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. Nó thoát khỏi thiết bị ở trạng thái không hoạt động có thể được bắt đầu lại sau bằng một Lệnh launch_cvd. Tương tự như với restart_cvd, hoạt động ghi vào ổ đĩa có thể không tồn tại nếu chúng không được đồng bộ hoá hoàn toàn với ổ đĩa. Để lưu dữ liệu vào ổ đĩa một cách an toàn, hãy chạy adb reboot đầu tiên.

adb reboot
stop_cvd
launch_cvd NEW_FLAG

Nếu các thay đổi đối với cờ launch_cvd sẽ buộc thay đổi bố cục ổ đĩa không tương thích với cách triển khai sao chép khi ghi, launch_cvd sẽ bỏ qua sửa đổi ổ đĩa cũ và đặt lại về trạng thái ổ đĩa ban đầu. Để có một buổi danh sách 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 mã:

launch_cvd --use_overlay=false

--use_overlay=false coi các tệp đĩa Mực là đọc-ghi và các thay đổi sẽ được phổ biế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 khả năng tương thích . Để buộc dọn dẹp 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

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

Những cờ có thể thay đổi

Bạn có thể thay đổi an toàn những cờ này giữa các lệnh gọi launch_cvd mà không cần 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