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

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

এই পৃষ্ঠায় বর্ণনা করা হয়েছে, কীভাবে অ্যান্ড্রয়েড ৯ বা তার নিম্নতর সংস্করণে চালিত এবং ডাইনামিক পার্টিশন সমর্থনসহ চালু হওয়া A/B ডিভাইসগুলোর আপডেটের সময় ডাইনামিক পার্টিশনের আকার পরিবর্তন করতে হয়।

পটভূমি

ডিভাইসটিতে একটি 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 স্লটের অনুরূপ। এই পৃষ্ঠায়, মেটাডেটা স্লটগুলোকে মেটাডেটা S (সোর্স) এবং মেটাডেটা T (টার্গেট) বলা হয়। একইভাবে, পার্টিশনগুলোকে system_s , vendor_t ইত্যাদি নামে উল্লেখ করা হয়।

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

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

ডিভাইসের মেটাডেটার একটি উদাহরণ নিচে দেওয়া হলো।

  • মেটাডেটা ০
    • গ্রুপ foo_a
      • পার্টিশন system_a
      • পার্টিশন product_services_a
      • Foo দ্বারা অন্যান্য পার্টিশন আপডেট করা হয়েছে
    • গ্রুপ বার_এ
      • পার্টিশন vendor_a
      • পার্টিশন product_a
      • বার দ্বারা অন্যান্য পার্টিশন আপডেট করা হয়েছে
    • গ্রুপ foo_b (পূর্ববর্তী আপগ্রেড থেকে অবশিষ্ট)
    • গ্রুপ bar_b (পূর্ববর্তী আপগ্রেড থেকে অবশিষ্ট)
  • মেটাডেটা ১
    • গ্রুপ 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. মেটাডেটা S থেকে উৎস ডাইনামিক পার্টিশনগুলোর এক্সটেন্ট লোড করুন। ধরা যাক, 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 ডিভাইসে, অথবা যে A/B ডিভাইসটি ডাইনামিক পার্টিশনের জন্য সাপোর্ট যোগ করছে, সেটিতে OTA আপডেট করার সময়, আপনাকে আপডেট ম্যানিফেস্টে গ্রুপ এবং পার্টিশন যোগ করতে হবে। নিচের কোড স্নিপেটটিতে ডাইনামিক পার্টিশন সাপোর্টের জন্য আপডেট ম্যানিফেস্টের অতিরিক্ত তথ্য দেখানো হয়েছে। প্রতিটি ফিল্ডের বিস্তারিত ডকুমেন্টেশনের জন্য 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;
}