ডায়নামিক পার্টিশন সহ A/B ডিভাইসের জন্য OTA

অ্যান্ড্রয়েড 10 ডাইনামিক পার্টিশন সমর্থন করে, একটি ইউজারস্পেস পার্টিশনিং সিস্টেম যা ওভার-দ্য-এয়ার (OTA) আপডেটের সময় পার্টিশন তৈরি, আকার পরিবর্তন এবং ধ্বংস করতে পারে।

এই পৃষ্ঠাটি বর্ণনা করে যে কিভাবে A/B ডিভাইসগুলির জন্য একটি আপডেটের সময় ডায়নামিক পার্টিশনের আকার পরিবর্তন করতে হয় যেগুলি অ্যান্ড্রয়েড 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 পার্টিশনে, পার্টিশনের জন্য A/B স্লটের সাথে সঙ্গতিপূর্ণ, 0 এবং 1 নম্বরযুক্ত দুটি মেটাডেটা স্লট রয়েছে। এই পৃষ্ঠায়, মেটাডেটা স্লটগুলিকে বলা হয় মেটাডেটা এস (উৎস) এবং মেটাডেটা টি (লক্ষ্য)। একইভাবে, পার্টিশনগুলিকে বলা হয় system_s , vendor_t , ইত্যাদি।

আপগ্রেড করার আগে, মেটাডেটা এস ব্যবহার করা হচ্ছে ডায়নামিক পার্টিশনের তথ্য ধারণ করে (সাধারণত, system_s , vendor_s , product_s , এবং তাই)। আপডেটের সময় সিস্টেম এই পার্টিশনগুলির জন্য বিস্তৃতি পড়ে, তাই সেগুলি মুছে ফেলা যাবে না।

পার্টিশনগুলি আপডেট গ্রুপের অন্তর্গত। বিস্তারিত জানতে ডায়নামিক পার্টিশন বাস্তবায়ন দেখুন।

একটি ডিভাইসে মেটাডেটার একটি উদাহরণ নিম্নরূপ।

  • মেটাডেটা 0
    • গ্রুপ foo_a
      • পার্টিশন system_a
      • বিভাজন product_services_a
      • Foo দ্বারা আপডেট করা অন্যান্য পার্টিশন
    • গ্রুপ বার_এ
      • পার্টিশন vendor_a
      • পার্টিশন product_a
      • অন্যান্য পার্টিশন বার দ্বারা আপডেট করা হয়েছে
    • গ্রুপ 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

আপডেট প্রবাহ

  1. super পার্টিশন মেটাডেটা শুরু করুন।
    1. মেটাডেটা এস থেকে সোর্স ডাইনামিক পার্টিশনের জন্য এক্সটেনশন লোড করুন। M কে লোড করা মেটাডেটা হতে দিন।
    2. M থেকে টার্গেট গ্রুপ এবং পার্টিশন (উদাহরণস্বরূপ, foo_t , bar_t ) মুছে ফেলুন যাতে M-এ শুধুমাত্র _s প্রত্যয় সহ পার্টিশন এবং গ্রুপ থাকে।
    3. আপডেট ম্যানিফেস্টে dynamic_partition_metadata ফিল্ড অনুযায়ী টার্গেট গ্রুপ এবং পার্টিশন যোগ করুন।
      প্রতিটি পার্টিশনের আকার new_partition_info এ পাওয়া যাবে।
    4. মেটাডেটা T-এ M লিখুন।
    5. ডিভাইস ম্যাপারে যোগ করা পার্টিশনগুলিকে লিখনযোগ্য হিসাবে ম্যাপ করুন।
  2. ব্লক ডিভাইসে আপডেট প্রয়োগ করুন.
    1. প্রয়োজনে, শুধুমাত্র পঠিত হিসাবে ডিভাইস ম্যাপারে উত্স পার্টিশনগুলি ম্যাপ করুন। এটি সাইডলোডিংয়ের জন্য প্রয়োজনীয় কারণ সোর্স পার্টিশনগুলি আপডেটের আগে ম্যাপ করা হয়নি।
    2. লক্ষ্য স্লটে সমস্ত ব্লক ডিভাইসে একটি সম্পূর্ণ বা ডেল্টা আপডেট প্রয়োগ করুন।
    3. পোস্ট-ইনস্টল স্ক্রিপ্ট চালানোর জন্য পার্টিশনগুলি মাউন্ট করুন, এবং তারপর পার্টিশনগুলি আনমাউন্ট করুন।
  3. টার্গেট পার্টিশন আনম্যাপ করুন।

আপডেটের আগে এবং পরে, নিম্নলিখিত সিস্টেম বৈশিষ্ট্যগুলির সংশ্লিষ্ট মান থাকা উচিত:

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

আপডেট ম্যানিফেস্টে গ্রুপ এবং পার্টিশন যোগ করুন

ডায়নামিক পার্টিশন সহ একটি A/B ডিভাইসে OTA আপডেট করার সময়, অথবা একটি 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;
}