EROFS

EROFS 是 Linux 4.19 中導入的唯讀檔案系統。支援壓縮和重複資料刪除,並針對讀取效能進行最佳化。

EROFS 與其他壓縮檔案系統的主要差異在於,EROFS 支援就地解壓縮。壓縮資料會儲存在區塊結尾,因此可以解壓縮到同一頁面。在 EROFS 映像檔中,超過 99% 的區塊都能使用這項配置,因此在讀取作業期間,不需要配置額外頁面。

EROFS 映像檔不必壓縮。不過,使用壓縮功能後,圖片平均會縮小約 25%。壓縮程度最高時,圖片最多可縮小 45%。

無論是否使用壓縮功能,EROFS 在隨機和循序存取時間方面,都優於其他檔案系統。

版本變更

如要啟用 EROFS,請在 BoardConfig.mk 中使用檔案系統類型 erofs。 例如:

BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE := erofs
BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE := erofs
BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE := erofs
BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE := erofs
BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE := erofs
BOARD_SYSTEM_DLKMIMAGE_FILE_SYSTEM_TYPE := erofs

fstab 變更

fstab 類型為 erofs,唯一需要的掛接選項為 ro。如要保留測試 EXT4 型 GSI 映像檔的功能,您可以為 /system. 使用兩個 fstab 項目:

例如:

system    /system    erofs   ro              wait,slotselect,avb=vbmeta_system,logical,first_stage_mount
system    /system    ext4    ro,barrier=1    wait,slotselect,avb=vbmeta_system,logical,first_stage_mount

壓縮微調

根據預設,EROFS 會壓縮成固定大小的區塊。啟用變長區塊可大幅提升壓縮效率。這可透過下列標記設定:

BOARD_EROFS_PCLUSTER_SIZE := 262144

這會將 PCLUSTER 上限或變數長度區塊大小設為 262144 個位元組。該數字必須是 4096 的倍數。值越高,回報的效益就越低,而且值越高,讀取效能就越差 (視裝置硬體而定)。

停用壓縮功能

預設壓縮配置為 lz4hc。如要停用壓縮功能,請使用:

BOARD_EROFS_COMPRESSOR := none

您也可以針對每個分割區變更這項設定,例如:

BOARD_SYSTEMIMAGE_EROFS_COMPRESSOR := none

剔除重複資料

EROFS 可以使用下列標記共用重複的區塊:

BOARD_EROFS_SHARE_DUP_BLOCKS := true

在 Android 13 中,必須停用壓縮功能才能使用這個標記。

對網路旅行社的影響

自 Android 13 起,EROFS 完全支援 Virtual A/B。OTA 套件產生器可以透過智慧解壓縮檔案系統中的 LZ4 串流,產生差異。只要來源和目標版本使用相同的 LZ4 程式庫,OTA 套件的大小就與以 EXT4 為基礎的 OTA 相當。即使 srcdst 建構作業未使用相同的 LZ4 程式庫,對 OTA 大小的影響也應該不大。