गतिशील विभाजन वाले ए/बी उपकरणों के लिए ओटीए

एंड्रॉइड 10 गतिशील विभाजन का समर्थन करता है, एक उपयोगकर्ता स्थान विभाजन प्रणाली जो ओवर-द-एयर (ओटीए) अपडेट के दौरान विभाजन बना सकती है, आकार बदल सकती है और नष्ट कर सकती है।

यह पृष्ठ वर्णन करता है कि एंड्रॉइड 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। इस पृष्ठ में, मेटाडेटा स्लॉट को मेटाडेटा एस (स्रोत) और मेटाडेटा टी (लक्ष्य) कहा जाता है। इसी प्रकार, विभाजनों को system_s , vendor_t , इत्यादि के रूप में संदर्भित किया जाता है।

अपग्रेड से पहले, मेटाडेटा एस में उपयोग किए जा रहे गतिशील विभाजन (आमतौर पर, system_s , vendor_s , product_s , और इसी तरह) की जानकारी शामिल होती है। सिस्टम अद्यतन के दौरान इन विभाजनों के विस्तार को पढ़ता है, इसलिए उन्हें हटाया नहीं जा सकता।

विभाजन अद्यतन समूहों से संबंधित हैं। विवरण के लिए गतिशील विभाजन लागू करना देखें।

किसी डिवाइस पर मेटाडेटा का एक उदाहरण इस प्रकार है।

  • मेटाडेटा 0
    • समूह foo_a
      • विभाजन system_a
      • विभाजन product_services_a
      • अन्य विभाजन फू द्वारा अद्यतन किए गए
    • ग्रुप बार_ए
      • विभाजन vendor_a
      • विभाजन product_a
      • अन्य विभाजन बार द्वारा अद्यतन किये गये
    • समूह foo_b (पिछले अपग्रेड से बचा हुआ)
    • ग्रुप bar_b (पिछले अपग्रेड से बचा हुआ)
  • मेटाडेटा 1
    • समूह foo_a (पिछले अपग्रेड से बचा हुआ)
    • ग्रुप bar_a (पिछले अपग्रेड से बचा हुआ)
    • समूह foo_b
      • विभाजन system_b
      • विभाजन product_services_b
      • अन्य विभाजन फू द्वारा अद्यतन किए गए
    • ग्रुप 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

अद्यतन प्रवाह

  1. super पार्टीशन मेटाडेटा प्रारंभ करें।
    1. मेटाडेटा एस से स्रोत गतिशील विभाजन के लिए विस्तार लोड करें। एम को लोडेड मेटाडेटा होने दें।
    2. M से लक्ष्य समूह और विभाजन (उदाहरण के लिए, foo_t , bar_t ) हटाएं ताकि M में केवल _s प्रत्यय वाले विभाजन और समूह हों।
    3. अद्यतन मेनिफ़ेस्ट में dynamic_partition_metadata फ़ील्ड के अनुसार लक्ष्य समूह और विभाजन जोड़ें।
      प्रत्येक विभाजन का आकार new_partition_info में पाया जा सकता है।
    4. मेटाडेटा टी को एम लिखें।
    5. डिवाइस मैपर पर जोड़े गए विभाजनों को लिखने योग्य के रूप में मैप करें।
  2. ब्लॉक डिवाइस पर अपडेट लागू करें.
    1. यदि आवश्यक हो, तो डिवाइस मैपर पर स्रोत विभाजन को केवल पढ़ने के लिए मैप करें। साइडलोडिंग के लिए यह आवश्यक है क्योंकि अद्यतन से पहले स्रोत विभाजन को मैप नहीं किया जाता है।
    2. लक्ष्य स्लॉट पर सभी ब्लॉक डिवाइसों पर पूर्ण या डेल्टा अपडेट लागू करें।
    3. पोस्ट-इंस्टॉल स्क्रिप्ट को चलाने के लिए विभाजन को माउंट करें, और फिर विभाजन को अनमाउंट करें।
  3. लक्ष्य विभाजन को अनमैप करें.

अद्यतन से पहले और बाद में, निम्नलिखित सिस्टम गुणों में संबंधित मान होने चाहिए:

ro.boot.dynamic_partitions=true
ro.boot.dynamic_partitions_retrofit=true

अद्यतन मेनिफ़ेस्ट में समूह और विभाजन जोड़ें

डायनामिक विभाजन वाले ए/बी डिवाइस पर ओटीए अपडेट करते समय, या डायनामिक विभाजन के लिए समर्थन जोड़ने वाले ए/बी डिवाइस पर, आपको अपडेट मेनिफेस्ट में समूह और विभाजन जोड़ने की आवश्यकता होती है। नीचे दिया गया स्निपेट गतिशील विभाजन का समर्थन करने के लिए अद्यतन मेनिफ़ेस्ट पर अतिरिक्त जानकारी दिखाता है। प्रत्येक फ़ील्ड पर विस्तृत दस्तावेज़ीकरण के लिए 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;
}