اعتبارًا من 27 آذار (مارس) 2025، ننصحك باستخدام android-latest-release
بدلاً من aosp-main
لإنشاء AOSP والمساهمة فيه. لمزيد من المعلومات، يُرجى الاطّلاع على التغييرات في AOSP.
إحصاءات مساحة التخزين بشكل أسرع
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
في الإصدارات السابقة من 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
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2025-07-27 (حسب التوقيت العالمي المتفَّق عليه)
[[["يسهُل فهم المحتوى.","easyToUnderstand","thumb-up"],["ساعَدني المحتوى في حلّ مشكلتي.","solvedMyProblem","thumb-up"],["غير ذلك","otherUp","thumb-up"]],[["لا يحتوي على المعلومات التي أحتاج إليها.","missingTheInformationINeed","thumb-down"],["الخطوات معقدة للغاية / كثيرة جدًا.","tooComplicatedTooManySteps","thumb-down"],["المحتوى قديم.","outOfDate","thumb-down"],["ثمة مشكلة في الترجمة.","translationIssue","thumb-down"],["مشكلة في العيّنات / التعليمات البرمجية","samplesCodeIssue","thumb-down"],["غير ذلك","otherDown","thumb-down"]],["تاريخ التعديل الأخير: 2025-07-27 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],null,["# Faster storage statistics\n\nIn earlier versions of Android, the system traversed all files owned by a\nparticular app to measure disk usage. This manual measurement could take minutes\nto compute before displaying the results to users in Settings.\n\n\nIn addition, the internal algorithm to clear cached data files only looked at\nmodified time across all apps. This allowed malicious apps to degrade the\noverall user experience by setting modified times far in the future to unfairly\nfavor themselves over other apps.\n\n\nTo improve these experiences, Android 8.0 offers to leverage the ext4 filesystem's\n\"quota\" support to return disk usage statistics almost instantly. This quota\nfeature also improves system stability by preventing any single app from using\nmore than 90% of disk space or 50% of inodes.\n\nImplementation\n--------------\n\n\nThe quota feature is part of the default implementation of `installd`.\n`installd` automatically uses the quota feature when enabled on a\nparticular filesystem. The system automatically and transparently resumes\nmanual calculation when the quota feature isn't enabled or supported on the\nblock device being measured.\n\n\nTo enable quota support on a particular block device:\n\n1. Enable the `CONFIG_QUOTA`, `CONFIG_QFMT_V2`, and `CONFIG_QUOTACTL` kernel options.\n2. Add the `quota` option to your userdata partition in your fstab file: \n\n ```\n /dev/block/platform/soc/624000.ufshc/by-name/userdata /data\n ext4 noatime,nosuid,nodev,barrier=1,noauto_da_alloc\n latemount,wait,check,formattable,fileencryption=ice,quota\n ```\n\n\nThe `fstab` option can safely be enabled or disabled on existing\ndevices. During the first boot after changing the `fstab` option,\n`fsmgr` forces an `fsck` pass to update all quota data\nstructures, which may cause that first boot to take slightly longer. Subsequent\nboots will not be affected.\n\n\nQuota support has only been tested on ext4 and Linux 3.18 or higher. If enabling\non other filesystems, or on older kernel versions, device manufacturers are\nresponsible for testing and vetting for statistics correctness.\n\n\nNo special hardware support is required.\n\nValidation\n----------\n\n\nThere are CTS tests under `StorageHostTest`, which exercise public\nAPIs for measuring disk usage. These APIs are expected to return correct values\nregardless of quota support being enabled or disabled.\n\n### Debugging\n\n\nThe test app carefully allocates disk space regions using unique prime numbers\nfor the size. When debugging these tests, use this to determine the cause of any\ndiscrepancies. For example, if a test fails with a delta of 11MB, examine the\n`Utils.useSpace()` method to see that the 11MB blob was stored in\n`getExternalCacheDir()`.\n\n\nThere are also some internal tests that may be useful for debugging, but they\nmay require disabling security checks to pass: \n\n runtest -x frameworks/base/services/tests/servicestests/ \\\n src/com/android/server/pm/InstallerTest.java\n adb shell /data/nativetest64/installd_utils_test/installd_utils_test\n adb shell /data/nativetest64/installd_cache_test/installd_cache_test\n adb shell /data/nativetest64/installd_service_test/installd_service_test"]]