EROFS

EROFS est un système de fichiers en lecture seule introduit dans Linux 4.19. Il est compatible avec 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 qu'elles puissent être décompressées sur la même page. Dans une image EROFS, plus de 99 % des blocs peuvent utiliser ce schéma, ce qui élimine le besoin d'allouer des pages supplémentaires lors des opérations de lecture.

Les images EROFS ne doivent pas être compressées. Toutefois, lorsque vous utilisez la compression, les images sont en moyenne 25 % plus petites. Aux niveaux de compression les plus élevés, les images peuvent être réduites de 45 %.

Que l'on utilise ou non la compression, EROFS s'est avéré être plus performant que les autres systèmes de fichiers aux temps d'accès aléatoire et séquentiel.

Modifications de la compilation

Pour activer EROFS, utilisez le type de système de fichiers erofs dans BoardConfig.mk. 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

Modifications apportées à fstab

Le type fstab est erofs, et la seule option d'installation requise est ro. Pour que le test des images GSI basées sur EXT4, vous pouvez utiliser deux entrées fstab pour /system.

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

Optimisation de la compression

Par défaut, EROFS compresse les données dans des blocs de taille fixe. L'efficacité de la compression peut être considérablement améliorée en activant les blocs de longueur variable. Il peut s'agir configurée par l'indicateur suivant:

BOARD_EROFS_PCLUSTER_SIZE := 262144

Cela définit la taille de bloc (PCLUSTER) maximale (ou taille de bloc de longueur variable) sur 262 144. octets. Ce nombre doit être un multiple de 4 096. Les rendements diminuent à des valeurs plus élevées, et ces valeurs peuvent réduire les performances de lecture en fonction du matériel de l'appareil.

Désactiver la compression

Par défaut, le schéma de compression est lz4hc. Pour désactiver la compression, utilisez:

BOARD_EROFS_COMPRESSOR := none

Ce paramètre peut également être modifié pour chaque partition, par exemple:

BOARD_SYSTEMIMAGE_EROFS_COMPRESSOR := none

Déduplication

EROFS peut partager des volumes en double à l'aide de l'indicateur suivant:

BOARD_EROFS_SHARE_DUP_BLOCKS := true

À partir d'Android 13, la compression doit être désactivée pour utiliser cet indicateur.

Impact pour les agences de voyages en ligne

À partir d'Android 13, EROFS est entièrement compatible avec Virtual A/B. Package OTA peut générer des deltas en décompressant intelligemment dans le système de fichiers. Tant que les builds source et cible utilisent la même bibliothèque LZ4, la taille du package OTA est comparable à celle d’une OTA basée sur EXT4. Même si les builds src ou dst n'utilisent pas la même bibliothèque LZ4, cela ne devrait avoir qu'un impact mineur sur la taille de l'OTA.