EROFS est un système de fichiers en lecture seule introduit dans Linux 4.19. Il prend en charge la compression et la déduplication et est optimisé pour les performances de lecture.
La principale différence entre EROFS et les autres systèmes de fichiers compressés est qu'il prend en charge la décompression sur place. Les données compressées sont stockées à la fin des blocs, afin de pouvoir être décompressées dans la même page. Dans une image EROFS, plus de 99 % des blocs sont capables d'utiliser ce schéma, éliminant ainsi le besoin d'allouer des pages supplémentaires lors des opérations de lecture.
Les images EROFS n'ont pas besoin d'être compressées. Cependant, lorsque vous utilisez la compression, les images sont en moyenne environ 25 % plus petites. Aux niveaux de compression les plus élevés, les images peuvent être jusqu'à 45 % plus petites.
Qu'il utilise ou non la compression, il a été démontré qu'EROFS surpasse les autres systèmes de fichiers en termes de temps d'accès aléatoires et séquentiels.
Modifications de construction
Pour activer EROFS, utilisez le type de système de fichiers "erofs" dans BoardConfig.mk
. Par exemple:
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
Changements fstab
Le type fstab est "erofs", et la seule option de montage nécessaire est "ro". Pour conserver la possibilité de tester les images GSI basées sur EXT4, vous pouvez utiliser deux entrées fstab pour /system.
Par exemple:
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
Réglage de la compression
Par défaut, EROFS se compresse en blocs de taille fixe. L'efficacité de la compression peut être considérablement augmentée en permettant des blocs de longueur variable. Ceci peut être configuré par l'indicateur suivant :
BOARD_EROFS_PCLUSTER_SIZE := 262144
Cela définit le "pcluster" maximum, ou taille de bloc de longueur variable, à 262 144 octets. Le nombre doit être un multiple de 4 096. Des rendements décroissants se produisent à des valeurs plus élevées, et des valeurs plus élevées peuvent diminuer les performances de lecture en fonction du matériel de l'appareil.
Désactivation de la compression
Par défaut, le schéma de compression est lz4hc
. Pour désactiver la compression, utilisez :
BOARD_EROFS_COMPRESSOR := none
Cela peut également être modifié pour chaque partition, par exemple :
BOARD_SYSTEMIMAGE_EROFS_COMPRESSOR := none
Déduplication
EROFS peut partager des blocs en double avec l'indicateur suivant :
BOARD_EROFS_SHARE_DUP_BLOCKS := true
Depuis Android 13, la compression doit être désactivée pour utiliser cet indicateur.
Impact sur les OTA
Depuis Android 13, EROFS est entièrement pris en charge avec Virtual A/B. Le générateur de packages OTA est capable de générer des deltas en décompressant intelligemment les flux LZ4 au sein du système de fichiers. Tant que les versions source et cible utilisent la même bibliothèque LZ4, le package OTA sera comparable en taille à un OTA basé sur EXT4. Même si les builds src/dst n'utilisent pas la même bibliothèque lz4, cela ne devrait avoir qu'un impact mineur sur la taille de l'OTA.