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 และอื่นๆ
ก่อนการอัปเกรด ข้อมูลเมตา S จะมีข้อมูลสำหรับพาร์ติชันแบบไดนามิกที่ใช้ (โดยปกติคือ system_s, vendor_s, product_s และอื่นๆ) ระบบ
จะอ่านขอบเขตของพาร์ติชันเหล่านี้ในระหว่างการอัปเดต ดังนั้นจึง
ลบไม่ได้
พาร์ติชันเป็นของกลุ่มการอัปเดต ดูรายละเอียดได้ที่ การติดตั้งใช้งาน พาร์ติชันแบบไดนามิก
ตัวอย่างข้อมูลเมตาในอุปกรณ์มีดังนี้
- ข้อมูลเมตา 0
- กลุ่ม
foo_a- พาร์ติชัน
system_a - พาร์ติชัน
product_services_a - พาร์ติชันอื่นๆ ที่ Foo อัปเดต
- พาร์ติชัน
- Group 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/superlpdump --slot 1 /dev/block/bootdevice/by-name/super
โฟลว์การอัปเดต
- เริ่มต้นข้อมูลเมตาของพาร์ติชัน
super- โหลดขอบเขตสำหรับพาร์ติชันแบบไดนามิกของแหล่งที่มาจาก Metadata S. ให้ M เป็นข้อมูลเมตาที่โหลด
-
นำกลุ่มเป้าหมายและพาร์ติชัน (เช่น
foo_t,bar_t) ออกจาก M เพื่อให้ M มี เฉพาะพาร์ติชันและกลุ่มที่มีคำต่อท้าย_s -
เพิ่มกลุ่มเป้าหมายและพาร์ติชันตามฟิลด์
dynamic_partition_metadataในไฟล์ Manifest ของการอัปเดต
คุณดูขนาดของแต่ละพาร์ติชันได้ในnew_partition_info - เขียน M ไปยังข้อมูลเมตา T
- แมปพาร์ติชันที่เพิ่มใน Device Mapper เป็นแบบเขียนได้
- ใช้การอัปเดตในอุปกรณ์ที่บล็อก
- หากจำเป็น ให้แมปพาร์ติชันต้นทางในตัวแมปอุปกรณ์เป็น อ่านอย่างเดียว ซึ่งจำเป็นสำหรับการโหลดด้านข้างเนื่องจากไม่ได้แมปพาร์ติชันแหล่งที่มาก่อนการอัปเดต
- ใช้การอัปเดตแบบเต็มหรือแบบเดลต้ากับอุปกรณ์บล็อกทั้งหมดใน สล็อตเป้าหมาย
- เมานต์พาร์ติชันเพื่อเรียกใช้สคริปต์หลังการติดตั้ง แล้ว ยกเลิกการเมานต์พาร์ติชัน
- ยกเลิกการแมปพาร์ติชันเป้าหมาย
ก่อนและหลังการอัปเดต พร็อพเพอร์ตี้ของระบบต่อไปนี้ควรมีค่าที่เกี่ยวข้อง ดังนี้
ro.boot.dynamic_partitions=true ro.boot.dynamic_partitions_retrofit=true
เพิ่มกลุ่มและการแบ่งพาร์ติชันลงในไฟล์ Manifest การอัปเดต
เมื่อทำการอัปเดต OTA ในอุปกรณ์ A/B ที่มีพาร์ติชันแบบไดนามิก หรืออุปกรณ์ A/B ที่เพิ่มการรองรับพาร์ติชันแบบไดนามิก คุณ ต้องเพิ่มกลุ่มและพาร์ติชันลงในไฟล์ Manifest ของการอัปเดต ข้อมูลโค้ด ด้านล่างแสดงข้อมูลเพิ่มเติมเกี่ยวกับไฟล์ Manifest ของการอัปเดตเพื่อรองรับ พาร์ติชันแบบไดนามิก ดูเอกสารประกอบแบบละเอียดเกี่ยวกับแต่ละช่องได้ที่ 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;
}