EROFS è un file system di sola lettura introdotto in Linux 4.19. Supporta compressione e deduplicazione ed è ottimizzato per le prestazioni di lettura.
La differenza principale tra EROFS e altri file system compressi è che supporta la decompressione in situ. I dati compressi vengono archiviati al termine blocchi, in modo che possa essere compresso 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 utilizzi la compressione, invece, sono in media più piccole di circa il 25%. Ai livelli di compressione più elevati, possono essere più piccole fino al 45%.
Sia che utilizzi la compressione o meno, è stato dimostrato che EROFS supera le altre nei file system in tempi di accesso sia casuale che sequenziale.
Modifiche 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 FStab
Il tipo di 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
Ottimizzazione della compressione
Per impostazione predefinita, EROFS comprime in blocchi di dimensioni fisse. L'efficacia della compressione può essere è aumentato significativamente grazie all'attivazione di blocchi di lunghezza variabile. Può essere configurato dal seguente flag:
BOARD_EROFS_PCLUSTER_SIZE := 262144
Consente di impostare il valore massimo di PCLUSTER
, o dimensione del blocco di lunghezza variabile, su 262144
byte. Il numero deve essere un multiplo di 4096. I risultati diminuiscono con valori più elevati e questi ultimi possono ridurre le prestazioni di lettura a seconda dell'hardware del dispositivo.
Disattiva compressione
Per impostazione predefinita, lo schema di compressione è lz4hc
. Per disattivare la compressione, utilizza:
BOARD_EROFS_COMPRESSOR := none
Questo 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 il ripristino A/B virtuale. Il generatore di pacchetti OTA può generare delta decomprimendo in modo intelligente gli stream LZ4 all'interno del file system. Purché le build di origine e di destinazione utilizzino
la stessa libreria LZ4, il pacchetto OTA ha dimensioni paragonabili a un
OTA basata su EXT4. Anche se le build src
o dst
non usano la stessa LZ4
di archiviazione, dovrebbe avere un impatto minimo sulle dimensioni delle agenzie di viaggi online.