EROFS

EROFS هو نظام ملفات للقراءة فقط تم تقديمه في Linux 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"، وخيار التثبيت الوحيد المطلوب هو "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

اعتبارًا من Android 13، يجب تعطيل الضغط لاستخدام هذه العلامة.

التأثير على وكالات السفر عبر الإنترنت

اعتبارًا من Android 13، أصبح EROFS مدعومًا بالكامل مع Virtual A/B. منشئ حزم OTA قادر على إنشاء دلتا عن طريق فك ضغط تدفقات LZ4 بذكاء داخل نظام الملفات. طالما أن كلا الإصدارين المصدر والهدف يستخدمان نفس مكتبة LZ4، فستكون حزمة OTA قابلة للمقارنة في الحجم مع OTA المستندة إلى EXT4. حتى لو كانت إصدارات src/dst لا تستخدم نفس مكتبة lz4، فيجب أن يكون لها تأثير بسيط فقط على حجم OTA.