跳转到内容

宿主机起不来:救援启动 ​

宿主机开机后到不了登录界面或 Web UI,原因大致分两类:硬件/固件层面没通过自检(这不属于本文范围,先排查硬件),或者能通过自检但引导流程(GRUB/systemd-boot、initramfs、根文件系统挂载)出了问题——这篇讲第二类。

为什么需要它 ​

Proxmox VE 的官方安装 U 盘/ISO 不只能装系统,还内置了几个救援选项,专门用来处理"系统装好了,但起不来了"的场景。搞清楚这几个选项分别做什么、什么时候用哪个,比在网上照抄一条条命令安全得多。

救援时最容易把可恢复的情况变成不可恢复

系统起不来,盘上的数据通常还在。这时候最危险的做法是照着搜到的命令一条条试,尤其是 zpool import -f、分区表重写、格式化、重装这类操作——顺序错了,原本能救回来的数据也救不回来了。

规则:先做只读诊断,确认问题出在哪一层;需要写入的操作(哪怕只是修引导),开始前先把要紧的数据导出到外部介质。看不懂某条命令在做什么,不要在生产机器上执行。

开始之前 ​

  • 准备一个和当前安装版本大版本一致的 Proxmox VE 官方安装 U 盘(8.x 系统用 8.x 的 ISO,9.x 系统用 9.x 的 ISO)。版本差太多时,救援内核可能不认识新系统用到的文件系统特性。
  • 确认能拿到物理控制台或带外管理(IPMI/iKVM),U 盘救援需要在开机画面操作。
  • 如果这台宿主机上的虚拟机/容器数据对你很重要,先确认备份的最新状态——救援顺利的话用不上,但先心里有数。
  • 明确目标:是想尽快恢复运行,还是先把数据抢救出来再决定要不要修。数据比停机时间重要的时候,优先选后者。

操作步骤 ​

1. 先做低风险的观察 ​

正常开机,记录卡在哪一步:

  • 卡在主板自检/选硬盘阶段,还没看到 GRUB 菜单 → 通常是固件/存储控制器设置问题,不是本文范围。
  • 进了 GRUB 菜单但选择后失败,或者直接掉进 grub rescue> 提示符 → 引导配置或 ESP(EFI 系统分区)有问题。
  • GRUB/systemd-boot 正常但内核加载后卡住或反复重启 → 可能是 initramfs 缺失驱动、根文件系统(尤其是 ZFS on root)无法挂载,或者最近装的内核有问题。

记下具体的报错文字或截图,后面无论是自己排查还是找人帮忙都用得上。

2. 用安装介质的 Advanced Options 诊断 ​

插入官方安装 U 盘启动,在启动菜单选 Advanced Options,里面有几个选项,用途不同:

选项做什么适合什么场景
Rescue Boot扫描所有已连接硬盘,找到已安装的 Proxmox VE 系统后,用安装介质自带的内核直接引导进那套系统怀疑是引导器(GRUB/systemd-boot)本身坏了,或者主板固件读不到硬盘的引导扇区;系统本身还完整
Install Proxmox VE(Graphical / Terminal UI,Debug Mode)不真的执行安装,而是在安装流程的几个阶段打开一个调试控制台(Ctrl+D 退出调试控制台继续),也可以直接当成一个带基本工具的 live 系统使用需要手动挂载磁盘、检查/修复 ZFS 池、重装引导器,或者 Rescue Boot 找不到系统时
Install Proxmox VE(Serial Console Debug Mode)同上,但把内核输出定向到串口,适合只有串口带外访问的机器没有显示输出、只有串口控制台的服务器
Test Memory(memtest86+)跑内存检测怀疑硬件内存故障;需要在固件里关掉 Secure Boot 才能跑,且只支持 x86,不支持 arm64

先试 Rescue Boot,失败了再用 Debug Mode 手动排查

Rescue Boot 是"自动挡":它自己找系统、自己引导,省事但在 ZFS on root、部分较新硬件上有时找不到系统或半路卡住。这种情况不代表数据没了,换成 Debug Mode 手动接管即可。

3. Rescue Boot 失败时,用 Debug Mode 手动接管 ​

选 Install Proxmox VE(Graphical/Terminal UI,Debug Mode),在第一个调试控制台按 Ctrl+D 进入 shell。这是一个带基础工具的 live 环境,可以:

  • 用 lsblk、zpool import(不带 -f 的只读探测,不实际导入)确认磁盘和已有的 ZFS 池是否能被正常识别。
  • 需要导入根池检查时,先在这个 live 环境里以临时挂载点导入(不要用 -f 强制导入一个状态不明的池,除非你已经排除了它正被其他系统同时使用的可能),确认能挂载、数据能读到。
  • 数据能读到的话,先把要紧的东西(尤其是 /etc/pve 对应的 /var/lib/pve-cluster/config.db,以及任何没有异地备份的虚拟机磁盘)复制到外部 U 盘或通过网络传出去。这一步做完,后面的修复操作即使失败也不会造成数据损失。
  • 数据确认安全之后,再着手修复引导:chroot 进已挂载的系统,执行 proxmox-boot-tool status 看当前 ESP 状态,proxmox-boot-tool refresh 重新同步引导配置,或者 proxmox-boot-tool reinit 在引导器配置损坏时重新初始化。具体用 GRUB 还是 systemd-boot 由原系统的引导方式决定,proxmox-boot-tool status 的输出会告诉你。

强制导入、重新分区、格式化这几类操作,做之前必须先确认数据已经导出

zpool import -f、mkfs、重新分区、proxmox-boot-tool format 都会改变磁盘上的状态,操作对象选错(比如误把数据盘当成系统盘)会导致数据永久丢失,无法回退。这几步开始前:

  1. 用 lsblk -o NAME,SIZE,MODEL,SERIAL 核对设备,不要只看 /dev/sda 这种可能因插拔顺序漂移的名字。
  2. 确认上一步的数据导出已经完成、能在别的机器上打开验证。
  3. 只在测试机或不重要的数据上练习过这套操作流程,再用到生产机器上。

回退方式:这几类操作大多没有回退——这正是要求"先导出数据"的原因。如果还没做到这一步,先退回去做。

4. 修不好,重装 + 恢复往往更快更安全 ​

如果排查半天问题定位不到,或者定位到了但修复难度和风险都很高,评估重装系统再恢复备份是否更划算:

  • 前提是备份真的可用——用过恢复演练验证过的备份,而不是"应该没问题"的备份。
  • /etc/pve 的配置如果有单独归档,重装后按抢救 /etc/pve 与重建节点里的方法找回虚拟机/容器定义。
  • 虚拟机磁盘如果在独立的存储(单独的盘、NAS、Ceph)上且没有被破坏,重装宿主机系统本身不会影响它们,重装后重新添加存储、重建客户机配置即可挂回。

检查结果 ​

引导修复完成后逐项确认:

sh
# 宿主机 shell,正常登录后执行
systemctl status pve-cluster pvedaemon pveproxy   # 三个核心服务都应是 active (running)
pvecm status                                       # 单节点也应正常输出,不报错
qm list                                             # 虚拟机列表和记忆中的一致
pct list                                            # 容器列表和记忆中的一致

Web UI 能正常打开,虚拟机/容器能看到并且能开机,才算真正恢复。

常见问题 ​

Rescue Boot 报 "unable to find boot disk automatically" 或类似找不到系统。 常见于 ZFS on root 的机器,Rescue Boot 的自动扫描有时认不出 ZFS 池。改用 Debug Mode 手动 zpool import 排查,而不是反复重试 Rescue Boot。

升级到 PVE 9.2 之后,机器开机直接进了 memtest86+ 而不是正常启动。 这是 9.2 版本已知的一个引导条目问题:新增的 memtest86+ 引导项在部分通过带外/IPMI 安装、由 proxmox-boot-tool 管理引导的机器上可能被排到了默认启动项前面。用 efibootmgr -v 确认当前的启动项顺序,把正常的引导项(systemd-boot 或签名过的 shim,具体路径因是否启用 Secure Boot 而不同)调回默认,而不是当成本文描述的引导故障来处理。

进了 grub rescue> 提示符。 通常是 GRUB 自身的配置或模块找不到。用 Debug Mode 手动接管,chroot 后执行 update-grub(GRUB 系统)或按上文用 proxmox-boot-tool refresh。

磁盘本身有坏道或者读取报错。 这是硬件故障,救援模式救不了坏道本身。第一优先级是只读方式尽可能多地把数据导出,不要在坏盘上反复写入尝试修复。

参考资料 ​

Proxmox VE 非官方中文使用指南,与 Proxmox Server Solutions GmbH 无隶属关系。