KVM知识与故障处置
虚拟机启动不了、拿不到地址、磁盘报错,先定位故障在哪一层,再按实际环境处理。
01 · 虚拟机启动失败:先查哪个环节?
记录原始报错与对象
保存任务错误文本、发生时间和实例标识,确认是只有一台失败,还是同节点全部失败。区分“启动任务直接失败”和“已运行但黑屏或进不了系统”,两者排查方向不同。
按报错检查前置条件
出现KVM不可用时检查宿主虚拟化支持、固件设置、内核设备及访问权限;宿主本身为虚拟机时,再核上层是否提供嵌套虚拟化。镜像不存在或permission denied则转查存储路径、挂载、运行身份与安全策略。
针对原因处理后复验
在管理平台中纠正已确认的配置或恢复存储访问;需要改变宿主设置时安排维护窗口。不要以关闭安全策略或把镜像全部设为任意用户可写来凑启动成功。复验任务结果、运行状态、控制台及原业务。
libvirt环境还要核对连接URI与权限,避免查到了另一套实例列表;不要把“列表为空”直接当作虚拟机已被删除。
错误文本怎么缩小范围?
| 错误/现象 | 先查证据 | 确认后如何处理 |
|---|---|---|
| KVM加速不可用 | 宿主硬件与固件设置、内核KVM设备权限、上层虚拟化环境 | 修正明确缺失的前置条件,需重启时安排维护;不把切成软件模拟当性能问题已解决。 |
| permission denied或路径不存在 | 存储是否挂载、镜像路径及目录访问权限、QEMU运行身份和安全策略记录 | 只纠正实际路径/授权错误,再试启动;不全盘chmod或关保护。 |
| 实例运行中但无引导盘 | 控制台错误、启动顺序、固件类型、磁盘挂接和格式 | 核对与原安装环境的差异,按平台修配置,不直接重装覆盖原盘。 |
| 管理端看不到实例 | 连接URI、主机/节点、账号权限与平台视图 | 先切回正确对象再判断是否丢失,不立即新建同名实例。 |
日志应取故障时间附近的原始错误,保留版本和任务编号;libvirt发行版可能使用整体守护进程,也可能拆分成多个服务,不把某个固定服务名或日志路径当全部环境通用答案。
02 · 能开机,但拿不到IP或上不了网
先分清“没有地址”“有地址但网关不通”“能访问IP但域名失败”“只有远程桌面连接失败”。先看控制台里的客户机网络状态,不能只凭远程连接失败判断虚拟机没有启动。
确认实际接法
核对虚拟网卡接到哪个网络或网桥,使用NAT还是桥接、是否带VLAN。libvirt的default网络与现场自建桥不是同一个对象;PVE按它自己的网络配置检查。
沿链路逐层定位
检查客户机网卡、地址、路由、DNS,再核虚拟网络状态、宿主网桥和上联端口。只有某一VLAN不通时,核该段标签与交换机配置;不要直接改宿主管理网桥。
只修复确认失效的一环
libvirt提示网络未启动时,先查看该网络的状态与错误日志,确认是否有地址冲突等原因,再按发行版和现场配置恢复。修复后分别验证地址获取、网关、DNS及实际应用,不能只以能ping一次作为验收。
libvirt网络的只读检查
先确认连接到正确主机与URI,再读取配置。default是常见网络名称示例;现场没有这个名字就使用实际网络,不能为匹配命令而新建一个。
virsh uri
virsh net-list --all
virsh net-info default
virsh domiflist VM_NAME
net-list能区分已定义但未运行的网络;domiflist用来对照实例网卡接到了哪个网络/网桥。它们不能证明客户机已经获得地址或应用已通。若网络未运行,结合原错误判断是配置、冲突还是服务问题,再按当前发行版/管理平台恢复。
| 现象 | 下一步检查 | 恢复后验证 |
|---|---|---|
| 没有地址 | 客户机网卡、DHCP来源、虚拟网络状态与对应VLAN | 地址/路由符合实际网段,重连后仍可获得正确配置。 |
| 有地址但网关不通 | 掩码/路由、桥接接口、VLAN及上联;结合策略解释连通性 | 按现场允许的方式验证网关及业务目标,不能只依赖ICMP。 |
| IP可访问但域名失败 | 客户机DNS设置、解析结果与DNS服务可达性 | 解析到预期地址,业务域名连接正常。 |
| 只有远程桌面打不开 | 客户机服务、监听端口、访问策略、凭据与会话状态 | 实际登录、交互和应用正常,而非只看实例运行中。 |
依据:libvirt:default网络未启动、virsh命令手册。网络配置变更可能中断当前连接,应先准备管理访问恢复方式。
03 · 磁盘打不开、找不到父盘或空间不足
先核镜像所在存储是否挂载、宿主或存储池是否有剩余空间,以及实例配置引用的路径、卷和格式是否正确。QCOW2、RAW、VHD等是不同格式,改扩展名不等于转换。
报父盘缺失或镜像链异常时,先保留现场并核对backing chain与原备份。不要只复制差分链末端文件就当成完整系统,也不要在不清楚依赖时删掉“看起来旧”的镜像。
需要离线检查或修复时,先确认镜像没有被实例、备份或其他进程使用,准备可恢复副本,再选择支持当前格式的工具。qemu-img检查与修复不是一回事,不能把修复选项当普通查询执行。
看镜像信息,不等于执行修复
在已确认无人使用、路径及格式正确的离线副本上,可用当前版本支持的qemu-img读取信息;路径为占位示例,不代表现场文件存在。
qemu-img info --backing-chain /path/to/offline-copy.qcow2
对照虚拟容量、文件实际占用、格式和backing file,核依赖是否完整。不要加跳过锁的选项来强读活动镜像。需要一致性检查时,先核格式支持和离线条件;不要附加修复参数。输出中看到损坏或依赖丢失,应保存原副本并优先评估已验证备份。
04 · 虚拟机很卡,是不是加CPU就行?
先观察影响范围与时间:同宿主多台同时慢,优先查共享资源;只有一个应用慢,继续查客户机和应用。将远程画面延迟与系统内部运行慢分开。
记录原场景与基线,每次只调整已定位的一项,再在相同条件复测。工具指标是排查证据,不在这里编造统一IOPS、CPU占用或“加几核必好”的阈值。
libvirt现场可按权限查询连接与实例状态;下面只用于读取已有配置和状态,VM_NAME须替换为真实实例名称,不能直接套用到PVE:
virsh uri
virsh list --all
virsh dominfo VM_NAME
virsh domblklist VM_NAME
virsh domiflist VM_NAME
依据:virsh官方命令手册;排查远程画面另见VDI桌面卡顿。
05 · 快照、备份、迁移,分别验什么?
快照用于保留某个状态,备份要解决恢复所需数据与配置的保存问题。不要只看到“快照成功”就认定已有独立、可恢复的备份;需要核清存储位置、依赖、一致性与恢复方法。
恢复验收先在隔离环境做:确认实例能启动、关键应用与数据可用,避免重复地址或服务身份影响生产。涉及数据库等业务时还需按应用要求核对一致性;本栏目没有执行恢复实验。
迁移失败时保留原任务日志,检查平台支持的迁移方式、目标资源、存储可达性及网络条件。vDisk当前PVE对接手册只写明关机迁移,不能把通用KVM能力推成该入口支持热迁移。
机制参考:QEMU块设备与备份操作;产品限制见下方真实手册。
06 · 在vDisk里,先认准这三个入口
现场已部署PVE但节点连接失败时,按实际错误分别查地址端口、认证realm、证书、节点名与默认存储。池里没有桌面时,先核模板与所属节点及实例补充任务,不直接销毁重建。
处置完成后,验这六项
- 任务列表无本次错误,实例状态与控制台一致。
- 客户机正常启动,网卡/地址/时间符合预期。
- 用真实连接方式验证登录、输入与画面,而非只看VNC画面出现。
- 关键应用、系统盘和独立数据盘分别验证。
- 回到原问题条件复测,并观察是否复发。
- 记录改动、来源和回退状态;批量推广前先试点。