Android 10 hỗ trợ phân vùng động, một hệ thống phân vùng không gian người dùng có thể tạo, đổi kích thước và huỷ phân vùng trong quá trình cập nhật qua mạng không dây (OTA).
Trang này mô tả cách đổi kích thước phân vùng động trong quá trình cập nhật dành cho các thiết bị A/B đang đã ra mắt với khả năng hỗ trợ phân vùng động, dành cho các thiết bị chạy Android 9 và thấp hơn.
Thông tin khái quát
Có một phân vùng super
trên thiết bị. Phân vùng này không có hậu tố khe. Thiết bị khối phải tồn tại cùng
với mục nhập blk_device
cho /misc
trong
fstab
. Ví dụ: nếu tệp fstab
liệt kê:
/dev/block/bootdevice/by-name/misc /misc # Other fields
Sau đó, thiết bị khối cho super
phải tồn tại trong
/dev/block/bootdevice/by-name/super
, nhưng
Phân vùng super
không cần được liệt kê trong
fstab
.
Trong phân vùng super
, có hai
vùng siêu dữ liệu, được đánh số 0 và 1, tương ứng với
Khe A/B cho phân vùng. Trong trang này, các vị trí siêu dữ liệu được
được gọi là Metadata S (nguồn) và Metadata T (mục tiêu). Tương tự,
được gọi là system_s
,
vendor_t
, v.v.
Trước khi nâng cấp, Metadata S chứa thông tin về các phân vùng động đang được sử dụng (thường là system_s
, vendor_s
, product_s
, v.v.). Hệ thống đọc dung lượng cho các phân vùng này trong quá trình cập nhật, vì vậy, bạn không thể xoá các phân vùng này.
Các phân vùng thuộc về nhóm cập nhật. Xem Triển khai Phân vùng động để biết thông tin chi tiết.
Sau đây là ví dụ về siêu dữ liệu trên một thiết bị.
- Siêu dữ liệu 0
- Nhóm
foo_a
- Phân vùng
system_a
- Phân vùng
product_services_a
- Các phân vùng khác do Foo cập nhật
- Phân vùng
- Thanh_a của nhóm
- Phân vùng
vendor_a
- Phân vùng
product_a
- Các phân vùng khác được Bar cập nhật
- Phân vùng
- Nhóm
foo_b
(còn lại từ bản nâng cấp trước) - Nhóm
bar_b
(còn lại từ bản nâng cấp trước)
- Nhóm
- Siêu dữ liệu 1
- Nhóm
foo_a
(còn lại từ lần nâng cấp trước) - Nhóm
bar_a
(còn lại từ lần nâng cấp trước) - Nhóm
foo_b
- Phân vùng
system_b
- Phân vùng
product_services_b
- Các phân vùng khác do Foo cập nhật
- Phân vùng
- Nhóm
bar_b
- Phân vùng
vendor_b
- Phân vùng
product_b
- Các phân vùng khác được Bar cập nhật
- Phân vùng
- Nhóm
Bạn có thể sử dụng công cụ lpdump
(mã nguồn trong
system/extras/partition_tools
) để kết xuất siêu dữ liệu vào
thiết bị của bạn. Ví dụ:
lpdump --slot 0 /dev/block/bootdevice/by-name/super
lpdump --slot 1 /dev/block/bootdevice/by-name/super
Cập nhật quy trình
- Khởi động siêu dữ liệu phân vùng
super
.- Tải phạm vi cho phân vùng động nguồn từ Siêu dữ liệu Nam Đặt M là siêu dữ liệu được tải.
-
Xoá nhóm mục tiêu và phân vùng (ví dụ:
foo_t
;bar_t
) từ M sao cho M chứa chỉ những phân vùng và nhóm có hậu tố_s
. -
Thêm các nhóm và phân vùng mục tiêu theo trường
dynamic_partition_metadata
trong tệp kê khai cập nhật.
Bạn có thể xem kích thước của mỗi phân vùng trongnew_partition_info
. - Ghi M vào Metadata T.
- Ánh xạ các phân vùng đã thêm trên trình ánh xạ thiết bị ở chế độ có thể ghi.
- Áp dụng bản cập nhật trên các thiết bị khối.
- Nếu cần, hãy ánh xạ các phân vùng nguồn trên trình liên kết thiết bị dưới dạng chỉ có thể đọc. Điều này là cần thiết để tải không qua cửa hàng vì các phân vùng nguồn không được liên kết trước khi cập nhật.
- Áp dụng bản cập nhật đầy đủ hoặc bản cập nhật delta cho tất cả thiết bị khối tại mục tiêu vị trí.
- Gắn kết các phân vùng để chạy tập lệnh sau cài đặt, sau đó ngắt kết nối các phân vùng.
- Huỷ liên kết các phân vùng mục tiêu.
Trước và sau khi cập nhật, các thuộc tính hệ thống sau đây phải: các giá trị tương ứng:
ro.boot.dynamic_partitions=true ro.boot.dynamic_partitions_retrofit=true
Thêm các nhóm và phân vùng vào tệp kê khai cập nhật
Khi thực hiện cập nhật OTA trên thiết bị A/B có các phân vùng động hoặc thiết bị A/B đang thêm tính năng hỗ trợ cho các phân vùng động, bạn cần thêm các nhóm và phân vùng vào tệp kê khai cập nhật. Đoạn mã dưới đây cho thấy thông tin bổ sung về tệp kê khai bản cập nhật để hỗ trợ các phân vùng động. Xem update_metadata.proto để xem tài liệu chi tiết về từng trường.
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; }