ساقه ماهی: راه اندازی مجدد و تنظیم مجدد

این صفحه نحوه راه اندازی مجدد و تنظیم مجدد دستگاه های مجازی Cuttlefish را شرح می دهد. بازنشانی دستگاه Cuttlefish به حالت دیسک اولیه آن به عنوان powerwashing در ابزار خط فرمان نامیده می شود.

هنگام اجرای گردش‌های کاری خودکار یا دستی با چندین روش مختلف، مانند مجموعه‌های آزمایشی، تنظیم مجدد دستگاه 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 از اجرای بازنشانی سریع استفاده می کند که به محافظت از دیسک های پشت همپوشانی دیسک 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