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

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

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

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

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

آلية العمل

وظائف النقطة المرجعية في أنظمة الملفات المختلفة

بالنسبة إلى نظام ملفات F2FS، يضيف UDC وظيفة نقطة التحقق إلى التسليم النواة 4.20 Linux وتعيد نقلها إلى جميع النواة الشائعة التي تدعمها الأجهزة يعمل بنظام 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

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

تنشئ نقطة مرجعية.

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

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

تنفيذ التغييرات() باطلة

يجري تنفيذ التغييرات.

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

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

abortChanges()

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

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

قيمة منطقية بحاجة إلىRollback()

تحدِّد هذه السياسة ما إذا كانت العودة إلى الحالة السابقة مطلوبة.

على الأجهزة التي لا تتضمن نقاط فحص، يتم إرجاع مبلغ 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، تأكّد من وضع علامة latemount على /data.

/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، تأكّد من وضع علامة earlymount على /metadata. أو 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=fs إلى القسم <fs_mgr_flags> في fstab تم تثبيت الجهاز في /data.

الأنظمة التي لا تتضمّن F2FS

بالنسبة إلى الأنظمة التي لا تعمل على بروتوكول F2FS، يجب تفعيل dm-bow في إعدادات النواة.

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

الاطّلاع على السجلات

يتم إنشاء إدخالات السجلّ عند استدعاء واجهات برمجة تطبيقات نقطة التحقق.

التحقُّق

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