EROFS

EROFS – это файловая система, доступная только для чтения, которая появилась в Linux 4.19. Он поддерживает сжатие и дедупликацию, а также оптимизирован для чтения.

Основное отличие EROFS от других сжатых файловых систем заключается в том, что она поддерживает распаковку на месте. Сжатые данные хранятся в конце блоков, чтобы их можно было распаковать на той же странице. В образе EROFS более 99% блоков могут использовать эту схему, поэтому при операциях чтения не нужно выделять дополнительные страницы.

Образы EROFS не обязательно сжимать. При использовании сжатия размер изображений в среднем уменьшается на 25 %. При максимальном уровне сжатия размер изображений может уменьшиться на 45 %.

При использовании сжатия или без него EROFS превосходит другие файловые системы по времени случайного и последовательного доступа.

Изменения в сборке

Чтобы включить EROFS, используйте тип файловой системы erofs в BoardConfig.mk. Пример:

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

изменения в fstab;

Тип fstab – erofs, а единственный необходимый параметр монтирования – ro. Чтобы сохранить возможность тестирования образов GSI на основе EXT4, вы можете использовать две записи fstab для /system..

Пример:

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

Настройка сжатия

По умолчанию EROFS сжимает данные в блоки фиксированного размера. Эффективность сжатия можно значительно повысить, включив блоки переменной длины. Это можно настроить с помощью следующего флага:

BOARD_EROFS_PCLUSTER_SIZE := 262144

В результате максимальный размер блока переменной длины (PCLUSTER) будет равен 262 144 байтам. Число должно быть кратно 4096. При более высоких значениях эффективность снижается, а при очень высоких может ухудшиться производительность чтения в зависимости от аппаратного обеспечения устройства.

Как отключить сжатие

По умолчанию используется схема сжатия lz4hc. Чтобы отключить сжатие, используйте следующий код:

BOARD_EROFS_COMPRESSOR := none

Это также можно изменить для каждого раздела, например:

BOARD_SYSTEMIMAGE_EROFS_COMPRESSOR := none

Дедупликация

EROFS может использовать дублирующиеся блоки со следующим флагом:

BOARD_EROFS_SHARE_DUP_BLOCKS := true

В Android 13 и более поздних версиях для использования этого флага необходимо отключить сжатие.

Влияние на онлайн-турагентства

В Android 13 появилась полная поддержка EROFS с виртуальным разделом A/B. Генератор пакетов OTA может создавать дельты, интеллектуально распаковывая потоки LZ4 в файловой системе. Если в исходной и целевой сборках используется одна и та же библиотека LZ4, размер OTA-пакета будет сопоставим с размером OTA-пакета на основе EXT4. Даже если в сборках src и dst не используется одна и та же библиотека LZ4, это должно лишь незначительно повлиять на размер OTA-обновления.