EROFS یک سیستم فایل فقط خواندنی است که در لینوکس ۴.۱۹ معرفی شد. این سیستم از فشردهسازی و حذف دادههای تکراری پشتیبانی میکند و برای عملکرد خواندن بهینه شده است.
تفاوت اصلی بین 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 است و تنها گزینه مورد نیاز برای 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 یا اندازه بلوک با طول متغیر را روی ۲۶۲۱۴۴ بایت تنظیم میکند. این عدد باید مضربی از ۴۰۹۶ باشد. در مقادیر بالاتر، بازده نزولی وجود دارد و مقادیر بالاتر میتوانند بسته به سختافزار دستگاه، عملکرد خواندن را کاهش دهند.
غیرفعال کردن فشردهسازی
به طور پیشفرض، طرح فشردهسازی lz4hc است. برای غیرفعال کردن فشردهسازی، از دستور زیر استفاده کنید:
BOARD_EROFS_COMPRESSOR := none
این را میتوان برای هر پارتیشن نیز تغییر داد، برای مثال:
BOARD_SYSTEMIMAGE_EROFS_COMPRESSOR := none
حذف دادههای تکراری
EROFS میتواند بلوکهای تکراری را با پرچم زیر به اشتراک بگذارد:
BOARD_EROFS_SHARE_DUP_BLOCKS := true
از اندروید ۱۳، برای استفاده از این پرچم، فشردهسازی باید غیرفعال باشد.
تأثیر بر OTAها
از اندروید ۱۳، EROFS به طور کامل با Virtual A/B پشتیبانی میشود. مولد بسته OTA میتواند با خارج کردن هوشمند جریانهای LZ4 در سیستم فایل، دلتا تولید کند. تا زمانی که هر دو نسخه مبدا و مقصد از کتابخانه LZ4 یکسانی استفاده کنند، بسته OTA از نظر اندازه با یک OTA مبتنی بر EXT4 قابل مقایسه است. حتی اگر نسخههای src یا dst از کتابخانه LZ4 یکسانی استفاده نکنند، این موضوع فقط تأثیر جزئی بر اندازه OTA خواهد داشت.