توضّح هذه الصفحة كيفية إعادة تشغيل الأجهزة الافتراضية Cuttlefish وإعادة ضبطها. يُشار إلى إعادة ضبط جهاز Cuttlefish إلى حالة القرص الأولية باسم powerwashing في أداة سطر الأوامر.
عند تشغيل مهام سير عمل تلقائية أو يدوية تتضمّن إجراءات مختلفة متعددة، مثل حزم الاختبار، تضمن إعادة ضبط جهاز Cuttlefish بين الإجراءات أنّ سلوك كل إجراء مستقل. إذا لم تتم إعادة ضبط حالة القرص، يمكن أن يؤثر أحد الإجراءات في سلوك الإجراء التالي.
تفترض إجراءات إعادة التشغيل وإعادة الضبط الموضّحة في هذه الصفحة أنّك أنشأت جهاز Cuttlefish وضبطت بعض الحالات على القرص.
# 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
من نقطة البداية هذه، يمكنك استخدام عمليات إعادة التشغيل وإعادة الضبط التالية:
- إذا كان الجهاز يستجيب، يمكنك إجراء إعادة تشغيل نظيفة باستخدام
adb reboot. - إذا كان الجهاز لا يستجيب، يمكنك إجراء إعادة تشغيل غير نظيفة باستخدام
restart_cvd. - يمكنك إعادة ضبط حالة الجهاز باستخدام
powerwash_cvd. - يمكنك إيقاف الجهاز وتغيير وسيطات
launch_cvdمع الاحتفاظ بحالة الجهاز أو محو حالة الجهاز بشكل إلزامي.
تنفيذ عملية إعادة الضبط السريع في Cuttlefish
يستخدم Cuttlefish عملية إعادة ضبط سريع تعتمد على حماية الأقراص التي تظهر خلف تراكبات أقراص qcow2. يتعامل Cuttlefish تلقائيًا مع الأقراص الأصلية على أنّها للقراءة فقط ويستخدم التراكبات لتسجيل عمليات الكتابة على القرص.
ومع ذلك، هناك عيوب في استخدام تراكبات النسخ عند الكتابة. على وجه الخصوص، تؤدي التغييرات الخارجية على الأقراص الأساسية إلى فقدان التوافق مع التراكبات الحالية، وتتسبب في حالة قرص غير متسقة. يعيد Cuttlefish إنشاء التراكبات بشكل إلزامي عند رصد تغييرات غير متوافقة.
لا يُستحسن إعادة إنشاء التراكبات بشكل إلزامي عند تطوير ميزة تتطلب الاحتفاظ بجزء من القرص في حالة مهيأة معيّنة أثناء استبدال جزء مختلف من القرص. على سبيل المثال، تثبيت تطبيق باستخدام إعدادات مستخدم معيّنة ثم استبدال النواة بشكل متكرر لاختبار التفاعل بين التطبيق وإصدارات النواة المختلفة. في هذه الحالة، قد يكون من المفيد إيقاف التراكبات.
إعادة ضبط الأجهزة
توضّح الأقسام التالية طرق إعادة ضبط جهاز Cuttlefish إلى حالة القرص الأولية.
إعادة ضبط جهاز واحد
لإعادة ضبط جهاز Cuttlefish واحد إلى حالة القرص الأولية، شغِّل الأمر التالي:
powerwash_cvdيؤدي الأمر powerwash_cvd إلى إيقاف الجهاز الظاهري وإعادة ضبط أي تغييرات تم إجراؤها على قرص الجهاز الظاهري وإعادة تشغيل الجهاز الظاهري والانتظار إلى أن ينتهي من عملية الإقلاع. تحتفظ النسخة بالعلامات الأصلية التي تم تقديمها إلى launch_cvd.
في إعدادات متعددة المستأجرين،
powerwash_cvd يعيد تشغيل نسخة واحدة من مجموعة النسخ:
powerwash_cvd --instance_num=Nإعادة ضبط جميع الأجهزة
لإيقاف جهاز واحد أو أكثر وإعادة ضبطه إلى حالة القرص الأولية، شغِّل الأمر التالي:
stop_cvdlaunch_cvd --resume=false
يُجري الأمر stop_cvd عملية إيقاف غير نظيفة ويوقف الجهاز.
تؤدي إضافة --resume=false إلى launch_cvd إلى جعل Cuttlefish يحذف جميع الملفات المرتبطة بالنسخة التي تم تشغيلها سابقًا قبل بدء عملية التشغيل التالية. يمكنك إضافة أي علامات launch_cvd إضافية بأمان.
في إعدادات متعددة المستأجرين،
stop_cvd يؤدي إلى إيقاف مجموعة النسخ بالكامل.
إعادة تشغيل الأجهزة
توضّح الأقسام التالية طرق إعادة تشغيل جهاز بدون إعادة ضبطه إلى حالة القرص الأولية.
إعادة تشغيل نظيفة
لإجراء إعادة تشغيل نظيفة للجهاز عندما يكون الجهاز يستجيب، شغِّل الأمر التالي:
adb rebootيُجري الأمر adb reboot عملية إيقاف التشغيل الكاملة للجهاز، ويُزامِن التغييرات مع القرص ويتأكّد من إيقاف العمليات. لا تشارك عمليات مضيف Cuttlefish في هذه العملية. قد لا يكون هذا الإجراء متاحًا إذا دخل الجهاز في حالة سيئة وأصبح لا يستجيب.
لإجراء إعادة تشغيل نظيفة لجهاز 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_cvdlaunch_cvd NEW_FLAG
يُجري الأمر stop_cvd عملية إيقاف غير نظيفة مشابهة للأمر restart_cvd. يترك الجهاز في حالة غير نشطة يمكن بدء تشغيلها مرة أخرى لاحقًا باستخدام أمر launch_cvd مختلف. كما هو الحال مع restart_cvd، قد لا يتم حفظ عمليات الكتابة على القرص إذا لم تتم مزامنتها بالكامل مع القرص. لحفظ البيانات على القرص بأمان، شغِّل الأمر adb reboot أولاً.
adb rebootstop_cvdlaunch_cvd NEW_FLAG
إذا أدت التغييرات التي تم إجراؤها على علامات launch_cvd إلى فرض تغيير على تنسيق القرص غير متوافق مع عملية النسخ عند الكتابة، يتجاهل launch_cvd التعديلات القديمة على القرص ويعيد ضبط حالة القرص الأصلية. للاطّلاع على قائمة كاملة
بالعلامات، راجِع العلامات.
التشغيل بدون تراكب
لإيقاف دعم إعادة الضبط السريع، شغِّل الأمر التالي:
launch_cvd --use_overlay=falseتتعامل العلامة --use_overlay=false مع ملفات قرص Cuttlefish على أنّها للقراءة والكتابة، ويتم نشر التغييرات في هذه الملفات.
يمكن أن يؤدي التبديل بين --use_overlay=false والإعدادات التلقائية إلى حدوث أخطاء في التوافق. لإزالة حالة الجهاز السابقة بشكل إلزامي، شغِّل الأمر التالي:
stop_cvdrm $HOME/cuttlefish $HOME/cuttlefish_runtime $HOME/cuttlefish_assembly
لا يمكن لـ Cuttlefish الانتقال بأمان بين عمليات التشغيل التي تتضمّن تراكبات وتلك التي لا تتضمّنها، لذا يؤدي هذا التغيير إلى حذف جميع حالات إدارة Cuttlefish. إذا تم تعديل ملفات القرص الخارجية وإعادة استخدامها لاحقًا مع التراكبات، تُعتبر التعديلات السابقة جزءًا من الحالة الأساسية.
العلامات
يمكنك إضافة وسيطات باستخدام العلامات عند تشغيل جهاز 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--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