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) צריכה להיות קלה בלבד.