可採用的存儲

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 驅動器,因為整個電視通常安裝在穩定的位置。

當使用者採用新的儲存設備時,該平台會執行基準測試並將其效能與內部儲存進行比較。如果所採用的設備明顯慢於內部存儲,平台會警告使用者體驗可能會下降。此基準測試源自於流行 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