Android 10, kablosuz (OTA) güncellemeler sırasında bölüm oluşturabilen, yeniden boyutlandırabilen ve bölüm silebilir bir kullanıcı alanı bölümlendirme sistemi olan dinamik bölümleri destekler.
Bu sayfada, dinamik bölüm desteğiyle kullanıma sunulan A/B cihazlar ve Android 9 ve önceki sürümleri çalıştıran cihazlar için güncelleme sırasında dinamik bölümlerin nasıl yeniden boyutlandırılacağı açıklanmaktadır.
Arka plan
Cihazda bir super
bölümü var. Bu bölüme ek olarak ek bir slot eklenmemiştir. Engelleme cihazı, fstab
'de /misc
için blk_device
girişiyle birlikte olmalıdır. Örneğin, fstab
dosyası aşağıdakileri listeler:
/dev/block/bootdevice/by-name/misc /misc # Other fields
Bu durumda, super
için blok cihaz /dev/block/bootdevice/by-name/super
'te bulunmalıdır ancak super
bölümünün fstab
dosyasında listelenmesine gerek yoktur.
super
bölümünde, bölümler için A/B slotlarına karşılık gelen 0 ve 1 numaralı iki meta veri yuvası vardır. Bu sayfada meta veri yuvaları S Meta Veri (kaynak) ve T Meta Veri (hedef) olarak adlandırılır. Benzer şekilde, bölümlere system_s
,
vendor_t
vb. adlar verilir.
Yükseltmeden önce S meta verileri, kullanılan dinamik bölümlere (genellikle system_s
,
vendor_s
, product_s
vb.) ilişkin bilgileri içerir. Sistem, güncelleme sırasında bu bölümlerin kapsamlarını okuduğu için bu bölümler silinemez.
Bölümler güncelleme gruplarına aittir. Ayrıntılar için Dinamik bölümlendirmeyi uygulama başlıklı makaleyi inceleyin.
Bir cihazdaki meta verilere örnek olarak aşağıdakiler verilebilir.
- Meta veri 0
- Grup
foo_a
- Bölüm
system_a
- Bölüm
product_services_a
- Foo tarafından güncellenen diğer bölümler
- Bölüm
- Grup bar_a
- Bölüm
vendor_a
- Bölüm
product_a
- Bar tarafından güncellenen diğer bölümler
- Bölüm
foo_b
grubu (önceki yükseltmeden kalan)bar_b
grubu (önceki yükseltmeden kalan)
- Grup
- Meta veri 1
foo_a
grubu (önceki yükseltmeden kalan)bar_a
grubu (önceki yükseltmeden kalan)- Grup
foo_b
- Bölüm
system_b
- Bölüm
product_services_b
- Foo tarafından güncellenen diğer bölümler
- Bölüm
- Grup
bar_b
- Bölüm
vendor_b
- Bölüm
product_b
- Bar tarafından güncellenen diğer bölümler
- Bölüm
Cihazınızdaki meta verileri dökmek için lpdump
aracını (system/extras/partition_tools
altındaki kaynak kod) kullanabilirsiniz. Örneğin:
lpdump --slot 0 /dev/block/bootdevice/by-name/super
lpdump --slot 1 /dev/block/bootdevice/by-name/super
Akışı güncelleme
super
bölüm meta verilerini başlatın.- Kaynak dinamik bölümlerinin kapsamlarını Meta Veriler'den yükleyin. M, yüklenen meta veri olsun.
-
M yalnızca
_s
son eki olan bölümleri ve grupları içerecek şekilde M'den hedef grupları ve bölümleri (örneğin,foo_t
,bar_t
) kaldırın. -
Güncelleme manifestindeki
dynamic_partition_metadata
alanına göre hedef gruplar ve bölümler ekleyin.
Her bölümün boyutununew_partition_info
'da bulabilirsiniz. - M'yi T meta verilerine yazın.
- Eklenen bölümleri cihaz eşleyicide yazılabilir olarak eşleyin.
- Güncellemeyi engellenen cihazlara uygulayın.
- Gerekirse cihaz eşleyicide kaynak bölümleri salt okunur olarak eşleyin. Kaynak bölümleri güncellemeden önce eşlenmediği için bu, harici yükleme için gereklidir.
- Hedef yuvada bulunan tüm engelleme cihazlarına tam veya delta güncellemesi uygulayın.
- Yükleme sonrası komut dosyasını çalıştırmak için bölümleri monte edin ve ardından bölümlerin montesini kaldırın.
- Hedef bölümlerin eşlemesini kaldırın.
Aşağıdaki sistem özellikleri, güncellemeden önce ve sonra ilgili değerlere sahip olmalıdır:
ro.boot.dynamic_partitions=true ro.boot.dynamic_partitions_retrofit=true
Güncelleme manifest dosyasına grup ve bölüm ekleme
Dinamik bölümlere sahip bir A/B cihazda veya dinamik bölümler için destek ekleyen bir A/B cihazda OTA güncellemesi yaparken güncelleme manifest dosyasına grup ve bölüm eklemeniz gerekir. Aşağıdaki snippet'te, dinamik bölümleri desteklemek için güncelleme manifest'iyle ilgili ek bilgiler gösterilmektedir. Her alanla ilgili ayrıntılı dokümanlar için update_metadata.proto dosyasını inceleyin.
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; }