Skip to content

宿主机来电自动启动配置指南

主机 yi(ai-ear.cn)断电恢复后自动开机设置。 目标:AC 断电恢复供电后,主机自动上电启动,无需人工干预。

1. 主机环境

项目信息
主机名yi
SSH 地址ssh -p 6022 zai@ai-ear.cn
sudo 密码xxx
主板Intel X99(AMI Aptio V BIOS 5.11)
CPUIntel Xeon E5-2690 v3 @ 2.60GHz
系统Ubuntu 20.04.6 LTS (UEFI 64-bit)
虚拟化libvirt / KVM(harbor、jumpserver)
启动方式UEFI(OVMF)
磁盘KINGSTON SNV2S1000G (NVMe)

2. 当前状态诊断

bash
# 查看电源管理寄存器
sudo setpci -s 00:1f.0 0xa0.l   # GEN_PMCON_1
sudo setpci -s 00:1f.0 0xa4.w   # GEN_PMCON_2

# 查看 ACPI 唤醒表
cat /proc/acpi/wakeup

# 查看 UEFI 变量
ls /sys/firmware/efi/efivars/

# 查看 CMOS NVRAM
sudo xxd /dev/nvram

诊断结果:

GEN_PMCON_1 (0xA0) = 0x60203a18
  Bit 7 (BILD - BIOS Interface Lock Down) = 1 ← 已锁定
GEN_PMCON_2 (0xA4) = 0x1849
  Bit 1 (AfterG3En - 来电自启动) = 0 ← 关闭

⚠️ BILD(BIOS Interface Lock Down)已启用,操作系统无法修改 PCH 电源管理寄存器。

3. 为什么无法远程修改

经过以下尝试,均无法从 OS 侧修改来电自启动设置:

方法结果原因
setpci -s 00:1f.0 0xa4.w=184b写入无效,值未变BILD 锁定了 GEN_PMCON_2 寄存器
修改 EFI OsIndications 变量写入被拒绝固件未支持从 OS 修改该选项
修改 CMOS /dev/nvram扩展区域全为 0xFF设置存储在 SPI Flash,非传统 CMOS
查找 AMI Setup EFI 变量未找到AMI Aptio V 的 Setup 变量未暴露给 Linux
chipsec 工具未安装(pip3 不可用)需要编译内核模块

结论:必须进入 BIOS 界面修改。

4. BIOS 设置步骤(需要物理接触 / KVM / VNC)

4.1 进入 BIOS

bash
# 方法一:设置下次启动进入 BIOS Setup(如果固件支持)
sudo systemctl reboot --firmware-setup

# 方法二:直接重启后按 DEL 键
sudo reboot
# 开机时连续按 DEL(Delete)键进入 BIOS

如果有 VNC / 远程 KVM 设备(如 PiKVM、BMC),可通过它们远程操作 BIOS。

4.2 找到来电自启动选项

进入 BIOS 后,路径通常为:

Advanced → APM Configuration → Restore on AC Power Loss

不同主板可能的路径:

路径说明
Advanced → APM → Restore on AC Power Loss最常见(AMI BIOS)
Power → AC Power Loss Restart部分主板
Chipset → PCH-IO Configuration → State After G3Intel 平台
Advanced → ACPI Settings → Power On After Power Failure少数主板

4.3 设置选项

效果选择
Power Off断电恢复后保持关机❌ 当前设置
Power On断电恢复后自动开机选择此项
Last State恢复到断电前的状态备选方案

4.4 保存退出

F10 → 选择 Yes 保存并退出 → 主机自动重启。

5. 验证设置

重启后 SSH 进入主机验证:

bash
# 验证 GEN_PMCON_2 寄存器 bit 1 是否变为 1
sudo setpci -s 00:1f.0 0xa4.w
# 期望结果:最后一位为奇数(bit 1 = 1)
# 例如:184b 表示 bit 0=1, bit 1=1 → 来电自启动已开启 ✅

# 手动验证(可选):
# 1. SSH 关闭主机:sudo shutdown -h now
# 2. 物理拔掉电源线,等待 10 秒
# 3. 重新插上电源
# 4. 观察主机是否自动启动

6. 虚拟机自动启动确认

主机来电自启动后,libvirt 虚拟机也会自动启动(已配置 autostart):

bash
# 确认虚拟机 autostart 状态
virsh list --all
# 应该看到 harbor 和 jumpserver 都已启动

# 查看 autostart 配置
ls -la /etc/libvirt/qemu/autostart/
# 应包含 harbor.xml 和 jumpserver.xml 的符号链接

# 如果虚拟机未设置 autostart,执行:
virsh autostart harbor
virsh autostart jumpserver

7. 补充:通过 GRUB 设置固件启动(备选方案)

如果 BIOS 不支持直接设置来电自启动,可以通过 GRUB 在系统启动时自动执行一些初始化操作:

bash
# /etc/default/grub 中添加内核参数确保 ACPI 正常工作
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi=force"

# 更新 GRUB
sudo update-grub

这不能替代 BIOS 的来电自启动设置,但可以确保系统的 ACPI 电源管理功能正常工作。

8. 相关文件

文件说明
/etc/libvirt/qemu/harbor.xmlharbor 虚拟机配置
/etc/libvirt/qemu/jumpserver.xmljumpserver 虚拟机配置
/etc/libvirt/qemu/autostart/虚拟机自启动符号链接
/etc/libvirt/storage/images.xml存储池配置
/sys/firmware/efi/efivars/UEFI 变量
/dev/nvramCMOS NVRAM 设备

9. 参考