Ubuntu 22.04中Snapcraft构建卡在实例PREPARING状态并失败
Ubuntu 22.04中Snapcraft构建卡在实例PREPARING状态并失败
我完全能理解你跟着Snapcraft教程构建时,遇到实例一直卡在PREPARING状态最后失败的挫败感。结合你提供的详细日志,咱们来一步步排查和解决问题:
问题核心分析
从你贴的日志里能定位到两个关键异常:
- 虽然LXC实例显示
RUNNING,但snapcraft始终检测到它的状态停留在PREPARING,最终因超时触发失败; - LXD容器的系统日志里暴露了根源问题:
同时还有systemd-remount-fs[40]: mount: /: cannot remount /dev/root read-write, is write-protected. systemd[1]: systemd-remount-fs.service: Failed with result 'exit-code'./sbin/modprobe缺失的提示,这大概率是因为基础实例的镜像不完整,或者LXD存储池配置异常,导致根文件系统被强制挂载为只读,进而让系统初始化服务启动失败。
分步解决方案
1. 清理异常的基础实例
先把已经出问题的实例彻底删掉,避免它干扰后续操作:
lxc --project snapcraft delete base-instance-snapcraft-buildd-base-v30--ebe48dea8e0ee8ae59ed
同时用snapcraft自带的命令清空构建环境:
snapcraft clean --build-environment
2. 确保工具是最新版本
旧版本的Snapcraft或LXD可能存在已知的镜像/配置bug,先更新到最新版:
sudo snap refresh snapcraft sudo snap refresh lxd
更新完成后重启LXD服务,确保配置生效:
sudo snap restart lxd
3. 检查LXD存储池的读写状态
根文件系统只读的问题常和存储池配置有关,先查看当前存储池列表:
lxc storage list
然后查看默认存储池的详细配置:
lxc storage show default
重点检查两个点:
- 存储池的
used空间是否已满,空间不足会触发只读保护; - 存储池对应的物理目录(比如
/var/snap/lxd/common/lxd/storage-pools/default)是否有读写权限,用ls -ld查看,确保所有者是root:root且权限为drwxr-xr-x。
如果空间不足,扩容或清理无用数据;如果权限异常,修复权限:
sudo chown root:root /var/snap/lxd/common/lxd/storage-pools/default sudo chmod 755 /var/snap/lxd/common/lxd/storage-pools/default
4. 重新尝试构建
完成上述操作后,回到项目目录重新运行snapcraft:
snapcraft --verbosity=info
这次工具会重新拉取完整的基础镜像,创建正常的可写实例,应该能顺利完成初始化。
5. 手动深度排查(若问题仍存在)
如果还是卡在PREPARING,可以在等待时手动进入实例查看实时状态:
lxc --project snapcraft exec base-instance-snapcraft-buildd-base-v30--xxxxxx bash
进入后先检查根文件系统的挂载模式:
mount | grep ' / '
如果显示ro(只读),尝试手动重新挂载为读写:
mount -o remount,rw /
然后启动失败的服务,查看具体错误细节:
systemctl start systemd-remount-fs.service journalctl -xeu systemd-remount-fs.service
根据输出的错误信息再针对性修复。
补充说明
日志里的modprobe缺失提示,本质是根文件系统只读导致无法加载必要模块,只要解决了根挂载的读写问题,这个提示也会随之消失。
备注:内容来源于stack exchange,提问作者Tyler Weaver
相关产品推荐
相关产品推荐

