EROF

EROFS es un sistema de archivos de solo lectura introducido en Linux 4.19. Admite compresión y deduplicación y está optimizado para el rendimiento de lectura.

La principal diferencia entre EROFS y otros sistemas de archivos comprimidos es que admite la descompresión in situ. Los datos comprimidos se almacenan al final de los bloques, para que puedan descomprimirse en la misma página. En una imagen EROFS, más del 99% de los bloques pueden utilizar este esquema, eliminando así la necesidad de asignar páginas adicionales durante las operaciones de lectura.

No es necesario comprimir las imágenes EROFS. Sin embargo, cuando se utiliza compresión, las imágenes son alrededor de un 25% más pequeñas en promedio. En los niveles más altos de compresión, las imágenes pueden ser hasta un 45% más pequeñas.

Ya sea que use compresión o no, se ha demostrado que EROFS supera a otros sistemas de archivos en tiempos de acceso aleatorio y secuencial.

Cambios de compilación

Para habilitar EROFS, utilice el tipo de sistema de archivos "erofs" en BoardConfig.mk . Por ejemplo:

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

Cambios en fstab

El tipo de fstab es "erofs" y la única opción de montaje necesaria es "ro". Para mantener la capacidad de probar imágenes GSI basadas en EXT4, puede usar dos entradas fstab para /system.

Por ejemplo:

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

Ajuste de compresión

De forma predeterminada, EROFS se comprime en bloques de tamaño fijo. La eficacia de la compresión se puede aumentar significativamente habilitando bloques de longitud variable. Esto se puede configurar mediante la siguiente bandera:

BOARD_EROFS_PCLUSTER_SIZE := 262144

Esto establece el "pcluster" máximo, o tamaño de bloque de longitud variable, en 262144 bytes. El número debe ser múltiplo de 4096. Hay rendimientos decrecientes con valores más altos y los valores más altos pueden disminuir el rendimiento de lectura según el hardware del dispositivo.

Deshabilitar la compresión

De forma predeterminada, el esquema de compresión es lz4hc . Para deshabilitar la compresión, use:

BOARD_EROFS_COMPRESSOR := none

Esto también se puede cambiar por partición, por ejemplo:

BOARD_SYSTEMIMAGE_EROFS_COMPRESSOR := none

Deduplicación

EROFS puede compartir bloques duplicados con la siguiente bandera:

BOARD_EROFS_SHARE_DUP_BLOCKS := true

A partir de Android 13, la compresión debe estar deshabilitada para usar esta bandera.

Impacto en las OTA

A partir de Android 13, EROFS es totalmente compatible con Virtual A/B. El generador de paquetes OTA puede generar deltas descomprimiendo inteligentemente los flujos LZ4 dentro del sistema de archivos. Siempre que tanto la compilación de origen como la de destino utilicen la misma biblioteca LZ4, el paquete OTA será comparable en tamaño a una OTA basada en EXT4. Incluso si las compilaciones src/dst no usan la misma biblioteca lz4, solo debería tener un impacto menor en el tamaño de OTA.