SDCardFS 淘汰

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

在停用前,SDCardFS 提供一種方法,可控制對模擬內部儲存空間和外部 SD 卡的存取權,讓應用程式只存取與其相關的資料。此外,它還提供一個不區分大小寫的層級,以及一些額外的儲存空間追蹤功能。

SDCardFS 替代功能

SDCardFS 的替代方案會使用多個 Linux kernel 檔案系統功能,以達到類似的結果。區分大小寫的功能會直接由檔案系統處理,因此在區分大小寫和不區分大小寫的資料夾中,查詢時間幾乎相同,可消除 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 進行直接儲存空間存取作業,不支援這些受控範圍儲存空間功能。