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 داشته باشد.