الحبار: إعادة التشغيل وإعادة التعيين

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

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