Android 10 में डाइनैमिक पार्टीशन की सुविधा काम करती है. यह एक यूज़रस्पेस पार्टीशनिंग सिस्टम है, जो ओवर-द-एयर (ओटीए) अपडेट के दौरान, पार्टीशन बना सकता है, उनका साइज़ बदल सकता है, और उन्हें मिटा सकता है.
इस पेज पर बताया गया है कि अपडेट के दौरान, डाइनैमिक पार्टिशन का साइज़ कैसे बदलते हैं. ऐसा उन A/B डिवाइसों के लिए किया जाता है जो यह सुविधा, Android 9 वर्शन और कम.
बैकग्राउंड
डिवाइस पर एक super
पार्टीशन है. यह
विभाजन, स्लॉट प्रत्यय नहीं है. ब्लॉक डिवाइस साथ में मौजूद होना चाहिए
/misc
के लिए blk_device
एंट्री के साथ
fstab
. उदाहरण के लिए, अगर 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
(पिछले अपग्रेड से बचे हुए)
- ग्रुप
- मेटाडेटा 1
- ग्रुप
foo_a
(पिछले अपग्रेड से बचे हुए) - ग्रुप
bar_a
(पिछले अपग्रेड से बचे हुए) - ग्रुप
foo_b
- पार्टीशन
system_b
- पार्टीशन
product_services_b
- Foo ने अपडेट किए गए अन्य पार्टीशन
- पार्टीशन
- ग्रुप
bar_b
- विभाजन
vendor_b
- पार्टीशन
product_b
- अन्य पार्टिशन बार से अपडेट किए गए
- विभाजन
- ग्रुप
अपने डिवाइस पर मेटाडेटा को डंप करने के लिए, lpdump
टूल (system/extras/partition_tools
में मौजूद सोर्स कोड) का इस्तेमाल किया जा सकता है. उदाहरण के लिए:
lpdump --slot 0 /dev/block/bootdevice/by-name/super
lpdump --slot 1 /dev/block/bootdevice/by-name/super
फ़्लो अपडेट करना
super
पार्टीशन मेटाडेटा को शुरू करना.- मेटाडेटा से सोर्स डाइनैमिक पार्टिशन के एक्सटेंट लोड करें. मान लें कि M, लोड किया गया मेटाडेटा है.
-
M से टारगेट ग्रुप और पार्टीशन (उदाहरण के लिए,
foo_t
,bar_t
) हटाएं, ताकि 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; }