在搭載 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 進行直接儲存空間存取作業,不支援這些受控範圍儲存空間功能。