EROFS היא מערכת קבצים לקריאה בלבד שהוצגה ב-Linux 4.19. הוא תומך בדחיסה ובביטול כפילויות, ועבר אופטימיזציה לביצועי קריאה.
ההבדל העיקרי בין EROFS לבין מערכות קבצים דחוסות אחרות הוא התמיכה בביטול דחיסה במקום. נתונים דחוסים מאוחסנים בסוף הבלוקים, כדי שאפשר יהיה לבטל את הדחיסה שלהם באותו דף. בתמונה של EROFS, יותר מ-99% מהבלוקים יכולים להשתמש בסכימה הזו, ולכן אין צורך להקצות דפים נוספים במהלך פעולות קריאה.
אין צורך לדחוס תמונות EROFS. עם זאת, כשמשתמשים בדחיסה, התמונות קטנות יותר בכ-25% בממוצע. ברמות הדחיסה הגבוהות ביותר, התמונות יכולות להיות קטנות ב-45%.
גם אם משתמשים בדחיסה וגם אם לא, הוכח ש-EROFS עדיפה על מערכות קבצים אחרות מבחינת זמני גישה אקראית וסדרתית.
שינויים ב-Build
כדי להפעיל את 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 בייטים. המספר חייב להיות כפולה של 4,096. ההשפעה של ערכים גבוהים יותר פוחתת, וערכים גבוהים יותר יכולים להקטין את ביצועי הקריאה, בהתאם לחומרת המכשיר.
השבתת הדחיסה
כברירת מחדל, ערכת הדחיסה היא 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) צריכה להיות קלה בלבד.