EROFS 是 Linux 4.19 中引入的唯讀檔案系統。它支援壓縮和重複資料刪除,並針對讀取性能進行了最佳化。
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.
例如:
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 開始,必須停用壓縮才能使用此標誌。
對 OTA 的影響
從 Android 13 開始,虛擬 A/B 完全支援 EROFS。 OTA 套件產生器能夠透過智慧解壓縮檔案系統中的 LZ4 流來產生增量。只要來源建置和目標建置都使用相同的 LZ4 函式庫,OTA 套件的大小將與基於 EXT4 的 OTA 相當。即使 src/dst 建置不使用相同的 lz4 函式庫,它對 OTA 大小的影響也很小。