Cuttlefish: إعادة التشغيل وإعادة الضبط

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

عند تنفيذ مهام سير عمل مبرمَجة أو يدوية تتضمّن إجراءات مختلفة متعددة، مثل مجموعات الاختبارات، يضمن إعادة ضبط جهاز 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

تستخدم 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