सुपर पार्टिशन का साइज़ तय करना

डिवाइस को अपडेट करने की सुविधा के लिए, super पार्टीशन का साइज़ सही तरीके से तय करना ज़रूरी है. साइज़ से सीधे तौर पर यह पता चलता है कि कोई डिवाइस कितने अपडेट ले सकता है और कितने उपयोगकर्ता उन अपडेट को सफलतापूर्वक इंस्टॉल कर सकते हैं.

कुछ अहम वैरिएबल हैं जिन पर ध्यान देना ज़रूरी है. पहला वैरिएबल फ़ैक्ट्री साइज़ है. यह डिवाइस को पहली बार फ़्लैश करने पर, सभी डाइनैमिक पार्टीशन का साइज़ होता है. दूसरा वैरिएबल ग्रोथ रेट है. यह डिवाइस के अपडेट किए जा सकने की पूरी अवधि में, ओएस के साइज़ में होने वाली बढ़ोतरी का प्रतिशत होता है.

इसके अलावा, वर्चुअल A/B डिवाइस, अपडेट के दौरान /data पर मौजूद स्पेस का इस्तेमाल कर सकते हैं. इसलिए, super का साइज़ तय करते समय इस बात का ध्यान रखना ज़रूरी है. अगर /data पर ज़्यादा स्पेस की ज़रूरत होती है, तो कुछ उपयोगकर्ता अपडेट नहीं कर पाते या अपडेट नहीं करना चाहते. हालांकि, अगर यह पता हो कि ज़्यादातर उपयोगकर्ताओं के पास कुछ प्रतिशत स्पेस खाली है, तो डिवाइस, super से उस स्पेस को आसानी से घटा सकते हैं. इसके अलावा, डिवाइस यह पक्का कर सकते हैं कि /data की कभी ज़रूरत न पड़े. इसके लिए, super का साइज़ इतना बड़ा रखा जा सकता है.

यहां कुछ मॉडल दिए गए हैं. इनकी मदद से, इन वैरिएबल के आधार पर super पार्टीशन का साइज़ तय किया जा सकता है.

/data पर निर्भर रहना

वर्चुअल A/B, super को छोटा करने का सुझाव देता है, ताकि /data का साइज़ बढ़ाया जा सके. अपडेट के दौरान, उस स्पेस की ज़रूरत होती है. अपडेट करने की सुविधा पर पड़ने वाले असर को समझने के लिए, यह जानना ज़रूरी है कि समय के साथ-साथ, कितने प्रतिशत डिवाइसों में उतना स्पेस खाली रहने की संभावना है. इस नंबर का पता लगाना, डिवाइस के हार्डवेयर और उस डिवाइस के उपयोगकर्ताओं के व्यवहार पर निर्भर करता है. यहां दिए गए उदाहरणों में, इस नंबर को AllowedUserdataUse कहा गया है.

बिना कंप्रेस किए

बिना कंप्रेस किए, पूरे ओटीए के लिए, ओएस के साइज़ के बराबर स्नैपशॉट की ज़रूरत होती है. इसलिए, super का साइज़ तय करते समय इस बात का ध्यान रखना ज़रूरी है:

  FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth)
  Super = Max(FinalDessertUpdate, FinalDessertSize * 2 - AllowedUserdataUse)

उदाहरण के लिए, वर्चुअल A/B डिवाइस को लें. इसका फ़ैक्ट्री साइज़ 4 जीबी है, 50% ग्रोथ की उम्मीद है, और यह जानकारी है कि लगभग सभी उपयोगकर्ताओं के पास एक जीबी स्पेस खाली है. इसके अलावा, वे अपडेट के लिए एक जीबी तक स्पेस खाली करने के लिए तैयार हैं. इस डिवाइस के लिए, super का साइज़ इस तरह तय किया जा सकता है:

  FinalDessertSize = 4GB + (4GB * 0.5) = 6GB
  Super = Max(6GB, 6GB * 2 - 1GB) = Max(6GB, 11GB)

इसलिए, इस डिवाइस में 11 जीबी का super पार्टीशन होना चाहिए.

कंप्रेस करके

कंप्रेस करने पर, पूरे ओटीए के लिए, ओएस के साइज़ के लगभग 70% स्नैपशॉट की ज़रूरत होती है:

  FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth)
  FinalOTASnapshotSize = FinalDessertSize * 0.7
  Super = Max(FinalDessertUpdate, FinalDessertSize + FinalOTASnapshotSize - AllowedUserdataUse)

उदाहरण के लिए, वर्चुअल A/B कंप्रेशन के साथ कॉन्फ़िगर किए गए डिवाइस को लें. इसका फ़ैक्ट्री साइज़ 4 जीबी है, 50% ग्रोथ की उम्मीद है, और यह जानकारी है कि लगभग सभी उपयोगकर्ताओं के पास एक जीबी स्पेस खाली है. इसके अलावा, वे अपडेट के लिए एक जीबी तक स्पेस खाली करने के लिए तैयार हैं. इस डिवाइस के लिए, super का साइज़ इस तरह तय किया जा सकता है:

  FinalDessertSize = 4GB + (4GB * 0.5) = 6GB
  FinalOTASnapshotSize = 6GB * 0.7 = 4.2GB
  Super = Max(6GB, 6GB + 4.2GB - 1GB) = Max(6GB, 9.2GB) = 9.2GB

इसलिए, इस डिवाइस में 9.2 जीबी का super पार्टीशन होना चाहिए.

/data पर निर्भर न रहना

अगर आपको ऐसे ओटीए चाहिए जिनके लिए /data पर स्नैपशॉट स्पेस की ज़रूरत न हो, तो super का साइज़ तय करना आसान है.

बिना कंप्रेस किए

वर्चुअल A/B डिवाइस के लिए, जिसे कंप्रेस नहीं किया गया है या सामान्य A/B डिवाइस के लिए:

  FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth)
  Super = FinalDessertSize * 2

उदाहरण के लिए, वर्चुअल A/B डिवाइस को लें. इसका फ़ैक्ट्री साइज़ 4 जीबी है और 50% ग्रोथ की उम्मीद है. यह पक्का करने के लिए कि यह डिवाइस, ओटीए स्नैपशॉट के लिए /data का इस्तेमाल न करे, इसकी गणना इस तरह की जाएगी:

  FinalDessertSize = 4GB + (4GB * 0.5) = 6GB
  Super = FinalDessertSize * 2 = 12GB

इसलिए, इस डिवाइस में 12 जीबी का super पार्टीशन होना चाहिए.

कंप्रेस करके

वर्चुअल A/B डिवाइस के लिए, जिसे कंप्रेस किया गया है:

  FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth)
  FinalOTASnapshotSize = FinalDessertSize * 0.7
  Super = FinalDessertSize + FinalOTASnapshotSize

उदाहरण के लिए, वर्चुअल A/B कंप्रेशन डिवाइस को लें. इसका फ़ैक्ट्री साइज़ 4 जीबी है और 50% ग्रोथ की उम्मीद है. यह पक्का करने के लिए कि यह डिवाइस, ओटीए स्नैपशॉट के लिए /data का इस्तेमाल न करे, इसकी गणना इस तरह की जाएगी:

  FinalDessertSize = 4GB + (4GB * 0.5) = 6GB
  FinalOTASnapshotSize = 6GB * 0.7 = 4.2GB
  Super = 6GB + 4.2GB = 10.2GB

इसलिए, इस डिवाइस में 10.2 जीबी का super पार्टीशन होना चाहिए.

सीमाएं

यह देखा जा सकता है कि अगर फ़ैक्ट्री साइज़ 4 जीबी है और फ़ाइनल अपडेट 5 जीबी है, तो super का साइज़ 10 जीबी के बजाय 9 जीबी होना चाहिए. हालांकि, अगर पहला अपडेट और फ़ाइनल अपडेट, दोनों 5 जीबी के हैं, तो हो सकता है कि super में फ़ाइनल अपडेट के लिए जगह न हो. ऊपर दिए गए फ़ॉर्मूले में यह माना गया है कि पार्टीशन की ग्रोथ कभी भी हो सकती है. फ़ाइनल अपडेट को लागू करने के लिए ज़रूरी स्पेस, पहले अपडेट को लागू करने के लिए ज़रूरी स्पेस के बराबर हो सकता है.

ध्यान दें कि कंप्रेशन रेशियो का अनुमान लगाया जाता है. ओएस इमेज को उसके कॉन्टेंट के आधार पर, बेहतर या खराब तरीके से कंप्रेस किया जा सकता है. अगर EROFS जैसे कंप्रेस किए गए फ़ाइल सिस्टम का इस्तेमाल किया जा रहा है, तो वर्चुअल A/B से मिलने वाला अतिरिक्त कंप्रेशन कम होता जाता है. ऐसे में, दिशा-निर्देश के तौर पर, कंप्रेस न किए गए फ़ॉर्मूले में से किसी एक का इस्तेमाल करना बेहतर होता है.

साइज़ की गणना करना

ऊपर दिए गए उदाहरणों में FactorySize की वैल्यू पता करने के लिए, सभी डाइनैमिक पार्टीशन के साइज़ को एक साथ जोड़ें. AOSP डाइनैमिक पार्टीशन की इमेज ये हैं:

  • system.img
  • vendor.img
  • product.img
  • system_ext.img
  • vendor_dlkm.img
  • system_dlkm.img

पक्का करें कि साइज़ की गणना, अनस्पार्स की गई इमेज के आधार पर की गई हो. Android 12 या उससे पहले के वर्शन बनाने पर, इमेज डिफ़ॉल्ट रूप से स्पार्स की जाती हैं. इन्हें simg2img की मदद से अनस्पार्स किया जा सकता है.

ओटीए पैकेज से भी पार्टीशन के साइज़ की गणना की जा सकती है. ऐसा करने से, हर पार्टीशन के लिए वर्चुअल A/B स्नैपशॉट के साइज़ का अनुमान भी लगाया जा सकता है:

  python3 system/update_engine/scripts/payload_info.py path/to/ota-package.zip

इसके अलावा, ओटीए विश्लेषण टूल का इस्तेमाल किया जा सकता है. यह टूल, कोई भी फ़ाइल अपलोड नहीं करता और ओटीए पैकेज का विश्लेषण स्थानीय तौर पर करता है.

ExpectedGrowth की वैल्यू पता करने के लिए, पहले लॉन्च किए गए डिवाइस का इस्तेमाल करें. ग्रोथ की गणना करने के लिए, super की सबसे पुरानी और सबसे नई इमेज का इस्तेमाल करें.