EROFS

EROFS là một hệ thống tệp chỉ đọc được giới thiệu trong Linux 4.19. Nó hỗ trợ nén và loại bỏ dữ liệu 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 được lưu trữ ở cuối các khối để có thể giải nén vào cùng một trang. Trong hình ảnh EROFS, hơn 99% các khối có thể sử dụng sơ đồ này, do đó, bạn không cần phân bổ thêm các trang trong quá trình đọc.

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

Dù có sử dụng tính năng nén hay không, EROFS vẫn cho thấy hiệu suất vượt trội so với 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

các thay đổi về fstab

Loại fstab là erofs và lựa chọn gắn kết 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 2 mục 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 thay đổi. Bạn có thể định cấu hình chế độ này bằng cờ sau:

BOARD_EROFS_PCLUSTER_SIZE := 262144

Thao tác 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ố này phải là bội số của 4096. Có những lợi ích 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 của thiết bị.

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

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

BOARD_EROFS_COMPRESSOR := none

Bạn cũng có thể thay đổi chế độ này theo từng 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.

Tác động đối với 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 các 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à bản dựng đí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 một OTA dựa trên EXT4. Ngay cả khi các bản dựng src hoặc dst không dùng cùng một thư viện LZ4, thì điều này cũng chỉ có tác động nhỏ đến kích thước OTA.