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