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 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.
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 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 fstab
El tipo de 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 se puede incrementar de forma significativa si se habilitan los 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.
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, 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 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 src
o dst
no usan el mismo LZ4
solo debería tener un impacto leve
en el tamaño de OTA.