حبَّار: إعادة التشغيل وإعادة الضبط

توضّح هذه الصفحة كيفية إعادة تشغيل أجهزة Cuttlefish الافتراضية وإعادة ضبطها. يُشار إلى إعادة ضبط جهاز حبَّار إلى حالته الأولية على القرص powerwashing في أداة سطر الأوامر.

عند تنفيذ مهام سير عمل آلية أو يدوية باستخدام إجراءات مختلفة مثل مجموعات الاختبار، فإن إعادة ضبط جهاز الحبار بين الإجراءات تضمن أن سلوك كل إجراء مستقل. وإذا لم تكن حالة القرص إعادة تعيين، يمكن أن يؤثر إجراء واحد في سلوك الإجراء التالي.

تفترض إجراءات إعادة التشغيل وإعادة التعيين الموضحة في هذه الصفحة أن لديك بإنشاء جهاز حبَّار وضبطت بعض الحالة على القرص.

# 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. من بشكل افتراضي، يتعامل حبَّار أقراص التخزين الأصلية كقرص للقراءة فقط ويستخدم التراكبات والحصول على عمليات الكتابة على القرص.

ومع ذلك، هناك عيوب في استخدام تراكبات النسخ عند الكتابة. ومن الملاحظ أنّ تؤدي التغييرات الخارجية على الأقراص الأساسية إلى تعطيل التوافق مع الأقراص الحالية عمليات التراكب، وتؤدي إلى حالة غير متسقة للقرص. حبَّار بالقوة إعادة إنشاء التراكبات عند اكتشاف تغييرات غير متوافقة.

إن إعادة إنشاء التراكبات غير مرغوب فيها عند تطوير ميزة الاحتفاظ بجزء من القرص في حالة تهيئة معينة مع بتبديل جزء مختلف من القرص. على سبيل المثال، قد يؤدي تثبيت تطبيق ما مستخدم معين ثم استبدال الكيرنل (النواة) بشكل متكرر اختبار التفاعل بين التطبيق وإصدارات النواة المختلفة. وفي هذه الحالة، قد يكون من المفيد إيقاف التراكبات.

إعادة ضبط الأجهزة

تصف الأقسام التالية طرقًا لإعادة ضبط جهاز حبَّار على الإعدادات الأصلية. حالة القرص.

إعادة ضبط جهاز واحد

لإعادة ضبط جهاز حبَّار على حالة القرص الأولية، قم بتشغيل:

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 الجهاز من خلال إجراء إيقاف التشغيل بالكامل والمزامنة. تغييرات على القرص والتأكد من إيقاف تشغيل العمليات. مضيف حبَّار عمليات أخرى. قد يكون هذا الإجراء غير متاح إذا كان الجهاز دخل في حالة سيئة وأصبح غير مستجيب.

لإعادة تشغيل جهاز حبَّار واحد بشكل نظيف في ، وتحديد الرقم التسلسلي الجهاز المستهدف عند تشغيل adb-reboot. إذا لم يتم تحديد جهاز مستهدف المحدد، لا يعيد adb تشغيل أي جهاز.

adb -s SERIAL reboot

إعادة التشغيل غير النظيفة

لإجراء إعادة تشغيل غير نظيفة عندما لا يستجيب الجهاز، شغِّل:

restart_cvd

ينفذ restart_cvd عملية إيقاف تشغيل غير نظيف من خلال إيقاف تشغيل جهاز حبَّار. restart_cvd تعادل فصل البطارية وإعادة توصيلها بجهاز فعلي. عمليات الكتابة على القرص وقد لا تستمر إذا كانت قيد التقدم. ينتظر "restart_cvd" حتى يتم تشغيل الجهاز. تم تشغيله بالكامل مرة أخرى قبل الخروج.

في الإعداد المتعدّد المستأجرين، تعيد restart_cvd تشغيل نسخة واحدة من مجموعة المثيلات. لتحديد مثيل حبَّار الذي تريد إعادة تشغيله، استخدِم علامة instance_num.

restart_cvd --instance_num=N

في حال عدم استخدام --instance_num، يكون رقم المثيل التلقائي هو 1.

إعادة تشغيل باستخدام علامات بدء تشغيل_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 مع ملفات قرص حبَّار كمحتوى للقراءة والكتابة التغييرات في هذه الملفات.

التغيير بين --use_overlay=false والتغيير التلقائي يمكن أن يؤدي إلى التوافق. الأخطاء. لفرض محو حالة الجهاز السابقة، شغِّل:

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

لا يمكن للحبار التنقل بأمان بين التدفقات مع بدون تراكبات، فإن هذا التغيير يحذف جميع حالات إدارة الحبار. وإذا تم تعديل ملفات الأقراص الخارجية وإعادة استخدامها لاحقًا مع التراكبات، تعتبر التعديلات السابقة جزءًا من الحالة المرجعية.

أعلام

يمكنك إضافة وسيطات باستخدام العلامات عند إطلاق جهاز حبَّار باستخدام 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