Android 10 में डाइनैमिक पार्टीशन की सुविधा काम करती है. यह एक यूज़रस्पेस पार्टीशनिंग सिस्टम है, जो ओवर-द-एयर (ओटीए) अपडेट के दौरान, पार्टीशन बना सकता है, उनका साइज़ बदल सकता है, और उन्हें मिटा सकता है.
इस पेज पर, डाइनैमिक पार्टीशन की सुविधा के साथ लॉन्च किए गए A/B डिवाइसों के लिए, अपडेट के दौरान डाइनैमिक पार्टीशन का साइज़ बदलने का तरीका बताया गया है. यह तरीका, Android 9 और इससे पहले के वर्शन वाले डिवाइसों के लिए है.
बैकग्राउंड
डिवाइस पर एक super
पार्टीशन है. इस
पार्टीशन में स्लॉट सफ़िक्स नहीं है. ब्लॉक डिवाइस, fstab
में /misc
की blk_device
एंट्री के साथ मौजूद होना चाहिए. उदाहरण के लिए, अगर fstab
फ़ाइल में नीचे दी गई जानकारी दी गई है:
/dev/block/bootdevice/by-name/misc /misc # Other fields
इसके बाद, super
के लिए ब्लॉक डिवाइस,
/dev/block/bootdevice/by-name/super
में मौजूद होना चाहिए. हालांकि,
super
पार्टीशन को
fstab
फ़ाइल में शामिल करने की ज़रूरत नहीं है.
super
पार्टिशन में, दो
मेटाडेटा स्लॉट होते हैं जिनकी संख्या 0 और 1 होती है. ये सेगमेंट,
पार्टिशन के लिए A/B स्लॉट होते हैं. इस पेज में, मेटाडेटा स्लॉट को
'मेटाडेटा S (सोर्स)' और 'मेटाडेटा T (टारगेट)' कहा जाता है. इसी तरह,
पार्टीशन को system_s
,
vendor_t
वगैरह कहा जाता है.
अपग्रेड करने से पहले, मेटाडेटा S में इस्तेमाल किए जा रहे डाइनैमिक पार्टीशन की जानकारी शामिल होती है. जैसे, आम तौर पर, system_s
, vendor_s
, product_s
वगैरह. सिस्टम, अपडेट के दौरान इन सेगमेंट के एक्सटेंट पढ़ता है, इसलिए इन्हें मिटाया नहीं जा सकता.
पार्टीशन, अपडेट ग्रुप से जुड़े होते हैं. ज़्यादा जानकारी के लिए, डाइनैमिक पार्टीशन लागू करना देखें.
किसी डिवाइस पर मेटाडेटा का उदाहरण यहां दिया गया है.
- मेटाडेटा 0
- ग्रुप
foo_a
- पार्टीशन
system_a
- पार्टीशन
product_services_a
- Foo ने अपडेट किए गए अन्य पार्टीशन
- पार्टीशन
- ग्रुप bar_a
- पार्टीशन
vendor_a
- पार्टीशन
product_a
- Bar की मदद से अपडेट किए गए अन्य पार्टीशन
- पार्टीशन
- ग्रुप
foo_b
(पिछले अपग्रेड से बचे हुए) - ग्रुप
bar_b
(पिछले अपग्रेड से बचे हुए)
- ग्रुप
- पहला मेटाडेटा
- समूह
foo_a
(पिछले अपग्रेड से बचा हुआ) - ग्रुप
bar_a
(पिछले अपग्रेड से बचे हुए) - ग्रुप
foo_b
- पार्टीशन
system_b
- पार्टीशन
product_services_b
- Foo ने अपडेट किए गए अन्य पार्टीशन
- पार्टीशन
- ग्रुप
bar_b
- पार्टीशन
vendor_b
- पार्टीशन
product_b
- Bar की मदद से अपडेट किए गए अन्य पार्टीशन
- पार्टीशन
- समूह
अपने डिवाइस पर मेटाडेटा को डंप करने के लिए, lpdump
टूल (system/extras/partition_tools
में मौजूद सोर्स कोड) का इस्तेमाल किया जा सकता है. उदाहरण के लिए:
lpdump --slot 0 /dev/block/bootdevice/by-name/super
lpdump --slot 1 /dev/block/bootdevice/by-name/super
फ़्लो अपडेट करना
super
पार्टीशन का मेटाडेटा शुरू करें.- मेटाडेटा S से सोर्स के डाइनैमिक पार्टीशन के लिए एक्सटेंशन लोड करें. मान लें कि M, लोड किया गया मेटाडेटा है.
-
टारगेट ग्रुप और पार्टिशन (उदाहरण के लिए,
foo_t
,bar_t
) को M से हटाएं, ताकि M में सिर्फ़ वे सेगमेंट और ग्रुप हों जिनमें_s
सफ़िक्स लगा है. -
अपडेट किए गए मेनिफ़ेस्ट में
dynamic_partition_metadata
फ़ील्ड के हिसाब से टारगेट ग्रुप और पार्टिशन जोड़ें.
हर पार्टीशन का साइज़new_partition_info
में देखा जा सकता है. - मेटाडेटा T में M लिखें.
- डिवाइस मैपर पर जोड़े गए पार्टीशन को, लिखने के लिए उपलब्ध के तौर पर मैप करें.
- ब्लॉक किए गए डिवाइसों पर अपडेट लागू करें.
- अगर ज़रूरी हो, तो डिवाइस मैपर पर सोर्स पार्टिशन को सिर्फ़ पढ़ने के लिए मैप करें. साइडलोड करने के लिए, यह ज़रूरी है, क्योंकि अपडेट से पहले सोर्स पार्टिशन मैप नहीं किए जाते.
- टारगेट स्लॉट में ब्लॉक किए गए सभी डिवाइसों पर पूरा या डेल्टा अपडेट लागू करना.
- इंस्टॉल के बाद की स्क्रिप्ट चलाने के लिए, पार्टिशन को माउंट करें. इसके बाद, पार्टिशन को अनमाउंट करें.
- टारगेट किए गए पार्टीशन को अनमैप करें.
अपडेट से पहले और बाद में, इन सिस्टम प्रॉपर्टी में ये वैल्यू होनी चाहिए:
ro.boot.dynamic_partitions=true ro.boot.dynamic_partitions_retrofit=true
अपडेट मेनिफ़ेस्ट में ग्रुप और पार्टीशन जोड़ना
डाइनैमिक पार्टिशन वाले A/B डिवाइस या डाइनैमिक पार्टिशन के साथ काम करने वाले A/B डिवाइस पर ओटीए अपडेट करने के दौरान, आपको अपडेट मेनिफ़ेस्ट में ग्रुप और पार्टिशन जोड़ने होंगे. नीचे दिया गया स्निपेट, अपडेट मेनिफ़ेस्ट के बारे में ज़्यादा जानकारी दिखाता है, ताकि डाइनैमिक पार्टिशन की सुविधा काम कर सके. हर फ़ील्ड के बारे में ज़्यादा जानकारी के लिए, update_metadata.proto देखें.
message DeltaArchiveManifest { optional DynamicPartitionMetadata dynamic_partition_metadata; } message DynamicPartitionMetadata { repeated DynamicPartitionGroup groups; } message DynamicPartitionGroup { required string name; optional uint64 size; // maximum size of group repeated string partition_names; }