אחסון ניתן לאימוץ

אנדרואיד תמיד תמכה באביזרי אחסון חיצוניים (כגון כרטיסי SD), אך אביזרים אלה הוגבלו היסטורית לאחסון קבצים פשוט, בשל ארעיותם הצפויה וההגנה המינימלית על הנתונים המוצעת לאחסון חיצוני מסורתי . אנדרואיד 6.0 הציגה את היכולת לאמץ מדיית אחסון חיצונית לפעול כמו אחסון פנימי.

כאשר מאמצים מדיית אחסון חיצונית, היא מעוצבת ומוצפנת כך שתעבוד רק עם מכשיר אנדרואיד בודד בכל פעם. מכיוון שהמדיה קשורה מאוד למכשיר האנדרואיד שאימץ אותה, היא יכולה לאחסן בבטחה גם אפליקציות וגם נתונים פרטיים עבור כל המשתמשים.

כאשר משתמשים מכניסים מדיית אחסון חדשה (כגון כרטיס SD) במיקום שניתן לאמץ, אנדרואיד שואלת אותם כיצד הם רוצים להשתמש במדיה. הם יכולים לבחור לאמץ את המדיה, שמעצבת ומצפינה אותה, או שהם יכולים להמשיך להשתמש בה כפי שהיא לאחסון קבצים פשוט. אם הם בוחרים לאמץ, הפלטפורמה מציעה להעביר את תוכן האחסון המשותף הראשי (בדרך כלל מותקן ב- /sdcard ) למדיה שאומצה לאחרונה, ולפנות מקום יקר באחסון הפנימי. בניגוד לאחסון המסורתי, שמוגבל ל-2TB עקב השימוש שלו ב- MBR , אחסון שניתן לאמץ משתמש ב-GPT ולכן יש לו מגבלת אחסון קבצים של ~9ZB.

ניתן למקם אפליקציות במדיית אחסון מאומצת רק כאשר המפתח ציין תמיכה באמצעות התכונה android:installLocation . התקנות חדשות של אפליקציות נתמכות ממוקמות אוטומטית במכשיר האחסון עם הכי הרבה מקום פנוי, ומשתמשים יכולים להעביר אפליקציות נתמכות בין התקני אחסון באפליקציית ההגדרות . אפליקציות המועברות למדיה מאומצת נזכרות בזמן שהמדיה נפלטת, וחוזרות כאשר המדיה מוכנסת מחדש.

בִּטָחוֹן

הפלטפורמה מייצרת באופן אקראי מפתחות הצפנה עבור כל מכשיר מאומץ ומאחסנת אותם באחסון הפנימי של מכשיר האנדרואיד. זה הופך למעשה את המדיה המאומצת לאבטחה כמו אחסון פנימי. מפתחות משויכים להתקנים מאומצים המבוססים על GUID של המחיצה המאומצת.

אם המכשיר מוגדר להשתמש בהצפנה מבוססת קבצים (FBE) באחסון הפנימי שלו, אז האחסון הניתן לאימוץ משתמש גם בהצפנת FBE וגם בהצפנת מטא נתונים . אחרת, אחסון שניתן לאמץ משתמש בהצפנת דיסק מלא (FDE).

הפריסה בדיסק של המכשיר המאומץ משקפת מקרוב את מחיצת הנתונים הפנימית, כולל תוויות SELinux וכו'. כאשר ריבוי משתמשים נתמך במכשיר האנדרואיד, התקן האחסון המאומץ תומך גם בריבוי משתמשים באותה רמת בידוד כמו פנימית אִחסוּן.

מכיוון שהתוכן של התקן אחסון מאומץ קשור מאוד למכשיר האנדרואיד שאימץ אותו, מפתחות ההצפנה לא אמורים להיות ניתנים לחילוץ ממכשיר האב, ולכן לא ניתן להרכיב את התקן האחסון במקום אחר.

אם המכשיר שלך משתמש ב-FBE, עיין בתיעוד של FBE ובתיעוד של הצפנת מטא נתונים כדי להגדיר את התצורה של FBE והצפנת מטא נתונים באחסון שניתן לאמץ.

ביצועים ויציבות

יש לשקול אימוץ רק אמצעי אחסון חיצוניים במיקומים יציבים, כגון חריץ בתוך תא סוללה או מאחורי כיסוי מגן כדי למנוע אובדן או השחתה בשוגג של נתונים. בפרט, לעולם אין לשקול אימוץ התקני USB המחוברים לטלפון או טאבלט. חריג נפוץ אחד יהיה כונן USB חיצוני המחובר למכשיר בסגנון טלוויזיה, מכיוון שהטלוויזיה כולה מותקנת בדרך כלל במיקום יציב.

כאשר משתמש מאמץ התקן אחסון חדש, הפלטפורמה מפעילה מדד ומשווה את הביצועים שלה מול אחסון פנימי. אם המכשיר שאומץ איטי יותר מאחסון פנימי, הפלטפורמה מזהירה את המשתמש על חוויה שעלולה להיפגע. רף זה נגזר מהתנהגות ה-I/O בפועל של אפליקציות אנדרואיד פופולריות. נכון לעכשיו, הטמעת AOSP רק תזהיר את המשתמשים מעבר לסף בודד, אך יצרני מכשירים עשויים להתאים זאת עוד יותר, כגון דחיית אימוץ לחלוטין אם הכרטיס איטי במיוחד.

התקנים מאומצים חייבים להיות מעוצבים עם מערכת קבצים שתומכת בהרשאות POSIX ותכונות מורחבות, כגון ext4 או f2fs . לביצועים מיטביים, מערכת הקבצים f2fs מומלצת עבור התקני אחסון מבוססי פלאש.

בעת ביצוע תחזוקת סרק תקופתית, הפלטפורמה מנפיקה FI_TRIM למדיה מאומצת בדיוק כפי שהיא עושה לאחסון פנימי. מפרט כרטיס ה-SD הנוכחי אינו תומך בפקודה DISCARD ; אבל הליבה במקום זאת נופלת בחזרה לפקודה ERASE , שבה קושחת כרטיס SD עשויה לבחור להשתמש למטרות אופטימיזציה.

בדיקה

כדי לבדוק שהאחסון הניתן לאימוץ עובד, הפעל את מבחן ה-CTS הזה:

cts-tradefed run commandAndExit cts-dev \
    -m CtsAppSecurityHostTestCases \
    -t android.appsecurity.cts.AdoptableHostTest

כדי לאמת התנהגות של כונני USB וכרטיסי SD כאשר למכשיר אין חריץ מובנה או כאשר מחבר ה-USB משמש לחיבור adb פעיל, השתמש ב:

adb shell sm set-virtual-disk true