في الإصدارات السابقة من Android، كان النظام يبحث في جميع الملفات التي يملكها تطبيق معيّن لقياس مساحة القرص المستخدَمة. قد يستغرق احتساب هذا القياس اليدوي دقائق قبل عرض النتائج للمستخدمين في "الإعدادات".
بالإضافة إلى ذلك، كانت الخوارزمية الداخلية لمحو ملفات البيانات المخزّنة مؤقتًا تنظر فقط في الوقت الذي تم فيه تعديل البيانات في جميع التطبيقات. وقد سمح ذلك للتطبيقات الضارة بخفض تجربة المستخدم الإجمالية من خلال ضبط أوقات معدَّلة في المستقبل البعيد لمنح تطبيقاتها أفضلية غير عادلة على التطبيقات الأخرى.
لتحسين هذه التجارب، يقدّم نظام التشغيل Android 8.0 إمكانية الاستفادة من ميزة "الحصة" في نظام الملفات ext4 لعرض إحصاءات استخدام القرص بشكلٍ فوري تقريبًا. تعمل ميزة الحصة هذه أيضًا على تحسين استقرار النظام من خلال منع أي تطبيق فردي من استخدام أكثر من% 90 من مساحة القرص أو% 50 من عناصر inode.
التنفيذ
تشكّل ميزة الحصة جزءًا من التنفيذ التلقائي installd
.
يستخدم installd
ميزة الحصة تلقائيًا عند تفعيلها في ملف نظام معيّن. يستأنف النظام تلقائيًا وبشفافية حساب الصعوبة بالطريقة اليدوية عندما لا تكون ميزة الحصة مفعّلة أو متوافقة على
وحدة التخزين التي يتم قياسها.
لتفعيل ميزة الحصة على جهاز تخزين محدد:
- فعِّل خيارات
CONFIG_QUOTA
وCONFIG_QFMT_V2
وCONFIG_QUOTACTL
في نواة النظام. - أضِف الخيار
quota
إلى قسم userdata في ملف fstab:/dev/block/platform/soc/624000.ufshc/by-name/userdata /data ext4 noatime,nosuid,nodev,barrier=1,noauto_da_alloc latemount,wait,check,formattable,fileencryption=ice,quota
يمكن تفعيل خيار fstab
أو إيقافه بأمان على
الأجهزة الحالية. أثناء عملية التشغيل الأولى بعد تغيير الخيار fstab
،
يفرض fsmgr
استخدام fsck
لتعديل جميع هياكل بيانات الحصة، ما قد يتسبب في أن تستغرق عملية التشغيل الأولى وقتًا أطول قليلاً. ولن تتأثر عمليات التمهيد التالية.
تم اختبار إمكانية استخدام الحصة فقط على ext4 وLinux 3.18 أو الإصدارات الأحدث. في حال تفعيل هذه الميزة على أنظمة ملفات أخرى أو على إصدارات أقدم من نواة النظام، يتحمّل المصنّعون مسؤولية اختبار هذه الميزة والتحقق من صحة الإحصاءات.
لا يلزم توفُّر أجهزة خاصة.
التحقُّق
هناك اختبارات CTS ضمن StorageHostTest
، والتي تستخدم واجهات برمجة التطبيقات المفتوحة لقياس استخدام القرص. من المتوقّع أن تعرِض واجهات برمجة التطبيقات هذه قيمًا صحيحة
بغض النظر عمّا إذا كان خيار "إتاحة الحصة" مفعّلاً أو غير مفعّل.
تصحيح الأخطاء
يخصّص التطبيق التجريبي مناطق مساحة القرص بعناية باستخدام أرقام أولية فريدة
حسب الحجم. عند تصحيح أخطاء هذه الاختبارات، استخدِم هذا الإجراء لتحديد سبب أي اختلافات. على سبيل المثال، إذا تعذّر إجراء اختبار بفرق 11 ميغابايت، راجِع طريقة
Utils.useSpace()
لمعرفة ما إذا تم تخزين السلسلة غير القابلة للتغيير التي تبلغ 11 ميغابايت في
getExternalCacheDir()
.
هناك أيضًا بعض الاختبارات الداخلية التي قد تكون مفيدة لتصحيح الأخطاء، ولكن قد تتطلّب إيقاف عمليات التحقّق من الأمان لاجتيازها:
runtest -x frameworks/base/services/tests/servicestests/ \ src/com/android/server/pm/InstallerTest.java
adb shell /data/nativetest64/installd_utils_test/installd_utils_test
adb shell /data/nativetest64/installd_cache_test/installd_cache_test
adb shell /data/nativetest64/installd_service_test/installd_service_test