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
или блока переменной длины равным 262144 байтам. Число должно быть кратно 4096. При более высоких значениях отдача снижается, а более высокие значения могут снизить производительность чтения в зависимости от аппаратного обеспечения устройства.
Отключить сжатие
По умолчанию используется схема сжатия lz4hc
. Чтобы отключить сжатие, используйте:
BOARD_EROFS_COMPRESSOR := none
Это также можно изменить для каждого раздела, например:
BOARD_SYSTEMIMAGE_EROFS_COMPRESSOR := none
Дедупликация
EROFS может совместно использовать повторяющиеся блоки со следующим флагом:
BOARD_EROFS_SHARE_DUP_BLOCKS := true
Начиная с Android 13, для использования этого флага необходимо отключить сжатие.
Влияние на OTA
Начиная с Android 13, EROFS полностью поддерживается Virtual A/B. Генератор пакетов OTA может генерировать дельты путем интеллектуальной распаковки потоков LZ4 в файловой системе. Пока и исходная, и целевая сборки используют одну и ту же библиотеку LZ4, пакет OTA сопоставим по размеру с пакетом OTA на основе EXT4. Даже если сборки src
или dst
не используют одну и ту же библиотеку LZ4, это лишь незначительно повлияет на размер OTA.