KVM虚拟机圈子里说虚拟机“拉出来了”,实际操作对应两种场景。第一种执行`virsh undefine`,虚拟机从管理器列表移除,XML配置文件被删除,但磁盘镜像文件保留,这种情况可以用`virsh define`重新导入恢复。第二种虚拟机还保存在列表,只是被挂起或者运行异常,需要恢复正常运行状态。两种场景操作方式不一样,第一步要先分清属于哪一类。
## 先确认虚拟机到底“丢”到什么程度
登录宿主机,执行这条命令查看当前虚拟机状态:
```bash
virsh list --all
```
如果虚拟机名称在列表内,状态标注`shut off`或者`paused`,代表配置文件还存在,只是没有正常运行。如果列表找不到这台虚拟机,说明定义文件已经删除,需要依靠备份XML文件重新导入。
还有一种隐蔽情况,`virsh list --all`查询不到虚拟机,但磁盘文件还存放在`/var/lib/libvirt/images/`或者自定义存储目录,XML配置文件有可能提前导出备份,也可能没有。没导出备份的情况下,可以去`/etc/libvirt/qemu/`目录查找残留配置文件,碰碰运气。
## 用 virsh define 把虚拟机“放回去”
如果之前已经通过`virsh dumpxml`导出XML文件,恢复操作比较简单。把XML文件放回对应目录,执行命令完成定义:
```bash
virsh define /path/to/your-vm.xml
```
执行完成再次运行`virsh list --all`,虚拟机会重新出现在列表,状态为`shut off`。此时libvirt接管虚拟机,但不会自动启动。
如果没有导出XML,磁盘镜像文件还保留,理论上能够依据磁盘文件反向生成配置,但操作繁琐。优先查看`/etc/libvirt/qemu/`目录下有没有遗留的`.xml`备份文件,部分场景执行`virsh undefine`不会立刻清空目录内容,可以尝试查找。
还有一种情况XML文件完好,但是文件内磁盘路径填写错误。举个例子,虚拟机原始磁盘路径为`/kvm/img/docker02.img`,恢复时镜像迁移到别的目录,`virsh define`命令可以正常执行,但`virsh start`启动会提示找不到磁盘。这时需要把镜像移动到XML标注路径,或者使用`virsh edit`修改磁盘路径,再重新执行定义操作。
## 用 virsh start 启动恢复后的虚拟机
定义操作完成,直接启动虚拟机:
```bash
virsh start your-vm-name
```
启动时需要直接查看控制台输出,追加`--console`参数:
```bash
virsh start your-vm-name --console
```
该命令会把虚拟机控制台绑定到当前终端,相当于直接在虚拟机显示器上观察开机流程。
启动后执行`virsh list`核对状态,状态显示`running`就代表恢复成功。
## 如果是被挂起了,用 virsh resume
有时候虚拟机没有执行undefine操作,只是执行`virsh suspend`挂起。`virsh list --all`能够查到虚拟机,状态显示`paused`。这种场景不需要define,直接执行resume恢复运行:
```bash
virsh resume your-vm-name
```
命令执行立即生效,虚拟机从暂停位置继续运行,类似物理机唤醒睡眠状态。
resume执行无效的情况下,可以尝试`virsh start`;但列表内已存在的虚拟机执行start会报错提示已定义。这时可以先执行`virsh destroy`强制关机,再执行start,或者优先尝试resume。
## 几个容易卡住的地方
恢复操作最常见报错是磁盘文件路径不匹配。`virsh define`执行时不会校验磁盘文件是否真实存在,定义成功,启动阶段抛出`Cannot access storage file`。解决办法核对XML内`
`字段路径,和磁盘实际存放位置保持一致,不一致就用`virsh edit your-vm-name`修改。
另一类故障是权限异常。磁盘文件从其他位置拷贝过来,文件属主不是`qemu`或者`libvirt`,虚拟机启动触发权限拒绝报错。检查磁盘文件属主和权限,一般需要设置为`qemu:qemu`或者`libvirt-qemu:kvm`。
网络配置丢失也是恢复后高频问题。XML文件内固定MAC地址,恢复后网络可以直接连通;MAC地址随机生成,恢复后MAC会变更,DHCP分配IP和之前不一样。可以直接在XML写入固定MAC,或者进入虚拟机系统重新配置网络参数。
最后提醒,`virsh undefine`默认只会删除XML配置,磁盘镜像保留。如果追加`--remove-all-storage`参数,磁盘文件会同步删除,数据无法找回。恢复前优先确认磁盘镜像文件是否存在,这是最重要的前置检查。
免责声明:本文提供的方法与建议仅供技术参考,实际部署效果受机房环境、运营商线路、系统配置等多重因素影响。请在专业人员指导下操作,因自行操作导致的业务损失本站不承担责任。