Android 10 รองรับพาร์ติชันแบบไดนามิก ซึ่งเป็นระบบการแบ่งพาร์ติชันพื้นที่ผู้ใช้ที่สามารถสร้าง ปรับขนาด และลบพาร์ติชันระหว่างการอัปเดตแบบ OTA ได้
หน้านี้อธิบายวิธีปรับขนาดพาร์ติชันแบบไดนามิกระหว่างการอัปเดตสำหรับอุปกรณ์ A/B ที่เปิดตัวพร้อมการรองรับพาร์ติชันแบบไดนามิกสำหรับอุปกรณ์ที่ใช้ Android 9 และต่ำกว่า
ฉากหลัง
มีพาร์ติชัน super
1 รายการในอุปกรณ์ พาร์ติชันนี้ไม่มีส่วนต่อท้ายของสล็อต อุปกรณ์บล็อกต้องมีอยู่พร้อมกับรายการ blk_device
สำหรับ /misc
ใน fstab
เช่น หากไฟล์ fstab
แสดงรายการต่อไปนี้
/dev/block/bootdevice/by-name/misc /misc # Other fields
จากนั้นอุปกรณ์บล็อกสำหรับ super
ต้องมีอยู่ใน /dev/block/bootdevice/by-name/super
แต่ไม่จำเป็นต้องแสดงพาร์ติชัน super
ในไฟล์ fstab
ในพาร์ติชัน super
มีสล็อตข้อมูลเมตา 2 รายการ ซึ่งมีหมายเลข 0 และ 1 ซึ่งตรงกับสล็อต A/B สำหรับพาร์ติชัน ในหน้านี้ ช่องข้อมูลเมตาจะเรียกว่า Metadata S (แหล่งที่มา) และ Metadata T (เป้าหมาย) ในทํานองเดียวกัน ระบบจะเรียกพาร์ติชันว่า system_s
, vendor_t
และอื่นๆ
ก่อนการอัปเกรด Metadata 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
(เหลือจากการอัปเกรดครั้งก่อน)
- กลุ่ม
- ข้อมูลเมตา 1
- กลุ่ม
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/super
lpdump --slot 1 /dev/block/bootdevice/by-name/super
อัปเดตขั้นตอน
- เริ่มต้นข้อมูลเมตาของพาร์ติชัน
super
- โหลดขอบเขตสําหรับพาร์ติชันแบบไดนามิกของแหล่งที่มาจากข้อมูลเมตา ให้ M เป็นข้อมูลเมตาที่โหลด
-
นํากลุ่มเป้าหมายและพาร์ติชัน (เช่น
foo_t
,bar_t
) ออกจาก M เพื่อให้ M มีเฉพาะพาร์ติชันและกลุ่มที่ลงท้ายด้วย_s
-
เพิ่มกลุ่มเป้าหมายและพาร์ติชันตามช่อง
dynamic_partition_metadata
ในไฟล์ Manifest ของการอัปเดต
ดูขนาดของแต่ละพาร์ติชันได้ในnew_partition_info
- เขียน M ไปยัง T ข้อมูลเมตา
- แมปพาร์ติชันที่เพิ่มลงในโปรแกรมแมปอุปกรณ์เป็นแบบเขียนได้
- ใช้การอัปเดตในอุปกรณ์ที่ถูกบล็อก
- หากจำเป็น ให้แมปพาร์ติชันต้นทางในโปรแกรมแมปอุปกรณ์เป็นแบบอ่านอย่างเดียว ซึ่งจำเป็นสำหรับการโหลดจากอุปกรณ์อื่นเนื่องจากระบบไม่ได้แมปพาร์ติชันต้นทางก่อนการอัปเดต
- ใช้การอัปเดตแบบเต็มหรือแบบ Delta กับอุปกรณ์บล็อกทั้งหมดในช่องเป้าหมาย
- ต่อเชื่อมพาร์ติชันเพื่อเรียกใช้สคริปต์หลังการติดตั้ง แล้วยกเลิกการต่อเชื่อมพาร์ติชัน
- ยกเลิกการแมปพาร์ติชันเป้าหมาย
ก่อนและหลังการอัปเดต พร็อพเพอร์ตี้ระบบต่อไปนี้ควรมีค่าตามลำดับ
ro.boot.dynamic_partitions=true ro.boot.dynamic_partitions_retrofit=true
เพิ่มกลุ่มและพาร์ติชันลงในไฟล์ Manifest อัปเดต
เมื่อทำการอัปเดต OTA ในอุปกรณ์ A/B ที่มีพาร์ติชันแบบไดนามิก หรืออุปกรณ์ A/B ที่เพิ่มการรองรับพาร์ติชันแบบไดนามิก คุณจะต้องเพิ่มกลุ่มและพาร์ติชันลงในไฟล์ Manifest ของการอัปเดต ข้อมูลโค้ดด้านล่างแสดงข้อมูลเพิ่มเติมในไฟล์ Manifest ของการอัปเดตเพื่อรองรับพาร์ติชันแบบไดนามิก ดูเอกสารประกอบโดยละเอียดเกี่ยวกับแต่ละช่องที่ update_metadata.protocol
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; }