EROFS, रीड-ओनली फ़ाइल सिस्टम है. इसे Linux 4.19 में लॉन्च किया गया था. यह कंप्रेस करने और डुप्लीकेट कॉपी हटाने की तकनीक के साथ काम करता है. साथ ही, इसे रीड परफ़ॉर्मेंस के लिए ऑप्टिमाइज़ किया गया है.
EROFS और कंप्रेस किए गए अन्य फ़ाइल सिस्टम के बीच मुख्य अंतर यह है कि यह इन-प्लेस डीकंप्रेशन के साथ काम करता है. कंप्रेस किया गया डेटा, ब्लॉक के आखिर में सेव होता है. इससे इसे उसी पेज में अनकंप्रेस किया जा सकता है. EROFS इमेज में, 99% से ज़्यादा ब्लॉक इस स्कीम का इस्तेमाल कर सकते हैं. इसलिए, रीड ऑपरेशन के दौरान, अतिरिक्त पेज जोड़ने की ज़रूरत नहीं होती.
EROFS इमेज को कंप्रेस करना ज़रूरी नहीं है. हालांकि, कंप्रेस करने पर इमेज का साइज़ औसतन 25% कम हो जाता है. कंप्रेशन के सबसे ज़्यादा लेवल पर, इमेज का साइज़ 45% तक कम हो सकता है.
EROFS, कंप्रेस करने पर और कंप्रेस न करने पर, दोनों ही स्थितियों में रैंडम और सीक्वेंशियल ऐक्सेस टाइम के मामले में, अन्य फ़ाइल सिस्टम से बेहतर परफ़ॉर्म करता है.
बिल्ड में किए गए बदलाव
EROFS को चालू करने के लिए, BoardConfig.mk में फ़ाइल सिस्टम टाइप erofs का इस्तेमाल करें.
उदाहरण के लिए:
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 माउंट विकल्प की ज़रूरत होती है. 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, वर्चुअल A/B के साथ पूरी तरह से काम करता है. ओटीए पैकेज जनरेटर, फ़ाइल सिस्टम में LZ4 स्ट्रीम को समझदारी से डीकंप्रेस करके, डेल्टा जनरेट कर सकता है. जब तक सोर्स और टारगेट, दोनों ही बिल्ड में एक ही LZ4 लाइब्रेरी का इस्तेमाल किया जाता है, तब तक ओटीए पैकेज का साइज़, EXT4 पर आधारित ओटीए के साइज़ के बराबर होता है. अगर src या dst बिल्ड में एक ही LZ4 लाइब्रेरी का इस्तेमाल नहीं किया जाता है, तब भी ओटीए के साइज़ पर मामूली असर पड़ना चाहिए.