当前位置: 首页 > news >正文

Super分区和动态分区

一. 背景:传统分区布局的问题

在深入动态分区之前,我们必须先了解它要解决什么问题

在传统的 Android 设备上,系统磁盘被划分为多个静态分区,每个都有固定的大小。例如:

  • boot: 内核和初始 RAM 磁盘
  • system: 操作系统本身 (Android 框架、系统应用)
  • vendor: 硬件厂商提供的驱动和软件
  • product, system_ext: OEM 或运营商定制软件
  • cache: 临时缓存(现在用途已变)
  • userdata: 用户数据

问题在于:

这些分区的大小在出厂时就已经固定,无法改变。这导致了两个主要痛点:

  1. OTA 更新困难: 如果一次系统更新需要更大的 system 分区空间,但当前设备的 system 分区没有足够的剩余空间,更新就会失败。即使旁边的 vendor 分区有大片空闲,也无法借给 system 使用
  2. 资源浪费: 为了确保未来的更新有足够空间,OEM 厂商通常会为每个分区预留很大的余量。例如,system 分区可能只用了 2GB,但却占用了 3GB 的空间,导致宝贵的存储空间被白白浪费

动态分区就是为了解决这种“分区墙”的问题而诞生的

二. Super 分区:一个“分区中的分区”

Super 分区是动态分区技术的核心和基础。你可以把它理解为一个容器硬盘,而这个硬盘内部再被划分成多个“子分区”

  • 它是什么? Super 分区是设备上一个预先分配好的、固定大小的物理分区(例如 4GB 或 8GB)。它取代了传统的 systemvendorproductsystem_ext 等独立分区
  • 它的内容: Super 分区内部包含了一些逻辑分区,如 systemvendorproductsystem_ext 等。这些逻辑分区不再是独立的物理分区,而是存在于 Super 这个“大盒子”里
  • 只读性: 在设备运行时,Super 分区通常以只读方式挂载,以防止其内容被意外修改

简单比喻:

把你的手机存储空间想象成一个书架

  • 传统布局: 书架被分成很多固定大小的格子,每个格子贴好了标签(systemvendor),一本书只能放在对应的格子里,不能越界
  • Super 分区: 书架有一个很大的、没有隔断的“超级格子”(Super分区)。里面的书(systemvendor 等映像)可以自由摆放,只要总大小不超过这个超级格子的容量即可

三. 动态分区 (Dynamic Partitions):灵活的“子分区”管理

动态分区是指在 Super 分区这个容器内,动态地创建、调整和删除逻辑分区的技术和机制

它的工作原理如下:

  1. 动态调整: 在执行 OTA 更新时,系统不再受限于固定的分区大小。例如,新版本可能需要的 system 更大,但需要的 vendor 更小。动态分区管理器就可以在 Super 分区内动态地重新分配空间,缩小 vendor 的逻辑大小,扩大 system 的逻辑大小,只要它们的总大小不超过 Super 分区的总容量即可
  2. 更新机制: Android 使用了虚拟 A/B (A/B Seamless) 更新或传统的 A/B 更新与动态分区紧密结合。更新过程大致为:
    ○ 系统不是在当前活动的分区上进行更新,而是在 Super 分区内的一组空闲空间备用槽位(Slot) 中创建新的逻辑分区(system_a -> system_b
    ○ 新的系统映像被写入到这些新创建的逻辑分区中
    ○ 更新完成后,通过更新引导加载程序 (bootloader) 中的元数据,将启动槽位指向新的集合(例如从 slot A 切换到 slot B)
    ○ 下次启动时,设备就会从新的、已经更新好的逻辑分区组启动
  3. 关键组件
    ○ lpmake: 用于在编译时将多个系统映像(system.imgvendor.img)打包成一个单独的 super.img 的工具
    ○ lpadmin: 在设备上运行的用户空间工具,负责管理动态分区(创建、调整大小、删除)
    ○ 元数据: Super 分区的开头部分存储了一个元数据区域,记录了内部所有逻辑分区的布局、大小和名称等信息。bootloader 和系统在启动时会读取这些元数据来找到正确的分区

继续用书架的比喻:

  • 动态分区: 意味着你可以随时拿走“超级格子”里的隔板,根据书的大小重新摆放和调整隔板的位置。只要所有书的总厚度不超过超级格子的深度,你就可以自由分配每本书占用的空间

四. 动态分区的主要优势

  1. 灵活的存储空间: 解决了传统分区布局的空间浪费问题。系统、厂商和应用分区的空间可以按需分配,最大化利用存储容量
  2. 更可靠的 OTA 更新: 极大地降低了因空间不足导致的 OTA 更新失败概率。更新过程不再需要处理复杂的跨分区空间调整
  3. 支持无缝更新 (A/B Seamless Updates): 与虚拟 A/B 更新完美配合,用户可以在系统更新的同时继续使用手机,更新在后台进行,重启即可生效,几乎无感知
  4. 简化分区管理: 对 OEM 厂商来说,他们不再需要为不同的设备型号精确计算每个分区的大小,只需确定一个总的 Super 分区大小即可

五. 如何查看设备上的动态分区?

你可以通过 Android 的 ADB shell 来检查你的设备是否使用了动态分区

adb shell
$ ls /dev/block/by-name/super

如果这个 super 符号链接存在,说明你的设备使用了 Super 分区

你还可以使用 lpdump 工具来查看 Super 分区的详细内部布局:

adb shell lpdump /dev/block/by-name/super

或者查看当前槽位的详细信息:

adb shell lpdump --slot 0 # 转储当前槽位的分区信息

输出会显示 Super 分区内所有逻辑分区的名称、大小、属性等信息

总结与对比

特性传统静态分区动态分区 (Super 分区)
分区布局多个独立的物理分区一个大的 Super 物理分区,内含多个逻辑子分区
分区大小固定不变,出厂即确定动态可调,可在 Super 总容量内按需分配
空间利用效率低,每个分区需预留空间,导致浪费效率高,空间池共享,按需使用
OTA 更新容易因空间不足失败,更新机制复杂更可靠,支持无缝更新,更新成功率大幅提升
管理复杂度对OEM来说,需要为每个设备精确规划分区大小对OEM来说更简单,只需设定一个总容量
兼容性所有 Android 设备Android 10 及以上的设备要求使用(GKI 要求)

核心关系:

Super 分区是“容器”,而动态分区是管理这个容器内空间的“机制”。我们通常将这两者结合在一起讨论,因为它们是一个不可分割的整体技术方案

http://www.dtcms.com/a/395815.html

相关文章:

  • 2026华清远见新品发布会:聚焦人工智能嵌入式物联网,打造“虚实融合•软硬协同“智能化教育新生态!
  • 09 - spring security加载流程
  • 【大前端】Android:读取剪切板与禁用剪切板复制功能(完整指南)
  • 第18讲 机器学习与深度学习
  • 数据结构 05(线性:栈和队列)
  • RAG系统嵌入模型怎么选?选型策略和踩坑指南
  • 机器学习 vs. 动力学模型,Ai2 最新研究:仅需 2 分钟,ACE2 可完成一次 4 个月季节预报
  • RNN循环神经网络详解
  • 【Nginx开荒攻略】深入解析Nginx进程管理与信号控制:从原理到实战
  • MySQL与Redis面试问题详解
  • 鸿蒙Next IPC Kit详解:构建高效进程间通信的完整指南
  • 【开题答辩全过程】以 基于springboot的高校疫情防控系统为例,包含答辩的问题和答案
  • Centos7 命令行使用nmcli重置网络配置
  • 如何计算sequence粒度的负载均衡损失
  • 学财税大数据应用,需要考CPA/税务师吗?
  • RAG全栈技术——文档加载器
  • 如何理解Service Mesh(服务网格)
  • android9适配camera gc02m1
  • 【十天成长计划】BoostKit初级班 开班啦!——陪伴式学习,阶梯式成长
  • 【图文详解】强化学习核心框架、数学基础、分类、应用场景
  • Rust简介
  • golang和rust内存分配策略
  • 简历项目之无人机图像目标识别
  • pantherx2 armbian librga-rockchip librga.so 编译安装方法
  • 【精品资料鉴赏】189页工程车辆集团数字化转型SAP解决方案
  • 算法 --- 多源 BFS
  • 15.Linux 硬盘分区管理
  • 2.UE-准备环境(二)-下载虚幻引擎源码和搞成vs项目并使用vs打开
  • G-Star公益行获评CCF优秀技术公益案例,用开源技术传递善意
  • 文化赋能・创意西宁 西宁传媒行业创业发展沙龙成功举办 探索本土企业升级新路径