EROFS

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