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-обновления.