EROFS è un file system di sola lettura introdotto in Linux 4.19. Supporta la compressione e la deduplicazione ed è ottimizzato per le prestazioni di lettura.
La differenza principale tra EROFS e altri file system compressi è che supporta la decompressione in loco. I dati compressi vengono archiviati alla fine dei blocchi, in modo che possano essere decompressi nella stessa pagina. In un'immagine EROFS, più del 99% dei blocchi è in grado di utilizzare questo schema, eliminando così la necessità di allocare pagine aggiuntive durante le operazioni di lettura.
Le immagini EROFS non devono essere compresse. Quando si utilizza la compressione, tuttavia, le immagini sono in media più piccole del 25%. Ai livelli di compressione più elevati, le immagini possono essere fino al 45% più piccole.
Indipendentemente dall'utilizzo o meno della compressione, è stato dimostrato che EROFS supera altri file system sia in termini di tempi di accesso casuale che sequenziale.
Modifiche alla build
Per attivare EROFS, utilizza il tipo di file system erofs
in BoardConfig.mk
.
Ad esempio:
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
modifiche a fstab
Il tipo fstab è erofs
e l'unica opzione di montaggio necessaria è ro
. Per mantenere la
possibilità di testare le immagini GSI basate su EXT4, puoi utilizzare due voci fstab per
/system.
Ad esempio:
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
Regolazione della compressione
Per impostazione predefinita, EROFS comprime in blocchi di dimensioni fisse. L'efficacia della compressione può essere aumentata in modo significativo attivando i blocchi di lunghezza variabile. Può essere configurato dal seguente flag:
BOARD_EROFS_PCLUSTER_SIZE := 262144
In questo modo, la dimensione massima del blocco PCLUSTER
o a lunghezza variabile viene impostata su 262144
byte. Il numero deve essere un multiplo di 4096. I rendimenti diminuiscono
con valori più elevati, che possono ridurre le prestazioni di lettura a seconda dell'hardware
del dispositivo.
Disabilita la compressione
Per impostazione predefinita, lo schema di compressione è lz4hc
. Per disattivare la compressione, utilizza:
BOARD_EROFS_COMPRESSOR := none
Questo valore può essere modificato anche in base alla partizione, ad esempio:
BOARD_SYSTEMIMAGE_EROFS_COMPRESSOR := none
Deduplicazione
EROFS può condividere blocchi duplicati con il seguente flag:
BOARD_EROFS_SHARE_DUP_BLOCKS := true
A partire da Android 13, la compressione deve essere disattivata per utilizzare questo flag.
Impatto sulle OTA
A partire da Android 13, EROFS è completamente supportato con Virtual A/B. Il generatore di pacchetti OTA
può generare delta decomprimendo in modo intelligente i flussi LZ4
all'interno del file system. Se sia la build di origine che quella di destinazione utilizzano
la stessa libreria LZ4, le dimensioni del pacchetto OTA sono paragonabili a quelle di un
OTA basato su EXT4. Anche se le build src
o dst
non utilizzano la stessa libreria LZ4, l'impatto sulle dimensioni OTA dovrebbe essere minimo.