EROFS

EROFS یک سیستم فایل فقط خواندنی است که در Linux 4.19 معرفی شده است. از فشرده‌سازی و حذف داده‌های تکراری پشتیبانی می‌کند و برای عملکرد خواندن بهینه‌سازی شده است.

تفاوت اصلی بین EROFS و دیگر سیستم‌های فایل فشرده این است که از وافشردگی درجا پشتیبانی می‌کند. داده‌های فشرده در انتهای بلوک‌ها ذخیره می‌شود تا بتواند در همان صفحه از حالت فشرده خارج شود. در تصویر EROFS، بیش‌از ۹۹٪ از بلوک‌ها می‌توانند از این طرح استفاده کنند، بنابراین نیاز به اختصاص دادن صفحه‌های اضافی درطول عملیات خواندن را ازبین می‌برد.

تصاویر EROFS نباید فشرده شوند. بااین‌حال، هنگام استفاده از فشرده‌سازی، تصاویر به‌طور میانگین ۲۵٪ کوچک‌تر می‌شوند. در بالاترین سطوح فشرده‌سازی، تصاویر می‌توانند تا ۴۵٪ کوچک‌تر شوند.

چه از فشرده‌سازی استفاده شود چه نشود، نشان داده شده است که 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، یا اندازه بلوک با طول متغیر، را روی ۲۶۲۱۴۴ بایت تنظیم می‌کند. این عدد باید مضربی از ۴۰۹۶ باشد. در مقادیر بالاتر، بازدهی کاهش می‌یابد و مقادیر بالاتر می‌تواند عملکرد خواندن را بسته به سخت‌افزار دستگاه کاهش دهد.

غیرفعال کردن فشرده‌سازی

به‌طور پیش‌فرض، طرح فشرده‌سازی 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 خواهد داشت.