בגרסאות קודמות של Android, המערכת עברה את כל הקבצים שבבעלות אפליקציה ספציפית כדי למדוד את השימוש בכונן. המדידה הידנית הזו עשויה להימשך כמה דקות כדי לחשב לפני הצגת התוצאות למשתמשים בהגדרות.
בנוסף, האלגוריתם הפנימי לניקוי קובצי נתונים שנשמרו במטמון בחן רק זמן שונה בכל האפליקציות. כך אפליקציות זדוניות יכולות לפגוע את חוויית המשתמש הכוללת באמצעות הגדרת זמני שינויים רחוקים בעתיד באופן לא הוגן. להעדיף את עצמם על פני אפליקציות אחרות.
כדי לשפר את החוויות האלה, מערכת Android 8.0 מציעה למנף את מערכת הקבצים ext4 מכסה תמיכה בהחזרת נתוני שימוש בדיסק כמעט באופן מיידי. המכסה הזו בנוסף, התכונה משפרת את יציבות המערכת בכך שהיא מונעת מאפליקציה יחידה להשתמש יותר מ-90% משטח הדיסק או 50% מצמתי inode.
הטמעה
תכונת המכסה היא חלק מיישום ברירת המחדל של installd
.
installd
משתמש באופן אוטומטי בתכונת המכסה כאשר הוא מופעל
למערכת קבצים מסוימת. המערכת ממשיכה באופן אוטומטי ובשקיפות
חישוב ידני כשתכונת המכסה לא מופעלת או לא נתמכת
התקן בלוקים הנמדד.
כדי להפעיל תמיכה במכסות במכשיר בלוקים מסוים:
- מפעילים את
CONFIG_QUOTA
,CONFIG_QFMT_V2
ואת אפשרויות ליבה (kernel) שלCONFIG_QUOTACTL
. - מוסיפים את האפשרות
quota
למחיצת נתוני המשתמשים ב-fstab file:/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
, והן מופעלות באופן ציבורי
ממשקי API למדידת השימוש בכונן. ממשקי ה-API האלה צפויים להחזיר ערכים נכונים
בלי קשר להפעלה או להשבתה של התמיכה במכסות.
ניפוי באגים
אפליקציית הבדיקה מקצה בקפידה אזורי אחסון בדיסק באמצעות מספרים ראשוניים ייחודיים
בהתאם לגודל. במהלך ניפוי באגים בבדיקות האלה, אפשר להשתמש במדד הזה כדי לקבוע את הסיבה
פערים בנתונים. לדוגמה, אם בדיקה נכשלת דלתא של 11MB,
שיטה Utils.useSpace()
כדי לראות שה-blob בנפח 11MB מאוחסן ב
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