EROFS es un sistema de archivos de solo lectura que se introdujo en Linux 4.19. Es compatible con 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 en el lugar. Los datos comprimidos se almacenan al final de los bloques, de modo 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 comprimirse. 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 la 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 montaje necesaria es ro. Para mantener la capacidad de probar imágenes 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 la compresión
De forma predeterminada, EROFS comprime en bloques de tamaño fijo. La eficacia de la compresión se puede aumentar de manera significativa si se habilitan los 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 262,144 bytes. El número debe ser un múltiplo de 4,096. Hay rendimientos decrecientes en valores más altos, y los 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, se debe inhabilitar la compresión para usar esta marca.
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 mediante la descompresión inteligente de los flujos LZ4 dentro del sistema de archivos. Siempre que las compilaciones de origen y destino usen la misma biblioteca LZ4, el paquete OTA será comparable en tamaño a una OTA basada en EXT4. Incluso si las compilaciones src o dst no usan la misma biblioteca LZ4, solo deberían tener un impacto menor en el tamaño de la OTA.