EROFS

EROFS là hệ thống tệp chỉ đọc được giới thiệu trong Linux 4.19. Nó hỗ trợ nén và chống trùng lặp, đồng thời được tối ưu hóa cho hiệu suất đọc.

Sự khác biệt chính giữa EROFS và các hệ thống tệp nén khác là nó hỗ trợ giải nén tại chỗ. Dữ liệu nén được lưu trữ ở cuối khối để có thể giải nén vào cùng một trang. Trong hình ảnh EROFS, hơn 99% khối có thể sử dụng sơ đồ này, do đó loại bỏ nhu cầu phân bổ các trang bổ sung trong quá trình đọc.

Hình ảnh EROFS không cần phải nén. Tuy nhiên, khi sử dụng tính năng nén, hình ảnh sẽ nhỏ hơn trung bình khoảng 25%. Ở mức nén cao nhất, hình ảnh có thể nhỏ hơn tới 45%.

Cho dù có sử dụng tính năng nén hay không, EROFS đã được chứng minh là hoạt động tốt hơn các hệ thống tệp khác về cả thời gian truy cập ngẫu nhiên và tuần tự.

Xây dựng thay đổi

Để bật EROFS, hãy sử dụng loại hệ thống tệp "erofs" trong BoardConfig.mk . Ví dụ:

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 Thay đổi

Loại fstab là "erofs" và tùy chọn gắn kết duy nhất cần thiết là "ro". Để duy trì khả năng kiểm tra hình ảnh GSI dựa trên EXT4, bạn có thể sử dụng hai mục nhập fstab cho /system.

Ví dụ:

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

Điều chỉnh nén

Theo mặc định, EROFS nén thành các khối có kích thước cố định. Hiệu quả nén có thể được tăng lên đáng kể bằng cách cho phép các khối có độ dài thay đổi. Điều này có thể được cấu hình bằng cờ sau:

BOARD_EROFS_PCLUSTER_SIZE := 262144

Điều này đặt "pcluster" tối đa hoặc kích thước khối có độ dài thay đổi thành 262144 byte. Số phải là bội số của 4096. Có giá trị giảm dần ở giá trị cao hơn và giá trị cao hơn có thể làm giảm hiệu suất đọc tùy thuộc vào phần cứng thiết bị.

Vô hiệu hóa nén

Theo mặc định, sơ đồ nén là lz4hc . Để tắt tính năng nén, hãy sử dụng:

BOARD_EROFS_COMPRESSOR := none

Điều này cũng có thể được thay đổi trên cơ sở từng phân vùng, ví dụ:

BOARD_SYSTEMIMAGE_EROFS_COMPRESSOR := none

Chống trùng lặp

EROFS có thể chia sẻ các khối trùng lặp với cờ sau:

BOARD_EROFS_SHARE_DUP_BLOCKS := true

Kể từ Android 13, tính năng nén phải bị tắt để sử dụng cờ này.

Tác động đến OTA

Kể từ Android 13, EROFS được hỗ trợ đầy đủ với Virtual A/B. Trình tạo gói OTA có thể tạo vùng đồng bằng bằng cách giải nén các luồng LZ4 một cách thông minh trong hệ thống tệp. Miễn là cả bản dựng nguồn và đích đều sử dụng cùng một thư viện LZ4, gói OTA sẽ có kích thước tương đương với OTA dựa trên EXT4. Ngay cả khi các bản dựng src/dst không sử dụng cùng thư viện lz4 thì nó cũng chỉ có tác động nhỏ đến kích thước OTA.