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