淘汰 SDCardFS

如果裝置搭載 Android 11 以上版本,且執行核心版本 5.4 以上版本,系統就會淘汰 SDCardFS。在這種裝置上,VTS 測試不允許掛接列為 SDCardFS 的檔案系統。如果裝置搭載 Android 11 以上版本,但執行核心版本 4.19 以下,仍可繼續使用 SDCardFS,但 Google 不會提供額外支援。

在 SDCardFS 淘汰前,這項功能可控管模擬內部儲存空間和外部 SD 卡的存取權,讓應用程式只能存取與自身相關的資料。此外,它還提供一層不區分大小寫的機制,以及一些額外的儲存空間追蹤功能。

SDCardFS 替代功能

SDCardFS 的替代方案會使用多項 Linux 核心檔案系統功能,達到類似結果。檔案系統會直接處理大小寫不分的問題,因此在大小寫不分的資料夾中,查詢時間幾乎與大小寫區分的資料夾相同,可避免 SDCardFS 中大型資料夾的執行速度變緩慢。SDCardFS 過去會進行配額追蹤,以便快速收集設定的儲存空間資料,現在則改為使用專案配額,從使用者空間設定配額追蹤。在某些對效能要求較高的情況下,目錄會就地繫結掛接。新的 FUSE 實作方式提供限定範圍儲存空間,可直接存取檔案系統,主要用於遮蓋位置資訊。

設定 SD 卡更換功能

如要在搭載 Android 11 以上版本的裝置上,為不含 SDCardFS 的模擬儲存空間啟用專案配額和大小寫摺疊功能,請在 device.mk 檔案中從 emulated_storage.mk 繼承:

$(call inherit-product, $(SRC_TARGET_DIR)/product/emulated_storage.mk)

警告: 在搭載 Android 10 以下版本的裝置上執行這項操作,因為檔案系統原生不區分大小寫,與這類裝置使用的檔案加密設定不相容。因此必須繼續在這些裝置上使用 SDCardFS。

淘汰 SDCardFS 的原因

SDCardFS 遭到淘汰的原因有很多。

穩定性

SDCardFS 有幾個與大小寫區分相關的競爭狀況,以及一些與記憶體不足相關的問題。在大型目錄中,不區分大小寫的查閱作業可能會相當緩慢,因為查閱作業必須走訪下層目錄,才能找到替代大小寫。同時存取上下層檔案系統也可能導致問題。

上游對等性

SDCardFS 需要 VFS 的額外修補程式,才能支援變更繫結掛接的選項。這些修補程式會導致額外工作,以接受這些領域的上游變更。上游元件可以複製 SDCardFS 的功能,解決這個問題。

與 API 功能對等

在舊版 Android 中,範圍儲存空間會限制對特定類型中繼資料的存取權。透過 SDCardFS 直接存取儲存空間不支援這些範圍儲存空間功能。