EROFS

EROFS es un sistema de archivos de solo lectura que se introdujo en Linux 4.19. Admite la compresión y la anulación de duplicación, y está optimizado para el rendimiento de lectura.

La diferencia principal 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 se puedan descomprimir en la misma página. En una imagen de EROFS, más del 99% de los bloques pueden usar este esquema, lo que elimina la necesidad de asignar páginas adicionales durante las operaciones de lectura.

Las imágenes de EROFS no tienen que estar comprimidas. Sin embargo, cuando se usa la compresión, las imágenes son 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 se use compresión o no, se demostró que EROFS supera a otros sistemas de archivos en los tiempos de acceso aleatorio y secuencial.

Cambios en la compilación

Para habilitar EROFS, usa 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 fstab es erofs y la única opción de activación necesaria es ro. Para mantener la capacidad de probar imágenes de GSI basadas en EXT4, puedes usar dos entradas de 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 puede aumentarse de forma significativa mediante la habilitación de bloques de longitud variable. Esto se puede configurar con la siguiente marca:

BOARD_EROFS_PCLUSTER_SIZE := 262144

Esto establece el PCLUSTER máximo, o el tamaño de bloque de longitud variable, en 2,621,440 bytes. El número debe ser un múltiplo de 4,096. Los rendimientos disminuyen a medida que aumentan los valores, y estos pueden reducir el rendimiento de lectura según el hardware del dispositivo.

Inhabilita la compresión

De forma predeterminada, el esquema de compresión es lz4hc. Para inhabilitar la compresión, usa lo siguiente:

BOARD_EROFS_COMPRESSOR := none

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

BOARD_SYSTEMIMAGE_EROFS_COMPRESSOR := none

Anulación de duplicación

EROFS puede compartir bloques duplicados con la siguiente marca:

BOARD_EROFS_SHARE_DUP_BLOCKS := true

A partir de Android 13, se debe inhabilitar la compresión para usar esta marca.

Impacto en las OTA

A partir de Android 13, EROFS es totalmente compatible con A/B virtual. El generador de paquetes OTA puede generar deltas descomprimiendo de forma inteligente las transmisiones LZ4 dentro del sistema de archivos. Siempre que las compilaciones de origen y destino usen la misma biblioteca de LZ4, el paquete OTA es comparable en tamaño con un OTA basado en EXT4. Incluso si las compilaciones de src o dst no usan la misma biblioteca de LZ4, solo debería tener un impacto menor en el tamaño de OTA.