EROFS

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

La diferencia principal entre los EROFS y otros sistemas de archivos comprimidos es que admite la descompresión in situ. Los datos comprimidos se almacenan al final del para descomprimirlos 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 para asignar páginas adicionales durante las operaciones de lectura.

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

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

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 fstab

El tipo fstab es erofs y la única opción de activación necesaria es ro. Para que el probar imágenes de GSI basadas en EXT4, puedes 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 puede ser aumentó significativamente habilitando bloques de longitud variable. Puede ser se configura con la siguiente marca:

BOARD_EROFS_PCLUSTER_SIZE := 262144

Esto establece el PCLUSTER máximo, o tamaño de bloque de longitud variable, en 262144. bytes. Debe ser un múltiplo de 4,096. Hay retornos decrecientes en valores más altos y valores más altos pueden disminuir el rendimiento de lectura según el hardware del dispositivo.

Inhabilitar 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, la compresión debe estar inhabilitada para usar esta marca.

Impacto en las OTA

A partir de Android 13, EROFS es totalmente compatible con A/B virtual. El paquete inalámbrico genera deltas mediante la descompresión inteligente del LZ4 transmisiones dentro del sistema de archivos. Siempre y cuando las compilaciones de origen y de destino usen la misma biblioteca LZ4, el tamaño del paquete inalámbrico es comparable en tamaño con un OTA basada en EXT4. Incluso si las compilaciones src o dst no usan el mismo LZ4 solo debería tener un impacto leve en el tamaño de OTA.