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 등)에 대한 정보가 포함되어 있습니다. 시스템은
            업데이트 도중 이러한 파티션의 크기를 읽습니다.
            따라서 파티션을 삭제할 수 없습니다.
      
파티션은 업데이트 그룹에 속합니다. 자세한 내용은 동적 파티션 구현을 참조하세요.
기기의 메타데이터에 대한 예는 다음과 같습니다.
- 메타데이터 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/superlpdump --slot 1 /dev/block/bootdevice/by-name/super
업데이트 흐름
- super파티션 메타데이터를 초기화합니다.
- 메타데이터 S에서 소스 동적 파티션의 크기를 로드합니다. M이 로드된 메타데이터가 되도록 합니다.
- M에 _s서픽스가 있는 파티션과 그룹만 포함되도록 M에서 대상 그룹과 파티션 (예:foo_t,bar_t)을 삭제합니다.
- 
              업데이트 매니페스트의 dynamic_partition_metadata필드에 따라 타겟 그룹과 파티션을 추가합니다.
 각 파티션의 크기는new_partition_info에서 확인할 수 있습니다.
- M을 메타데이터 T에 씁니다.
- 추가된 파티션을 기기 매퍼에 작성 가능으로 매핑합니다.
업데이트 전과 후에는 다음 시스템 속성에 각각의 값이 있어야 합니다.
ro.boot.dynamic_partitions=true ro.boot.dynamic_partitions_retrofit=true
그룹 및 파티션을 업데이트 매니페스트에 추가
동적 파티션이 있는 A/B 기기에서 OTA 업데이트를 수행할 때 또는 동적 파티션 지원을 추가하는 A/B 기기에서 업데이트 시 그룹과 파티션을 추가해야 합니다. 아래 스니펫은 동적 파티션을 지원하는 업데이트 매니페스트에 대한 추가 정보를 보여줍니다. 각 필드에 관한 상세 문서는 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;
}