حافظه قابل‌پذیرش

‫Android همیشه از لوازم جانبی فضای ذخیره‌سازی خارجی (مثل کارت SD) پشتیبانی کرده است، اما این لوازم جانبی به‌دلیل انتظار ناپایداری آن‌ها و حداقل حفاظت از داده‌ها در فضای ذخیره‌سازی خارجی سنتی، ازنظر تاریخی به ذخیره‌سازی ساده فایل محدود بوده‌اند. Android 6.0 توانایی اتخاذ رسانه ذخیره‌سازی خارجی را برای عمل کردن مانند فضای ذخیره‌سازی داخلی معرفی کرد.

وقتی رسانه فضای ذخیره‌سازی خارجی پذیرفته می‌شود، قالب‌بندی و رمزگذاری می‌شود تا فقط با یک دستگاه Android در هر زمان کار کند. ازآنجایی‌که رسانه به‌شدت با دستگاه Android که آن را پذیرفته است مرتبط است، می‌تواند هم برنامه‌ها و هم داده‌های خصوصی همه کاربران را به‌طور ایمن ذخیره کند.

وقتی کاربران رسانه ذخیره‌سازی جدیدی (مثل کارت SD) را در مکان قابل‌انطباق قرار می‌دهند، Android از آن‌ها می‌پرسد که می‌خواهند از رسانه چگونه استفاده کنند. می‌توانند انتخاب کنند که رسانه را به‌کار بگیرند، که آن را قالب‌بندی و رمزگذاری می‌کند، یا می‌توانند به استفاده از آن به‌همان شکل برای ذخیره ساده فایل ادامه دهند. اگر انتخاب کند که از فضای ذخیره‌سازی مشترک استفاده کند، پلاتفرم پیشنهاد می‌دهد محتوای فضای ذخیره‌سازی مشترک اصلی (معمولاً در /sdcard نصب می‌شود) را به رسانه جدید منتقل کند و فضای ارزشمندی را در فضای ذخیره‌سازی داخلی آزاد کند. برخلاف فضای ذخیره‌سازی سنتی که به‌دلیل استفاده از MBR به ۲ ترابایت محدود است، فضای ذخیره‌سازی قابل‌انطباق از GPT استفاده می‌کند و بنابراین محدودیت فضای ذخیره‌سازی فایل آن حدود ۹ زتابایت است.

برنامه‌ها را فقط زمانی می‌توان در رسانه حافظه قابل‌پذیرش قرار داد که توسعه‌دهنده پشتیبانی را ازطریق مشخصه android:installLocation نشان داده باشد. نصب‌های جدید برنامه‌های پشتیبانی‌شده به‌طور خودکار در دستگاه ذخیره‌سازی با بیشترین فضای آزاد قرار می‌گیرند و کاربران می‌توانند برنامه‌های پشتیبانی‌شده را در برنامه تنظیمات بین دستگاه‌های ذخیره‌سازی جابه‌جا کنند. برنامه‌هایی که به رسانه پذیرفته‌شده منتقل می‌شوند درحالی‌که رسانه خارج می‌شود به‌خاطر می‌مانند و وقتی رسانه دوباره وارد می‌شود برمی‌گردند.

امنیت

پلاتفرم به‌طور تصادفی کلیدهای رمزگذاری برای هر دستگاه پذیرفته‌شده تولید می‌کند و آن‌ها را در حافظه داخلی دستگاه Android ذخیره می‌کند. این کار رسانه پذیرفته‌شده را به‌اندازه فضای ذخیره‌سازی داخلی ایمن می‌کند. کلیدها براساس GUID پارتیشن پذیرفته‌شده با دستگاه‌های پذیرفته‌شده مرتبط می‌شوند.

اگر دستگاه برای استفاده از رمزگذاری مبتنی بر فایل (FBE) در فضای ذخیره‌سازی داخلی پیکربندی شده باشد، فضای ذخیره‌سازی قابل‌انتقال از هر دو نوع رمزگذاری FBE و رمزگذاری ابرداده استفاده می‌کند. درغیراین‌صورت، حافظه قابل‌پذیرش از رمزگذاری کامل دیسک (FDE) استفاده می‌کند.

چیدمان روی دیسک دستگاه پذیرفته‌شده به‌دقت از پارتیشن داده‌های داخلی، ازجمله برچسب‌های SELinux و غیره، تقلید می‌کند. وقتی دستگاه Android از چند کاربر پشتیبانی می‌کند، دستگاه ذخیره‌سازی پذیرفته‌شده نیز از چند کاربر با همان سطح جداسازی فضای ذخیره‌سازی داخلی پشتیبانی می‌کند.

Because the contents of an adopted storage device are strongly tied to the Android device that adopted it, the encryption keys should not be extractable from the parent device, and therefore the storage device can't be mounted elsewhere.

اگر دستگاهتان از «رمزگذاری مبتنی بر فایل» استفاده می‌کند، برای اطلاع از نحوه پیکربندی «رمزگذاری مبتنی بر فایل» و رمزگذاری فراداده در حافظه قابل‌پذیرش، به سند «رمزگذاری مبتنی بر فایل» و سند رمزگذاری فراداده مراجعه کنید.

عملکرد و پایداری

فقط رسانه‌های ذخیره‌سازی خارجی در مکان‌های پایدار، مانند شکاف داخل محفظه باتری یا پشت پوشش محافظ، باید برای استفاده درنظر گرفته شوند تا از ازدست رفتن یا خراب شدن تصادفی داده‌ها جلوگیری شود. به‌طور خاص، دستگاه‌های USB متصل به تلفن یا رایانه لوحی هرگز نباید برای پذیرش درنظر گرفته شوند. یک استثنای رایج، درایو USB خارجی متصل به دستگاهی از نوع تلویزیون است، زیرا کل تلویزیون معمولاً در مکانی ثابت نصب می‌شود.

وقتی کاربر دستگاه ذخیره‌سازی جدیدی را می‌پذیرد، پلاتفرم محک‌زنی را اجرا می‌کند و عملکرد آن را با فضای ذخیره‌سازی داخلی مقایسه می‌کند. اگر دستگاه پذیرفته‌شده به‌طور قابل‌توجهی کندتر از فضای ذخیره‌سازی داخلی باشد، پلاتفرم به کاربر درباره تجربه‌ای که احتمالاً تنزل یافته است هشدار می‌دهد. این معیار سنجش از عملکرد واقعی ورودی/خروجی برنامه‌های محبوب Android استخراج شده است. درحال‌حاضر، پیاده‌سازی 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