Android همیشه از لوازم جانبی ذخیرهسازی خارجی (مانند کارتهای SD) پشتیبانی میکند، اما این لوازم جانبی از لحاظ تاریخی به ذخیرهسازی فایلهای ساده محدود میشدند، زیرا انتظار میرفت ناپایدار و حداقل حفاظت از دادهها برای حافظه خارجی سنتی ارائه میشد. اندروید 6.0 قابلیت استفاده از رسانههای ذخیرهسازی خارجی را معرفی کرد تا مانند حافظه داخلی عمل کند.
وقتی رسانه ذخیرهسازی خارجی مورد استفاده قرار میگیرد، فرمت و رمزگذاری میشود تا فقط با یک دستگاه اندرویدی در یک زمان کار کند. از آنجایی که رسانه به شدت به دستگاه اندرویدی که آن را پذیرفته است وابسته است، میتواند با خیال راحت برنامهها و دادههای خصوصی را برای همه کاربران ذخیره کند.
وقتی کاربران رسانه های ذخیره سازی جدیدی (مانند کارت SD) را در مکانی قابل قبول قرار می دهند، اندروید از آنها می پرسد که چگونه می خواهند از رسانه استفاده کنند. آنها میتوانند رسانه را انتخاب کنند، که آن را قالببندی و رمزگذاری میکند، یا میتوانند به استفاده از آن برای ذخیرهسازی فایل ساده ادامه دهند. اگر آنها تصمیم به پذیرش بگیرند، پلتفرم پیشنهاد میکند که محتویات ذخیرهسازی مشترک اولیه (معمولاً در /sdcard
نصب شده است) به رسانهای که جدیداً پذیرفته شده است، منتقل شود و فضای ارزشمندی را در حافظه داخلی آزاد کند. برخلاف فضای ذخیرهسازی سنتی که به دلیل استفاده از MBR به ۲ ترابایت محدود میشود، فضای ذخیرهسازی قابل پذیرش از GPT استفاده میکند و بنابراین محدودیت ذخیرهسازی فایل ~۹ZB دارد.
برنامهها را تنها زمانی میتوان در رسانه ذخیرهسازی پذیرفته شده قرار داد که توسعهدهنده از طریق ویژگی android:installLocation
پشتیبانی را نشان داده باشد. نصبهای جدید برنامههای پشتیبانیشده بهطور خودکار در دستگاه ذخیرهسازی با بیشترین فضای آزاد قرار میگیرد و کاربران میتوانند برنامههای پشتیبانیشده را بین دستگاههای ذخیرهسازی در برنامه تنظیمات جابهجا کنند. برنامههایی که به رسانههای مورد استفاده منتقل شدهاند، زمانی که رسانه خارج میشوند، به خاطر سپرده میشوند و پس از قرار دادن مجدد رسانه، برمیگردند.
امنیت
این پلتفرم به صورت تصادفی کلیدهای رمزگذاری را برای هر دستگاه مورد قبول تولید می کند و آنها را در حافظه داخلی دستگاه اندروید ذخیره می کند. این به طور موثر رسانه های اتخاذ شده را به اندازه حافظه داخلی ایمن می کند. کلیدها با دستگاه های پذیرفته شده بر اساس GUID پارتیشن پذیرفته شده مرتبط هستند.
اگر دستگاه به گونهای پیکربندی شده است که از رمزگذاری مبتنی بر فایل (FBE) در حافظه داخلی خود استفاده کند، ذخیرهسازی قابل قبول هم از رمزگذاری FBE و هم از رمزگذاری ابرداده استفاده میکند. در غیر این صورت، ذخیره سازی قابل پذیرش از رمزگذاری فول دیسک (FDE) استفاده می کند.
چیدمان روی دیسک دستگاه پذیرفته شده دقیقاً منعکس کننده پارتیشن داده های داخلی، از جمله برچسب های SELinux و غیره است. هنگامی که چند کاربر در دستگاه Android پشتیبانی می شود، دستگاه ذخیره سازی اتخاذ شده نیز از چند کاربر با همان سطح ایزوله سازی داخلی پشتیبانی می کند. ذخیره سازی
از آنجایی که محتویات یک دستگاه ذخیره سازی پذیرفته شده به شدت به دستگاه اندرویدی که آن را پذیرفته است مرتبط است، کلیدهای رمزگذاری نباید از دستگاه والد قابل استخراج باشند و بنابراین دستگاه ذخیره سازی را نمی توان در جای دیگری نصب کرد.
اگر دستگاه شما از FBE استفاده می کند، برای نحوه پیکربندی FBE و رمزگذاری ابرداده در فضای ذخیره سازی قابل قبول، به اسناد FBE و اسناد رمزگذاری فراداده مراجعه کنید.
عملکرد و ثبات
فقط رسانههای ذخیرهسازی خارجی در مکانهای پایدار، مانند شکافی در داخل محفظه باتری یا پشت یک پوشش محافظ، باید برای استفاده در نظر گرفته شوند تا از از دست رفتن یا خرابی تصادفی داده جلوگیری شود. به ویژه، دستگاه های USB متصل به تلفن یا رایانه لوحی هرگز نباید برای پذیرش در نظر گرفته شوند. یک استثنای رایج، یک درایو USB خارجی است که به دستگاهی شبیه تلویزیون متصل است، زیرا کل تلویزیون معمولاً در یک مکان ثابت نصب می شود.
هنگامی که کاربر یک دستگاه ذخیره سازی جدید را می پذیرد، پلت فرم یک معیار را اجرا می کند و عملکرد آن را با حافظه داخلی مقایسه می کند. اگر دستگاه مورد استفاده به طور قابل توجهی کندتر از حافظه داخلی باشد، پلتفرم به کاربر در مورد تجربه احتمالی ضعیف هشدار می دهد. این معیار از رفتار واقعی ورودی/خروجی برنامههای محبوب اندروید گرفته شده است. در حال حاضر، اجرای 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