Android 10에서는 무선(OTA) 업데이트 중에 파티션을 만들고 크기를 조절하고 제거할 수 있는 사용자 공간 파티션 나누기 시스템인 동적 파티션을 지원합니다.
이 페이지에서는 Android 9 이하를 실행하는 기기에서 동적 파티션이 지원되는 상태로 A/B 기기의 업데이트가 진행되는 동안 동적 파티션의 크기를 조정하는 방법을 설명합니다.
배경
기기에는 한 개의 super 파티션이 있습니다. 이 파티션은 슬롯 서픽스가 되지 않습니다. 블록 기기는 fstab의 /misc 항목과 함께 blk_device에 존재해야 합니다. 예를 들어 fstab 파일이 다음을 나열하는 경우:
/dev/block/bootdevice/by-name/misc /misc # Other fields
그러면 super의 블록 기기가 /dev/block/bootdevice/by-name/super에 있어야 하지만 super 파티션은 fstab 파일에 나열할 필요가 없습니다.
super 파티션에는 2개의
메타데이터 슬롯이 있습니다. 두 슬롯의 번호는
파티션 A/B 슬롯에 해당하는 0과 1로 지정됩니다. 이 문서에서는 메타데이터 슬롯을
메타데이터 S(소스) 및 메타데이터 T(타겟)라고 부릅니다. 마찬가지로 파티션은 system_s, vendor_t 등으로 지칭됩니다.
업그레이드 전에는 메타데이터 S에 사용 중인 동적 파티션 (일반적으로 system_s, vendor_s, product_s 등)에 대한 정보가 포함되어 있습니다. 시스템은
업데이트 도중 이러한 파티션의 크기를 읽습니다.
따라서 파티션을 삭제할 수 없습니다.
동적 파티션이 있는 A/B 기기에서 OTA 업데이트를 수행할 때 또는 동적 파티션 지원을 추가하는 A/B 기기에서 업데이트 시 그룹과 파티션을 추가해야 합니다. 아래 스니펫은 동적 파티션을 지원하는 업데이트 매니페스트에 대한 추가 정보를 보여줍니다. 각 필드에 관한
상세 문서는
update_metadata.proto를 참조하세요.
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 OpenJDK는 Oracle 및 Oracle 계열사의 상표 또는 등록 상표입니다.
최종 업데이트: 2025-07-27(UTC)
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["필요한 정보가 없음","missingTheInformationINeed","thumb-down"],["너무 복잡함/단계 수가 너무 많음","tooComplicatedTooManySteps","thumb-down"],["오래됨","outOfDate","thumb-down"],["번역 문제","translationIssue","thumb-down"],["샘플/코드 문제","samplesCodeIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2025-07-27(UTC)"],[],[],null,["# OTA for A/B devices with dynamic partitions\n\nAndroid 10 supports\n[dynamic partitions](/docs/core/ota/dynamic_partitions), a userspace partitioning\nsystem that can create, resize, and destroy partitions during over-the-air (OTA) updates.\n\nThis page describes how to resize dynamic partitions during an update for A/B devices that\nlaunched with dynamic partitions support, for devices running **Android 9 and\nlower**.\n\nBackground\n----------\n\n\nThere's one `super` partition on the device. This\npartition isn't slot suffixed. The block device must exist along\nwith the `blk_device` entry for `/misc` in\n`fstab`. For example, if the `fstab` file lists: \n\n```text\n/dev/block/bootdevice/by-name/misc /misc # Other fields\n```\n\n\nThen the block device for `super` must exist in\n`/dev/block/bootdevice/by-name/super`, but the\n`super` partition doesn't need to be listed in the\n`fstab` file.\n\n\nIn the `super` partition, there are two\n*metadata slots* , numbered 0 and 1, corresponding to\nA/B slots for partitions. In this page, the metadata slots are\ncalled Metadata S (source) and Metadata T (target). Similarly,\npartitions are referred to as `system_s`,\n`vendor_t`, and so on.\n\n\nBefore the upgrade, Metadata S contains the information for the\ndynamic partitions being used (typically, `system_s`,\n`vendor_s`, `product_s`, and so on). The system\nreads the extents for these partitions during the update, so they\ncan't be deleted.\n\n\nPartitions belong to *update groups* . See\n[Implementing\nDynamic Partitions](/docs/core/ota/dynamic_partitions/implement) for details.\n\n\nAn example of metadata on a device is as follows.\n\n- Metadata 0\n - Group `foo_a`\n - Partition `system_a`\n - Partition `product_services_a`\n - Other partitions updated by Foo\n - Group bar_a\n - Partition `vendor_a`\n - Partition `product_a`\n - Other partitions updated by Bar\n - Group `foo_b` (leftover from previous upgrade)\n - Group `bar_b` (leftover from previous upgrade)\n- Metadata 1\n - Group `foo_a` (leftover from previous upgrade)\n - Group `bar_a` (leftover from previous upgrade)\n - Group `foo_b`\n - Partition `system_b`\n - Partition `product_services_b`\n - Other partitions updated by Foo\n - Group `bar_b`\n - Partition `vendor_b`\n - Partition `product_b`\n - Other partitions updated by Bar\n\n\nYou can use the `lpdump` tool (source code under\n`system/extras/partition_tools`) to dump the metadata on\nyour device. For example: \n\n lpdump --slot 0 /dev/block/bootdevice/by-name/super\n lpdump --slot 1 /dev/block/bootdevice/by-name/super\n\nUpdate flow\n-----------\n\n1. **Initialize the `super` partition metadata.**\n 1. Load the extents for the source dynamic partitions from Metadata S. Let M be the loaded metadata.\n 2. Remove target groups and partitions (for example, `foo_t`, `bar_t`) from M so that M contains only partitions and groups with the `_s` suffix.\n 3. Add target groups and partitions according to the `dynamic_partition_metadata` field in the update manifest. \n The size of each partition can be found in `new_partition_info`.\n 4. Write M to Metadata T.\n 5. Map the added partitions on the device mapper as writable.\n2. **Apply the update on the block devices.**\n 1. If necessary, map the source partitions on the device mapper as read only. This is necessary for sideloading because the source partitions aren't mapped prior to the update.\n 2. Apply a full or delta update to all block devices at the target slot.\n 3. Mount the partitions to run the post-install script, and then unmount the partitions.\n3. **Unmap the target partitions.**\n\n| **Note:** The extents for both source and target dynamic partitions span across the entire `super` partition. As a result, you must load the source metadata so that these extents aren't used as part of any target partitions.\n\n\nBefore and after the update, the following system properties should have\nthe respective values: \n\n```scdoc\nro.boot.dynamic_partitions=true\nro.boot.dynamic_partitions_retrofit=true\n```\n\nAdd groups and partitions to the update manifest\n------------------------------------------------\n\n\nWhen performing an OTA update on an A/B device with dynamic partitions,\nor an A/B device that is adding support for dynamic partitions, you\nneed to add groups and partitions to the update manifest. The snippet\nbelow shows additional information on the update manifest to support\ndynamic partitions. See\n[update_metadata.proto](https://android.googlesource.com/platform/system/update_engine/+/android16-release/update_metadata.proto)\nfor detailed documentation on each field. \n\n```scdoc\nmessage DeltaArchiveManifest {\n optional DynamicPartitionMetadata dynamic_partition_metadata;\n}\n\nmessage DynamicPartitionMetadata {\n repeated DynamicPartitionGroup groups;\n}\n\nmessage DynamicPartitionGroup {\n required string name;\n optional uint64 size; // maximum size of group\n repeated string partition_names;\n}\n```"]]