एरोफ्स

EROFS Linux 4.19 में पेश किया गया एक रीड-ओनली फ़ाइल सिस्टम है। यह संपीड़न और डीडुप्लीकेशन का समर्थन करता है, और पढ़ने के प्रदर्शन के लिए अनुकूलित है।

ईआरओएफएस और अन्य संपीड़ित फाइल सिस्टम के बीच प्राथमिक अंतर यह है कि यह इन-प्लेस डीकंप्रेसन का समर्थन करता है। संपीड़ित डेटा को ब्लॉक के अंत में संग्रहीत किया जाता है, ताकि इसे उसी पृष्ठ पर विघटित किया जा सके। EROFS छवि में, 99% से अधिक ब्लॉक इस योजना का उपयोग करने में सक्षम हैं, इस प्रकार पढ़ने के संचालन के दौरान अतिरिक्त पृष्ठ आवंटित करने की आवश्यकता समाप्त हो जाती है।

EROFS छवियों को संपीड़ित करने की आवश्यकता नहीं है। हालाँकि, संपीड़न का उपयोग करते समय, छवियाँ औसतन लगभग 25% छोटी होती हैं। संपीड़न के उच्चतम स्तर पर, छवियाँ 45% तक छोटी हो सकती हैं।

चाहे संपीड़न का उपयोग किया जाए या नहीं, ईआरओएफएस को यादृच्छिक और अनुक्रमिक पहुंच समय दोनों में अन्य फाइल सिस्टम से बेहतर प्रदर्शन करने के लिए दिखाया गया है।

परिवर्तन बनाएँ

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 प्रकार "erofs" है, और आवश्यक एकमात्र माउंट विकल्प "ro" है। EXT4-आधारित GSI छवियों का परीक्षण करने की क्षमता बनाए रखने के लिए, आप /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

यह अधिकतम "पीसीक्लस्टर", या परिवर्तनीय लंबाई ब्लॉक आकार को 262144 बाइट्स पर सेट करता है। संख्या 4096 का गुणज होनी चाहिए। उच्च मूल्यों पर कम रिटर्न होते हैं, और उच्च मान डिवाइस हार्डवेयर के आधार पर पढ़ने के प्रदर्शन को कम कर सकते हैं।

संपीड़न अक्षम करना

डिफ़ॉल्ट रूप से, संपीड़न योजना lz4hc है। संपीड़न को अक्षम करने के लिए, इसका उपयोग करें:

BOARD_EROFS_COMPRESSOR := none

इसे प्रति-विभाजन के आधार पर भी बदला जा सकता है, उदाहरण के लिए:

BOARD_SYSTEMIMAGE_EROFS_COMPRESSOR := none

डिडुप्लीकेशन

EROFS निम्नलिखित ध्वज के साथ डुप्लिकेट ब्लॉक साझा कर सकता है:

BOARD_EROFS_SHARE_DUP_BLOCKS := true

एंड्रॉइड 13 के अनुसार, इस ध्वज का उपयोग करने के लिए संपीड़न को अक्षम किया जाना चाहिए।

ओटीए पर प्रभाव

Android 13 के अनुसार, EROFS वर्चुअल A/B के साथ पूरी तरह से समर्थित है। OTA पैकेज जनरेटर फ़ाइल सिस्टम के भीतर LZ4 स्ट्रीम को समझदारी से डीकंप्रेस करके डेल्टा उत्पन्न करने में सक्षम है। जब तक स्रोत और लक्ष्य बिल्ड दोनों समान LZ4 लाइब्रेरी का उपयोग करते हैं, OTA पैकेज आकार में EXT4-आधारित OTA के बराबर होगा। भले ही src/dst बिल्ड समान lz4 लाइब्रेरी का उपयोग न करें, इसका OTA आकार पर केवल मामूली प्रभाव होना चाहिए।