Yocto构建移远SC20镜像时RECOVERYFS_EXT4空间不足报错如何解决
问题根因
你当前遇到的是recovery分区的ext4镜像构建时空间不足报错,日志明确提示ext4_allocate_best_fit_partial: failed to allocate 74 blocks, out of space?,当前配置的RECOVERYFS_SIZE_EXT4为268435456字节(即256MB),无法容纳当前配置的recovery镜像所有内容。
解决方案
方案1:调整recovery分区大小(最快捷)
如果你的设备分区表支持调整recovery分区容量,直接修改配置值即可:
- 计算需要增加的容量:当前缺少74个4KB的块,合计约300KB,保守可将分区大小调整为320MB(对应数值为
335544320),或者288MB(对应数值为301989888) - 优先在自定义层的机器配置文件、或者构建目录下的
conf/local.conf中添加如下配置,覆盖默认值,避免修改原厂BSP配置导致后续升级冲突:
RECOVERYFS_SIZE_EXT4 = "335544320"
- 重新构建对应任务即可,无需全量编译:
bitbake machine-recovery-image -c cleansstate && bitbake machine-recovery-image
注意:调整完分区大小后,需要同步修改bootloader中对应的recovery分区表配置,否则镜像刷入设备后会启动异常。
方案2:裁剪recovery镜像内容(分区表不可修改时使用)
如果量产设备的分区表固定无法调整,可裁剪recovery镜像不必要的内容缩小体积:
- 先查看当前recovery根文件系统的实际大小和占用分布:
du -sh /opt/poky/build/tmp-glibc/work/msm8909-oe-linux-gnueabi/machine-recovery-image/1.0-r0/rootfs du -h --max-depth=1 /opt/poky/build/tmp-glibc/work/msm8909-oe-linux-gnueabi/machine-recovery-image/1.0-r0/rootfs
- 移除recovery模式不需要的安装包:在
machine-recovery-image对应的bbappend文件中删除冗余包,例如调试工具、额外字体、非必要外设驱动等:
IMAGE_INSTALL:remove = "strace gdb perf font-* wifi-firmware bluetooth-firmware"
- 增加镜像压缩策略:已开启稀疏镜像(
make_ext4fs的-s参数)的前提下,可额外开启内核模块压缩、删除无用的locale文件、精简selinux策略规则等,通过ROOTFS_POSTPROCESS_COMMAND实现自动裁剪。
内容的提问来源于stack exchange,提问作者Andres Esteban Puerto Lara
相关产品推荐
相关产品推荐

