EROFS

EROFS یک فایل سیستم فقط خواندنی است که در لینوکس 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" است و تنها گزینه mount مورد نیاز "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

از اندروید 13، برای استفاده از این پرچم، فشرده سازی باید غیرفعال باشد.

تاثیر بر OTA ها

از اندروید 13، EROFS به طور کامل با A/B مجازی پشتیبانی می‌شود. مولد پکیج OTA قادر به تولید دلتا با از حالت فشرده خارج کردن هوشمند جریان های LZ4 در سیستم فایل است. تا زمانی که هر دو بیلد منبع و هدف از یک کتابخانه LZ4 استفاده می کنند، بسته OTA از نظر اندازه با OTA مبتنی بر EXT4 قابل مقایسه خواهد بود. حتی اگر بیلدهای src/dst از همان کتابخانه lz4 استفاده نکنند، فقط باید تأثیر جزئی بر اندازه OTA داشته باشد.