Not enough free space to expand partition: system_b

这个错误信息:

Not enough free space to expand partition: system_b
Cannot resize partition system_b to size 2741215232. Not enough space?

表明在进行 Android OTA 升级时,update_engine 尝试扩展 system_b 分区的大小到 2,741,215,232 字节(约 2.6GB),但由于磁盘空间不足而失败。


🔍 原因分析

Android 使用 A/B 分区机制进行无缝 OTA 升级。OTA 更新会将新系统写入未使用的那个系统分区(例如当前运行在 system_a,则更新 system_b),然后重启切换过去。

当提示 Not enough free space 时,通常是以下原因之一:

1. 动态分区空间不足

  • Android 从 P 版本开始使用 Dynamic Partitions
  • 所有系统镜像(如 systemvendorproduct)被打包进一个超级分区(super partition)中。
  • 如果 super 分区没有足够空间容纳新的 system_b 镜像,则无法扩容。

2. OTA 包太大或分区配置不合理

  • 新版本的 system 分区变大了,但 super 分区预留的空间不够。
  • 或者 OTA 更新包没有适配当前设备的 super 分区容量。

3. 设备存储空间碎片化或占用过高

  • 如果其他分区(如 data、cache)占用了太多空间,可能导致 super 分区无法动态调整。

✅ 解决方案

方案一:增大 super 分区容量(推荐)

在设备的 device tree 或 bootloader 中修改 super 分区的大小,确保其能容纳升级后的所有子分区(system、vendor 等)。

示例(在 flash_super_image.shboard_config.mk 中设置):

BOARD_SUPER_PARTITION_SIZE := 4294967296  # 设置为 4GB

注意:确保你的 eMMC/UFS 总容量足够支撑这个值。


方案二:优化 OTA 包体积

  • 使用 --payload-branding 和压缩算法减小 payload 大小。
  • 检查是否引入了不必要的模块或资源。
  • 在构建 OTA 时启用差分更新(delta update)来减少 payload 体积。
# 构建差分包示例
ota_from_target_files -i PREVIOUS-target_files.zip CURRENT-target_files.zip output_ota.zip

方案三:清理缓存分区 / 格式化 data 分区(临时应急)

如果是因为用户设备上 data 分区占用过多导致无法扩容,可以尝试:

  1. 在 recovery 中格式化 /data/cache(⚠️ 会丢失用户数据)。
  2. 强制 OTA 清除本地数据(适用于刷机场景)。

方案四:强制擦除分区(慎用)

可以在 OTA 脚本中添加擦除命令(在 update-script 中):

ui_print("Erasing cache...");
erase_cache();

或者手动执行:

fastboot erase cache
fastboot erase userdata

🛠️ 排查建议

  1. 查看当前 super 分区大小:

    fastboot getvar super_partition_size
    
  2. 查看当前设备分区布局:

    fastboot oem device-info
    fastboot gpt dump
    
  3. 查看 OTA 包中的分区需求:

    unzip -p your_ota_package.zip payload.bin | payload-dumper-go
    

✅ 总结

问题 原因 建议解决方式
Not enough free space to expand partition: system_b super 分区太小 / OTA 包太大 / 存储碎片 增大 super 分区大小 / 优化 OTA 包 / 擦除 cache/data
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容