EROFS

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.