外接SSD构建含ROS2的Yocto Zeus镜像时启动即失败求助
Yocto Zeus构建ROS2包外接SSD写入失败排查方案
问题背景
- 构建环境:Ubuntu 20.04,Yocto Zeus版本
- 触发场景:原磁盘满后改用外接SSD构建,添加ROS2包后启动构建即崩溃
- 核心现象:报错无法写入
sstate-cache/61目录,已确认目录读写权限正常;删除tmp、sstate-cache目录并重装源码后问题依旧
关键错误信息
IOError: [Errno 22] Invalid argument: '/mnt/ssd/yocto/sstate-cache/61/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
排查与解决步骤
1. 检查SSD文件系统兼容性
Yocto构建依赖Linux原生文件系统的特性(硬链接、权限位、扩展属性等),禁止使用NTFS/FAT32这类非POSIX文件系统:
- 执行
df -T查看SSD的文件系统类型 - 若为非原生文件系统,备份数据后重新格式化为ext4:
sudo mkfs.ext4 /dev/sdXn # 替换为你的SSD分区设备名
2. 验证SSD挂载参数
挂载参数限制会导致Yocto无法完成文件操作:
- 查看当前挂载配置:
mount | grep /path/to/ssd-mount-point - 确保无
noexec、nodev、nosuid这类限制参数,修改/etc/fstab添加正确挂载规则:/dev/sdXn /mnt/ssd ext4 defaults 0 2 - 执行
sudo mount -a重新挂载
3. 确认sstate-cache路径配置
避免使用相对路径或软链接,在build/conf/local.conf中明确设置绝对路径:
SSTATE_DIR = "/mnt/ssd/yocto/sstate-cache" TMPDIR = "/mnt/ssd/yocto/tmp"
4. 检查SSD硬件与IO稳定性
外接SSD的硬件故障或连接问题会触发写入错误:
- 用
smartctl检测SSD健康状态:sudo smartctl -a /dev/sdX # 替换为SSD的设备名 - 执行读写测试验证磁盘可用性:
dd if=/dev/zero of=/mnt/ssd/test_write bs=1G count=1 && rm /mnt/ssd/test_write
5. 彻底重置构建环境
清理所有残留的构建缓存并重新初始化:
rm -rf build/tmp build/sstate-cache build/cache source poky/zeus/oe-init-build-env build
重新配置local.conf后再次尝试构建
内容的提问来源于stack exchange,提问作者folibis
相关产品推荐
相关产品推荐

