可採用的存儲

Android一直支持外部存儲配件(例如SD卡),但是由於它們的預期永久性和傳統外部存儲提供的最小數據保護,這些配件歷史上僅限於簡單文件存儲。 Android 6.0引入了採用外部存儲媒體來充當內部存儲的功能。

當採用外部存儲媒體時,其格式和加密方式一次只能與一台Android設備一起使用。由於媒體與採用該媒體的Android設備緊密相關,因此它可以安全地為所有用戶存儲應用和私人數據。

當用戶在可採用的位置插入新的存儲媒體(例如SD卡)時,Android會詢問他們如何使用該媒體。他們可以選擇採用對媒體進行格式化和加密的媒體,也可以繼續按原樣使用該媒體以進行簡單的文件存儲。如果他們選擇採用該平台,則可以將主要共享存儲內容(通常安裝在/sdcard )遷移到新採用的介質上,從而釋放內部存儲上的寶貴空間。與由於使用MBR而將其限制為2TB的傳統存儲不同,可採用的存儲使用GPT ,因此文件存儲限制為〜9ZB。

僅當開發人員通過android:installLocation屬性表明支持時,才能將應用程序放置在採用的存儲介質上。新安裝的受支持應用程序會自動放置在具有最大可用空間的存儲設備上,並且用戶可以在“設置”應用程序中在存儲設備之間移動受支持的應用程序。彈出媒體時,將記住移動到採用的媒體的應用程序,並在重新插入媒體時將其返回。

安全

該平台會為每個採用的設備隨機生成加密密鑰,並將其存儲在Android設備的內部存儲中。這有效地使採用的媒體與內部存儲一樣安全。密鑰基於採用的分區GUID與採用的設備關聯。

如果將設備配置為在其內部存儲上使用基於文件的加密(FBE),則可採用的存儲將同時使用FBE和元數據加密。否則,可採用的存儲將使用全盤加密(FDE)。

所採用設備的磁盤佈局緊密反映了內部數據分區,包括SELinux標籤等。當Android設備上支持多用戶時,所採用的存儲設備還支持多用戶,其隔離級別與內部設備相同。貯存。

由於採用的存儲設備的內容與採用該存儲設備的Android設備緊密相關,因此不應從父設備中提取加密密鑰,因此無法將存儲設備安裝在其他位置。

如果您的設備使用FBE,請參閱FBE文檔元數據加密文檔,以了解如何在可採用的存儲上配置FBE和元數據加密。

性能穩定

僅應考慮採用處於穩定位置的外部存儲介質,例如電池倉內或保護蓋後面的插槽,以幫助避免意外的數據丟失或損壞。特別是,絕不應考慮將連接到手機或平板電腦的USB設備用作USB設備。一個常見的例外是連接到電視式設備的外部USB驅動器,因為整個電視通常安裝在穩定的位置。

當用戶採用新的存儲設備時,平台將運行基準測試並將其性能與內部存儲進行比較。如果採用的設備明顯比內部存儲慢,則平台會警告用戶可能會降低體驗。該基準來自流行的Android應用程序的實際I / O行為。當前,AOSP實施僅會警告用戶超過單個閾值,但是設備製造商可能會對此做出進一步調整,例如,如果卡非常慢,則完全拒絕採用。

採用的設備必須使用支持POSIX權限和擴展屬性的文件系統進行格式化,例如ext4f2fs 。為了獲得最佳性能,建議將f2fs文件系統用於基於閃存的存儲設備。

當執行定期的空閒維護時,平台會像對內部存儲一樣,將FI_TRIM給所採用的介質。當前的SD卡規格不支持DISCARD命令。但是內核會轉而使用ERASE命令,SD卡固件可以選擇使用該命令進行優化。

測驗

要測試可採用的存儲是否正常運行,請運行以下CTS測試:

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

要在設備沒有內置插槽或將USB連接器用於活動adb連接時驗證USB驅動器和SD卡的行為,請使用:

adb shell sm set-virtual-disk true