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 sont capables d'utiliser ce schéma, éliminant ainsi la nécessité 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, la taille des images peut atteindre 45 %.
Que vous utilisiez la compression ou non, il a été démontré qu'EROFS surpassait les autres systèmes de fichiers en termes de 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 pouvoir continuer à tester les 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
Réglage 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. Vous pouvez configurer ce paramètre à l'aide de l'indicateur suivant:
BOARD_EROFS_PCLUSTER_SIZE := 262144
Cela définit la valeur PCLUSTER
maximale, ou taille de bloc de longueur variable, sur 262 144 octets. Le nombre doit être un multiple de 4 096. Les retours diminuent pour les 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ésactiver la compression
Par défaut, le schéma de compression est lz4hc
. Pour désactiver la compression, utilisez:
BOARD_EROFS_COMPRESSOR := none
Vous pouvez également modifier ce paramètre par 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
À partir d'Android 13, la compression doit être désactivée pour utiliser cet indicateur.
Impact sur les OTA
À partir d'Android 13, EROFS est entièrement compatible avec Virtual A/B. Le générateur de packages OTA peut générer des deltas en décompressant intelligemment les flux LZ4 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'un OTA basé 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.