MỐC TĂNG

EROFS là một hệ thống tệp chỉ có thể đọc được giới thiệu trong Linux 4.19. Định dạng này hỗ trợ tính năng nén và loại bỏ trùng lặp, đồng thời được tối ưu hoá cho hiệu suất đọc.

Điểm khác biệt chính giữa EROFS và các hệ thống tệp nén khác là EROFS hỗ trợ giải nén tại chỗ. Dữ liệu nén sẽ được lưu trữ ở cuối các khối để người dùng 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 lược đồ này, nhờ đó loại bỏ nhu cầu phân bổ thêm các trang trong quá trình đọc.

Hình ảnh EROFS không cần phải nén. Tuy nhiên, khi 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 hiệu quả 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 các 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

thay đổi fstab

Loại fstab là erofs và tuỳ chọn gắn duy nhất cần thiết là ro. Để duy trì khả năng kiểm thử 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. Bạn có thể tăng đáng kể hiệu quả nén bằng cách bật các khối có độ dài biến đổi. Bạn có thể định cấu hình điều này bằng cờ sau:

BOARD_EROFS_PCLUSTER_SIZE := 262144

Thao tác này sẽ đặt PCLUSTER tối đa hoặc kích thước khối có độ dài biến thành 262144 byte. Số này phải là bội số của 4096. Hiệu suất sẽ giảm dần ở các giá trị cao hơn và các giá trị cao hơn có thể làm giảm hiệu suất đọc tuỳ thuộc vào phần cứng thiết bị.

Tắt tính năng nén

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

BOARD_EROFS_COMPRESSOR := none

Bạn cũng có thể thay đổi giá trị này trên mỗi phân vùng, ví dụ:

BOARD_SYSTEMIMAGE_EROFS_COMPRESSOR := none

Loại bỏ trùng lặp

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

BOARD_EROFS_SHARE_DUP_BLOCKS := true

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

Ảnh hưởng đến OTA

Kể từ Android 13, EROFS được hỗ trợ đầy đủ bằng Virtual A/B. Trình tạo gói OTA có thể tạo delta bằng cách giải nén thông minh các luồng LZ4 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, thì gói OTA có kích thước tương đương với gói OTA dựa trên EXT4. Ngay cả khi bản dựng src hoặc dst không sử dụng cùng một thư viện LZ4, thì điều này chỉ ảnh hưởng nhỏ đến kích thước OTA.