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