نقطة فحص بيانات المستخدم

يقدم Android 10 نقطة فحص بيانات المستخدم (UDC)، والتي تسمح لنظام Android بالعودة إلى حالته السابقة عند فشل تحديث Android عبر الهواء (OTA). باستخدام UDC، إذا فشل تحديث Android OTA، فيمكن للجهاز العودة بأمان إلى حالته السابقة. على الرغم من أن تحديثات A/B تحل هذه المشكلة للتشغيل المبكر، إلا أن التراجع غير مدعوم عند تعديل قسم بيانات المستخدم (المثبت على /data ).

يمكّن UDC الجهاز من إرجاع قسم بيانات المستخدم حتى بعد تعديله. تحقق ميزة UDC ذلك من خلال إمكانات نقاط التفتيش لنظام الملفات، وتنفيذ بديل عندما لا يدعم نظام الملفات نقاط التفتيش، والتكامل مع آلية تحميل التشغيل A/B مع دعم التحديثات غير A/B أيضًا، ودعم ربط إصدار المفتاح ومنع التراجع عن المفتاح.

تأثير المستخدم

تعمل ميزة UDC على تحسين تجربة التحديث عبر الهواء للمستخدمين حيث يفقد عدد أقل من المستخدمين بياناتهم عند فشل التحديث عبر الهواء. يمكن أن يؤدي هذا إلى تقليل عدد مكالمات الدعم من المستخدمين الذين يواجهون مشكلات أثناء عملية التحديث. ومع ذلك، عند فشل التحديث عبر الهواء، قد يلاحظ المستخدمون إعادة تشغيل الجهاز عدة مرات.

كيف تعمل

وظيفة نقطة التفتيش في أنظمة الملفات المختلفة

بالنسبة لنظام الملفات F2FS، تضيف UDC وظيفة نقطة التفتيش إلى نواة Linux الأولية 4.20 وتعيدها إلى جميع النوى الشائعة التي تدعمها الأجهزة التي تعمل بنظام Android 10.

بالنسبة لأنظمة الملفات الأخرى، يستخدم UDC جهازًا ظاهريًا لمعين الجهاز يسمى dm_bow لوظيفة نقطة التفتيش. يقع dm_bow بين الجهاز ونظام الملفات. عند تثبيت قسم ما، يتم إصدار قطع مما يتسبب في قيام نظام الملفات بإصدار أوامر القطع على كافة الكتل المجانية. يعترض dm_bow هذه القطع ويستخدمها لإعداد قائمة حظر مجانية. يتم بعد ذلك إرسال عمليات القراءة والكتابة إلى الجهاز بدون تعديل، ولكن قبل السماح بالكتابة، يتم عمل نسخة احتياطية من البيانات المطلوبة للاستعادة في كتلة مجانية.

عملية نقطة تفتيش

عندما يتم تثبيت قسم يحمل علامة checkpoint=fs/block ، يستدعي Android restoreCheckpoint على محرك الأقراص للسماح للجهاز باستعادة أي نقطة تفتيش حالية. يقوم init بعد ذلك باستدعاء الدالة needsCheckpoint لتحديد ما إذا كان الجهاز في حالة A/B الخاصة بمحمل التشغيل أو قام بتعيين عدد مرات إعادة محاولة التحديث. إذا كان أي منهما صحيحًا، فسيقوم Android باستدعاء createCheckpoint إما لإضافة إشارات التثبيت أو إنشاء جهاز dm_bow .

بعد تثبيت القسم، يتم استدعاء رمز نقطة التفتيش لإصدار الديكورات. ثم تستمر عملية التمهيد كالمعتاد. في LOCKED_BOOT_COMPLETE ، يستدعي Android commitCheckpoint لتنفيذ نقطة التحقق الحالية ويستمر التحديث كالمعتاد.

إدارة المفاتيح الرئيسية

تُستخدم مفاتيح Keymaster لتشفير الجهاز أو لأغراض أخرى. لإدارة هذه المفاتيح، يقوم Android بتأخير مكالمات حذف المفاتيح حتى يتم الالتزام بنقطة التحقق.

مراقبة الصحة

يتحقق البرنامج الخفي للصحة من وجود مساحة كافية على القرص لإنشاء نقطة تفتيش. يوجد البرنامج الخفي للصحة في cp_healthDaemon في Checkpoint.cpp .

يحتوي البرنامج الخفي للصحة على السلوكيات التالية التي يمكن تهيئتها:

  • ro.sys.cp_msleeptime : يتحكم في عدد المرات التي يتحقق فيها الجهاز من استخدام القرص.
  • ro.sys.cp_min_free_bytes : يتحكم في الحد الأدنى من القيمة التي يبحث عنها البرنامج الخفي للصحة.
  • ro.sys.cp_commit_on_full : يتحكم فيما إذا كان البرنامج الخفي للصحة يعيد تشغيل الجهاز أو ينفذ نقطة التفتيش ويستمر عندما يكون القرص ممتلئًا.

واجهات برمجة التطبيقات لنقاط التفتيش

يتم استخدام Checkpoint APIs بواسطة ميزة UDC. بالنسبة لواجهات برمجة التطبيقات الأخرى التي تستخدمها UDC، راجع IVold.aidl .

نقطة تفتيش البداية الفارغة (إعادة المحاولة)

يخلق نقطة تفتيش.

يستدعي إطار العمل هذه الطريقة عندما يكون جاهزًا لبدء التحديث. يتم إنشاء نقطة التفتيش قبل أن يتم تحميل أنظمة الملفات التي تم وضع نقاط تفتيش لها مثل بيانات المستخدم R/W بعد إعادة التشغيل. إذا كان عدد مرات إعادة المحاولة موجبًا، فإن واجهة برمجة التطبيقات (API) تعالج عمليات إعادة المحاولة للتتبع، ويستدعي المُحدِّث needsRollback للتحقق مما إذا كان التراجع عن التحديث مطلوبًا. إذا كان عدد مرات إعادة المحاولة هو -1 ، فستخضع واجهة برمجة التطبيقات لحكم أداة تحميل التشغيل A/B.

لا يتم استدعاء هذه الطريقة عند إجراء تحديث A/B عادي.

الالتزام الفارغ ()

يرتكب التغييرات.

يستدعي إطار العمل هذه الطريقة بعد إعادة التشغيل عندما تكون التغييرات جاهزة للالتزام بها. يتم استدعاء هذا قبل كتابة البيانات (مثل الصور والفيديو والرسائل النصية القصيرة وإيصال استلام الخادم) إلى بيانات المستخدم وقبل BootComplete .

في حالة عدم وجود تحديث نشط بنقاط تفتيش، لن يكون لهذه الطريقة أي تأثير.

إحباط التغييرات ()

إعادة تشغيل القوات والعودة إلى نقطة التفتيش. يتخلى عن كافة تعديلات بيانات المستخدم منذ إعادة التشغيل الأولى.

يستدعي إطار العمل هذه الطريقة بعد إعادة التشغيل ولكن قبل commitChanges . يتم تقليل قيمة retry_counter عند استدعاء هذه الطريقة. يتم إنشاء إدخالات السجل.

احتياجات منطقيةالتراجع ()

يحدد ما إذا كان التراجع مطلوبًا أم لا.

على الأجهزة التي لا تحتوي على نقاط تفتيش، يتم إرجاع false . على أجهزة نقاط التفتيش، يتم إرجاع true أثناء التمهيد بدون نقطة تفتيش.

تنفيذ UDC

التنفيذ المرجعي

للحصول على مثال لكيفية تنفيذ UDC، راجع dm-bow.c . للحصول على وثائق إضافية حول الميزة، راجع dm-bow.txt .

يثبت

في ملف on fs في ملف init.hardware.rc ، تأكد من أن لديك:

mount_all /vendor/etc/fstab.${ro.boot.hardware.platform} --early

في on late-fs في ملف init.hardware.rc الخاص بك، تأكد من أن لديك:

mount_all /vendor/etc/fstab.${ro.boot.hardware.platform} --late

في ملف fstab.hardware الخاص بك، تأكد من وضع علامة على /data كـ latemount .

/dev/block/bootdevice/by-name/userdata              /data              f2fs
noatime,nosuid,nodev,discard,reserve_root=32768,resgid=1065,fsync_mode=nobarrier
latemount,wait,check,fileencryption=ice,keydirectory=/metadata/vold/metadata_encryption,quota,formattable,sysfs_path=/sys/devices/platform/soc/1d84000.ufshc,reservedsize=128M,checkpoint=fs

إضافة قسم البيانات الوصفية

يتطلب UDC قسمًا لبيانات التعريف لتخزين عدد مرات إعادة محاولة أداة تحميل التشغيل والمفاتيح. قم بإعداد قسم بيانات التعريف وقم بتثبيته مبكرًا على /metadata .

في ملف fstab.hardware الخاص بك، تأكد من وضع علامة /metadata على أنه earlymount أو first_stage_mount .

/dev/block/by-name/metadata           /metadata           ext4
noatime,nosuid,nodev,discard,sync
wait,formattable,first_stage_mount

تهيئة القسم إلى كافة الأصفار.

أضف الأسطر التالية إلى BoardConfig.mk :

BOARD_USES_METADATA_PARTITION := true
BOARD_ROOT_EXTRA_FOLDERS := existing_folders metadata

تحديث الأنظمة

أنظمة F2FS

بالنسبة للأنظمة التي تستخدم F2FS لتنسيق البيانات، تأكد من أن إصدار F2FS الخاص بك يدعم نقاط التفتيش. لمزيد من المعلومات، راجع وظيفة Checkpoint في أنظمة الملفات المختلفة .

أضف علامة checkpoint=fs إلى قسم <fs_mgr_flags> في fstab للجهاز المثبت على /data .

أنظمة غير F2FS

بالنسبة للأنظمة غير F2FS، يجب تمكين dm-bow في تكوين kernel.

أضف علامة checkpoint=block إلى قسم <fs_mgr_flags> في fstab للجهاز المثبت على /data .

تحقق من السجلات

يتم إنشاء إدخالات السجل عند استدعاء Checkpoint APIs.

تصديق

لاختبار تنفيذ UDC، قم بتشغيل مجموعة VtsKernelCheckpointTest من اختبارات VTS.