目 录CONTENT

文章目录

记录一次pve意外断电导致单个容器启动失败

过客
2025-12-13 / 0 评论 / 1 点赞 / 34 阅读 / 0 字

娃在书房里玩,无意间把pve服务器的电源插头给碰掉了,再次开机时,发现有一个容器启动失败了。

分析

  • 看逻辑是运行了 lxc.hook.pre-start 脚本钩子导致的失败,因为有容器可能启动,肯定不是全局钩子。检查lxc100的配置,发现没有相关的配置,应该不是配置出问题了。
pct config 100 | grep -i hook
# 输出为空,没有相关配置

可能1:容器元数据或运行时状态损坏

LXC 在启动时会读取容器的​运行时状态目录​(如 /var/lib/lxc/100/),如果断电发生在关键写入阶段,可能导致:

  • 残留的临时 hook 脚本未清理
  • 锁文件、状态文件损坏
  • 配置缓存不一致

即使 /etc/pve/lxc/100.conf 是干净的,LXC 底层仍可能因残留文件误判需要执行 hook。清理容器运行时状态

# 删除 LXC 运行时目录(不会删除 rootfs 数据!)
rm -rf /var/lib/lxc/100/
rm -rf /var/lib/vz/tmp/*

# Proxmox 会在下次启动时自动重建 /var/lib/lxc/100/
pct start 100
  • 结果:还是启动失败。

可能2:容器配置莫名其妙损坏

  • 保留磁盘,重建容器
# 1. 备份当前配置
cp /etc/pve/lxc/100.conf /root/100.conf.bak

# 2. 记录 rootfs 位置
ROOTFS=$(pct config 100 | awk '/^rootfs:/ {print $2}')

# 3. 手动删除配置和运行时(不清磁盘)
rm -f /etc/pve/lxc/100.conf
rm -rf /var/lib/lxc/100/
rm -f /etc/pve/lock/100.lock

# 4. 用原磁盘重新创建容器(--rootfs 指向原磁盘)
pct create 100 $ROOTFS \
  --ostype $(grep ostype /root/100.conf.bak | cut -d' ' -f2) \
  --cores $(grep cores /root/100.conf.bak | cut -d' ' -f2) \
  --memory $(grep memory /root/100.conf.bak | cut -d' ' -f2) \
  --net0 $(grep net0 /root/100.conf.bak | cut -d' ' -f2-) \
  --features $(grep features /root/100.conf.bak | cut -d' ' -f2) 

# 5. 手动对比一下新创建的 /etc/pve/lxc/100.conf 与备份的配置 /root/100.conf.bak 有啥区别,缺少的可以手动修改。

# 6. 启动
pct start 100
  • 结果:依然启动失败。

可能3:容器磁盘是否损坏

经过前二步,基本判断是容器磁盘出问题了,查看配置,假设容器磁盘为:
/var/lib/vz/images/100/vm-100-disk-0.raw

  • 尝试挂载磁盘
# 尝试只读挂载测试
mkdir -p /mnt/test100
mount -o ro,loop "/var/lib/vz/images/100/vm-100-disk-0.raw" /mnt/test100 && echo "OK" || echo "Mount failed"
  • 结果挂在失败
mount: /mnt/test100: cannot mount /dev/loop7 read-only.
       dmesg(1) may have more information after failed mount system call.
Mount failed
  • 检查文件系统,尝试修复
# 检查是否是有效的 ext4/xfs 文件系统
file -s "/var/lib/vz/images/100/vm-100-disk-0.raw"

# 强制检查文件系统(ext4)
fsck -y -f "/var/lib/vz/images/100/vm-100-disk-0.raw"

# 如果是 xfs(不能用 fsck!)
xfs_repair -n "/var/lib/vz/images/100/vm-100-disk-0.raw"        # 先只读检查
xfs_repair "/var/lib/vz/images/100/vm-100-disk-0.raw"           # 修复(会修改数据!)

  • 清理 Proxmox 临时目录,重启
rm -rf /var/lib/lxc/100/
rm -rf /var/lib/vz/tmp/*
pct start 100
  • 结果:重启成功。

结论

做好备份是防止意外的最佳办法。

1
Pve
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区