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