EROFS 是 Linux 4.19 中推出的唯讀檔案系統。這類資料集支援壓縮和去重作業,並針對讀取效能進行最佳化。
EROFS 和其他壓縮檔案系統之間的主要差異在於,它支援就地解壓縮。壓縮後的資料會儲存在區塊末端,因此可將其解壓縮至同一個頁面。在 EROFS 映像檔中,超過 99% 的區塊都能使用此配置,因此在讀取作業期間不需要分配額外的頁面。
EROFS 圖片不必經過壓縮。不過,使用壓縮功能時,圖片的平均大小會縮小約 25%。在最高壓縮等級下,圖片大小可縮小至原來的 45%。
無論是否使用壓縮,EROFS 都經過證實,在隨機和依序存取兩種情況下,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 起,虛擬 A/B 已全面支援 EROFS。OTA 套件產生器可透過在檔案系統中,以智慧方式解壓縮 LZ4 串流,產生差異。只要來源和目標版本都使用相同的 LZ4 程式庫,OTA 套件的大小就會與以 EXT4 為基礎的 OTA 相近。即使 src
或 dst
版本未使用相同的 LZ4 程式庫,OTA 大小也只會受到輕微影響。