Android一直支援外部儲存配件(例如SD卡),但這些配件歷史上僅限於簡單的檔案儲存,因為它們預期的無常性和對傳統外部儲存提供的最小資料保護。 Android 6.0引入了採用外部儲存介質作為內部儲存的能力。
當採用外部儲存介質時,它的格式和加密功能只能在一個Android裝置上同時使用。因為媒體與採用它的Android裝置密切相關,所以它可以安全地為所有使用者儲存應用和私人資料。
當使用者在可接受的位置插入新的儲存介質(如SD卡)時,Android會詢問他們如何使用介質。他們可以選擇採用格式化和加密的媒體,或者它們可以繼續使用它來簡單的檔案儲存。如果他們選擇採用,平臺提供將主共享儲存內容(通常安裝在/ sdcard)遷移到新採用的介質,釋放內部儲存上的寶貴空間。與傳統儲存(由於使用MBR而限制為2TB)不同,可採用的儲存使用GPT,因此檔案儲存限制為〜9ZB。
只有當開發人員通過android:installLocation
屬性指示支援時,應用程式才能放置在所採用的儲存介質上。新安裝的受支援應用程式會自動放置在具有最大可用空間的儲存裝置上,使用者可以在“設定”應用程式的儲存裝置之間移動受支援的應用程式。在媒體彈出時,移動到已採用媒體的應用程式會被記住,並在重新插入媒體時返回。
安全性
平臺為每個所採用的裝置隨機生成加密金鑰,並且該金鑰儲存在Android裝置的內部儲存器上。這有效地使所採用的媒體與內部儲存一樣安全。基於所採用的分割槽GUID,金鑰與所採用的裝置相關聯。採用的裝置使用配置了aes-cbc-essiv:sha256演算法和128位金鑰大小的dm-crypt進行加密
採用的裝置的磁碟佈局緊密地反映了內部資料分割槽,包括SELinux標籤等。當Android裝置上支援多使用者時,所採用的儲存裝置還支援與內部資料隔離相同級別的多使用者儲存。
由於所採用的儲存裝置的內容與採用該儲存裝置的Android裝置密切相關,所以加密金鑰不應該從主裝置提取,因此儲存裝置不能安裝在其他地方。
效能和穩定性
只有在穩定位置的外部儲存介質(例如電池盒內的插槽或保護蓋後面)才應考慮採用,以幫助避免意外的資料丟失或損壞。特別是,連線到手機或平板電腦的USB裝置不應被視為採用。一個常見的例外是連線到電視型裝置的外部USB驅動器,因為整個電視機通常安裝在穩定的位置。
當使用者採用新的儲存裝置時,平臺執行基準並將其效能與內部儲存進行比較。 如果所採用的裝置明顯慢於內部儲存,則平臺向使用者警告可能惡化的體驗。這個基準來源於流行的Android應用程式的實際I/O
行為。目前,AOSP實現將僅警告使用者超過單個閾值,但裝置製造商可以進一步適應這一點,例如,如果卡非常慢,則完全拒絕採用。
所採用的裝置必須使用支援POSIX許可權和擴充套件屬性(如ext4或f2fs)的檔案系統進行格式化。 為了獲得最佳效能,建議將f2fs檔案系統用於基於快閃記憶體的儲存裝置。
當執行定期空閒維護時,平臺向已採用介質釋出FI_TRIM
,就像對內部儲存一樣。 當前SD卡規範不支援DISCARD
命令;但是核心改為回退到ERASE
命令,其中SD卡韌體可以選擇用於優化目的。