Android 10 از پارتیشنهای پویا، سیستم پارتیشنبندی فضای کاربر که میتواند درطول بهروزرسانیهای ازطریق هوا (OTA) پارتیشنها را ایجاد، تغییر اندازه، و حذف کند، پشتیبانی میکند.
این صفحه نحوه تغییر اندازه پارتیشنهای پویا را درطول بهروزرسانی برای دستگاههای A/B که با پشتیبانی از پارتیشنهای پویا راهاندازی شدهاند، برای دستگاههای دارای Android 9 و نسخههای پایینتر توضیح میدهد.
پسزمینه
یک پارتیشن 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 برای بخشها مطابقت دارند. در این صفحه، جایگاههای فراداده
«فراداده 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(باقیمانده از ارتقای قبلی)
- گروه
- فراداده ۱
- گروه
foo_a(باقیمانده از ارتقای قبلی) - گروه
bar_a(باقیمانده از ارتقای قبلی) - گروه
foo_b- پارتیشن
system_b - پارتیشن
product_services_b - بخشهای دیگر بهروزرسانیشده توسط Foo
- پارتیشن
- گروه
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 بنویسید.
- بخشهای اضافه شده را در نگاشتگر دستگاه بهعنوان نوشتنی نگاشت کنید.
- بهروزرسانی را در دستگاههای بلوک اعمال کنید.
- درصورت لزوم، پارتیشنهای منبع را در نگاشتگر دستگاه بهصورت فقط خواندنی نگاشت کنید. این کار برای بارگذاری جانبی ضروری است زیرا پارتیشنهای منبع پیشاز بهروزرسانی نگاشت نشدهاند.
- بهروزرسانی کامل یا دلتا را روی همه دستگاههای بلوکی در جایگاه هدف اعمال کنید.
- پارتیشنها را برای اجرای اسکریپت پساز نصب سوار کنید، و سپس پارتیشنها را پیاده کنید.
- بخشهای هدف را از نقشه بردارید.
قبل و بعداز بهروزرسانی، ویژگیهای سیستم زیر باید مقادیر مربوطه را داشته باشند:
ro.boot.dynamic_partitions=true ro.boot.dynamic_partitions_retrofit=true
افزودن گروهها و بخشها به مانیفست بهروزرسانی
هنگام انجام بهروزرسانی 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;
}