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, או את גודל הבלוק המשתנה, ל-262,144 בייטים. המספר חייב להיות כפולה של 4096. ככל שהערך גבוה יותר, כך התועלת פוחתת, וערכים גבוהים יותר עלולים לפגוע בביצועי הקריאה, בהתאם לחומרה של המכשיר.

השבתת הדחיסה

כברירת מחדל, סכימת הדחיסה היא lz4hc. כדי להשבית את הדחיסה, משתמשים באפשרות:

BOARD_EROFS_COMPRESSOR := none

אפשר לשנות את זה גם לפי מחיצה, לדוגמה:

BOARD_SYSTEMIMAGE_EROFS_COMPRESSOR := none

ביטול כפילויות

EROFS יכול לשתף בלוקים כפולים עם הדגל הבא:

BOARD_EROFS_SHARE_DUP_BLOCKS := true

החל מ-Android 13, צריך להשבית את הדחיסה כדי להשתמש בדגל הזה.

ההשפעה על עדכוני OTA

החל מגרסה Android 13, יש תמיכה מלאה ב-EROFS עם Virtual A/B. הכלי ליצירת חבילות OTA יכול ליצור דלתא על ידי דחיסה חכמה של הזרמים של LZ4 במערכת הקבצים. כל עוד גרסאות build של המקור וגם היעד משתמשות באותה ספריית LZ4, הגודל של חבילת OTA דומה לגודל OTA שמבוסס על EXT4. גם אם ב-builds של src או dst לא נעשה שימוש באותה ספריית LZ4, ההשפעה על גודל ה-OTA אמורה להיות קטנה.