autostart 是干什么的
virsh autostart 让虚机在宿主 libvirtd 启动时自动开机,实现方式是在 /etc/libvirt/qemu/autostart/ 目录下为该域建立指向定义文件的符号链接。前提是 libvirtd 服务自身已开机启用;对依赖外置存储或网络的虚机,存储尚未就绪时自启会失败,需要在宿主侧安排启动顺序。
基本信息
| 开启 | virsh autostart vm1 |
|---|---|
| 关闭 | virsh autostart --disable vm1 |
| 目录位置 | /etc/libvirt/qemu/autostart/ |
| 前提 | libvirtd 需开机运行(systemctl enable libvirtd) |
| 作用范围 | 仅本机 libvirtd,节点间不感知也无顺序保证 |
典型使用场景
- 单机虚拟化宿主上让关键虚机随宿主重启自动恢复
- 实验与测试环境里批量拉起常用虚机
- 宿主机做计划停电维护后恢复服务
- 对依赖外置存储的虚机,先确认存储挂载再让 libvirtd 拉起虚机
设置与核对
设置与核对
sudo virsh autostart vm1 # 开启自启
sudo virsh autostart --disable vm1 # 关闭自启
ls -l /etc/libvirt/qemu/autostart/ # 查看自启软链接是否指向正确的定义
virsh dominfo vm1 | grep -i autostart # 确认状态为 Autostart: enable
systemctl is-enabled libvirtd # 前提检查:libvirtd 是否开机启用
sudo systemctl enable --now libvirtd # 未启用时补上状态核对
| 项目 | 正常表现 | 异常表现 |
|---|---|---|
| 自启状态 | dominfo 显示 enable | 显示 disable:配置未生效或被后续操作覆盖 |
| 软链接 | 目录中存在与域名一致的链接 | 链接指向已删除的定义,开机时静默跳过 |
| libvirtd | is-enabled 返回 enabled | 服务未启用,宿主重启后所有虚机都不起来 |
| 虚机状态 | 重启后为 running | 为 shut off:多为存储或网络未就绪导致启动失败 |
自启失败要看两处日志:宿主侧 journalctl -u libvirtd 看服务与启动顺序,虚机侧 /var/log/libvirt/qemu/<域名>.log 看 QEMU 的报错。
自启不等于健康检查:libvirtd 只负责拉起虚机进程,不监控 guest 内的服务状态;应用级拉起仍要靠 guest 内的 systemd 单元或启动脚本。
自启失败排查顺序
- 确认 libvirtd 是否开机启用,服务没起来虚机自然也不会起
- 检查 autostart 目录里的链接是否指向仍然存在的域定义文件
- 查看 /var/log/libvirt/qemu/<域名>.log,确认是否有存储或网络路径缺失
- 对依赖外置存储的虚机,确认存储挂载在 libvirtd 之前完成,必要时用 systemd 依赖控制顺序