توضّح هذه الصفحة كيفية إعادة تشغيل الأجهزة الافتراضية في 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 بشكل تلقائي مع الأقراص الأصلية كقرص للقراءة فقط ويستخدم التراكبات لتسجيل عمليات الكتابة على القرص.
ومع ذلك، هناك عيوب في استخدام تراكبات النسخ عند الكتابة. ومن الجدير بالذكر أنّه عند إجراء تغييرات خارجية على الأقراص الأساسية، تصبح غير متوافقة مع التراكبات الحالية، ما يؤدي إلى عدم اتساق حالة القرص. يعيد الحبار إنشاء التراكبات عندما يكتشف تغييرات غير متوافقة.
إن إعادة إنشاء التراكبات غير مرغوب فيها عند تطوير ميزة تتطلب الاحتفاظ بجزء من القرص في حالة تهيئة معينة مع تبديل جزء آخر من القرص. على سبيل المثال، تثبيت تطبيق بتكوين مستخدم معين ثم تبديل النواة بشكل متكرر لاختبار التفاعل بين التطبيق وإصدارات النواة المختلفة. في هذه الحالة، قد يكون من المفيد إيقاف التراكبات.
إعادة ضبط الأجهزة
تصف الأقسام التالية طرقًا لإعادة ضبط جهاز حبَّار على حالته الأولية للقرص.
إعادة ضبط جهاز واحد
لإعادة ضبط جهاز حبَّار على حالة القرص الأولية، قم بتشغيل:
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
بطريقة غير نظيفة من خلال إيقاف تشغيل جهاز الحبار على الفور. يعادل إجراء restart_cvd
فصل البطارية عن الجهاز المادي وإعادة توصيلها به. قد لا تستمر عمليات الكتابة
على القرص إذا كانت قيد التقدم. ينتظر restart_cvd
حتى يتم تشغيل الجهاز مجددًا بالكامل قبل الخروج.
في إعداد المستأجرين المتعدّدين، يُعيد restart_cvd
تشغيل مثيل واحد من مجموعة المثيلات. لتحديد مثيل حبَّار الذي تريد إعادة تشغيله، استخدِم العلامة 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
مع ملفات قرص حبَّار كقراءة وكتابة، ويتم نشر التغييرات في تلك الملفات.
قد يؤدي التبديل بين --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