EROFS

EROFS는 Linux 4.19에서 도입된 읽기 전용 파일 시스템입니다. 압축 및 중복 삭제 기능을 지원하며 읽기 성능을 최적화하였습니다.

EROFS와 다른 압축 파일 시스템의 주요 차이점은 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.에 두 개의 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', 즉, 가변 길이 블록 크기가 262,144바이트로 설정됩니다. 이 숫자는 4,096의 배수여야 합니다. 더 높은 값에서는 반환 값이 줄어들고 값이 클수록 기기 하드웨어에 따라 읽기 성능이 저하될 수 있습니다.

압축 사용 중지

기본적으로 압축 스키마는 lz4hc입니다. 압축을 사용 중지하려면 다음을 사용합니다.

BOARD_EROFS_COMPRESSOR := none

다음과 같이 파티션별로도 변경할 수 있습니다.

BOARD_SYSTEMIMAGE_EROFS_COMPRESSOR := none

중복 삭제

EROFS는 다음 플래그를 사용하여 중복 블록을 공유할 수 있습니다.

BOARD_EROFS_SHARE_DUP_BLOCKS := true

Android 13부터는 이 플래그를 사용하려면 압축을 사용 중지해야 합니다.

OTA에 미치는 영향

Android 13부터 EROFS는 가상 A/B로 완벽하게 지원됩니다. OTA 패키지 생성기는 파일 시스템 내에서 LZ4 스트림을 지능적으로 압축 해제하여 델타를 생성할 수 있습니다. 소스 빌드와 타겟 빌드가 모두 동일한 LZ4 라이브러리를 사용하는 한 OTA 패키지 크기는 EXT4 기반 OTA와 거의 비슷합니다. src/dst 빌드가 동일한 lz4 라이브러리를 사용하지 않더라도 OTA 크기에 거의 영향이 없어야 합니다.