اندروید ۱۰ از پارتیشنهای پویا پشتیبانی میکند، یک سیستم پارتیشنبندی فضای کاربری که میتواند در طول بهروزرسانیهای OTA پارتیشنها را ایجاد، تغییر اندازه و از بین ببرد.
این صفحه نحوه تغییر اندازه پارتیشنهای پویا را در طول بهروزرسانی برای دستگاههای A/B که با پشتیبانی از پارتیشنهای پویا راهاندازی شدهاند، برای دستگاههایی که اندروید ۹ و پایینتر را اجرا میکنند، شرح میدهد.
پیشینه
یک پارتیشن super روی دستگاه وجود دارد. این پارتیشن پسوند اسلات ندارد. دستگاه بلوک باید همراه با ورودی blk_device برای /misc در fstab وجود داشته باشد. برای مثال، اگر فایل fstab موارد زیر را فهرست کند:
/dev/block/bootdevice/by-name/misc /misc # Other fields
سپس دستگاه بلوکی مربوط به super باید در /dev/block/bootdevice/by-name/super وجود داشته باشد، اما نیازی نیست که پارتیشن super در فایل fstab فهرست شده باشد.
در پارتیشن super ، دو اسلات فراداده وجود دارد که با شمارههای ۰ و ۱ شمارهگذاری شدهاند و مربوط به اسلاتهای A/B برای پارتیشنها هستند. در این صفحه، اسلاتهای فراداده، Metadata S (منبع) و Metadata T (هدف) نامیده میشوند. به طور مشابه، پارتیشنها با نامهای system_s ، vendor_t و غیره شناخته میشوند.
قبل از ارتقا، Metadata S شامل اطلاعات مربوط به پارتیشنهای پویای مورد استفاده (معمولاً system_s ، vendor_s ، product_s و غیره) است. سیستم در طول بهروزرسانی، فضای ذخیرهسازی این پارتیشنها را میخواند، بنابراین نمیتوان آنها را حذف کرد.
پارتیشنها به گروههای بهروزرسانی تعلق دارند. برای جزئیات بیشتر به پیادهسازی پارتیشنهای پویا مراجعه کنید.
نمونهای از فرادادهها روی یک دستگاه به شرح زیر است.
- فراداده 0
- گروه
foo_a-
system_aپارتیشن_a - پارتیشنبندی
product_services_a - پارتیشنهای دیگر توسط فو بهروزرسانی شدند
-
- نوار گروهی_a
-
vendor_aپارتیشن_a -
product_aپارتیشن_a - پارتیشنهای دیگر توسط Bar بهروزرسانی شدند
-
- گروه
foo_b(باقیمانده از ارتقاء قبلی) - گروه
bar_b(باقیمانده از ارتقاء قبلی)
- گروه
- فراداده ۱
- گروه
foo_a(باقیمانده از ارتقاء قبلی) - گروه
bar_a(باقیمانده از ارتقاء قبلی) - گروه
foo_b-
system_bپارتیشن_ب - پارتیشن بندی
product_services_b - پارتیشنهای دیگر توسط فو بهروزرسانی شدند
-
-
bar_bگروه-
vendor_bپارتیشن_ب -
product_bپارتیشن_ب - پارتیشنهای دیگر توسط Bar بهروزرسانی شدند
-
- گروه
شما میتوانید از ابزار lpdump (کد منبع در مسیر system/extras/partition_tools ) برای استخراج فرادادهها روی دستگاه خود استفاده کنید. برای مثال:
lpdump --slot 0 /dev/block/bootdevice/by-name/superlpdump --slot 1 /dev/block/bootdevice/by-name/super
جریان بهروزرسانی
- فرادادهی پارتیشن
superرا مقداردهی اولیه کنید.- محدودههای مربوط به پارتیشنهای پویای منبع را از فراداده S بارگذاری کنید. فرض کنید M فراداده بارگذاری شده باشد.
- گروهها و پارتیشنهای هدف (برای مثال،
foo_t،bar_t) را از M حذف کنید تا M فقط شامل پارتیشنها و گروههایی با پسوند_sباشد. - گروههای هدف و پارتیشنها را طبق فیلد
dynamic_partition_metadataدر فایل بهروزرسانی مانیفست اضافه کنید.
اندازه هر پارتیشن را میتوان درnew_partition_infoیافت. - M را در متادیتای T بنویسید.
- پارتیشنهای اضافه شده را روی نگاشتگر دستگاه به عنوان قابل نوشتن نگاشت کنید.
- بهروزرسانی را روی دستگاههای بلوک اعمال کنید.
- در صورت لزوم، پارتیشنهای منبع را در نگاشتگر دستگاه به صورت فقط خواندنی نگاشت کنید. این برای بارگذاری جانبی ضروری است زیرا پارتیشنهای منبع قبل از بهروزرسانی نگاشت نمیشوند.
- یک بهروزرسانی کامل یا دلتا را روی تمام دستگاههای بلوک در اسلات هدف اعمال کنید.
- برای اجرای اسکریپت پس از نصب، پارتیشنها را mount کنید و سپس پارتیشنها را unmount کنید.
- پارتیشنهای هدف را از حالت نگاشت خارج کنید.
قبل و بعد از بهروزرسانی، ویژگیهای سیستم زیر باید مقادیر مربوطه را داشته باشند:
ro.boot.dynamic_partitions=true ro.boot.dynamic_partitions_retrofit=true
اضافه کردن گروهها و پارتیشنها به فایل بهروزرسانی manifest
هنگام انجام بهروزرسانی OTA روی یک دستگاه 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;
}