能恢复,只要.qcow2文件未删且有xml备份或可重建;需检查文件完整性、验证qemu-img info、重建xml定义、确认domblklist路径、排查selinux与权限问题。

能恢复,只要 /var/lib/libvirt/images/ 下的 .qcow2 文件没删,且你记得原虚拟机名或有备份的 XML 配置文件。
确认磁盘文件是否完整
先别慌着重建,直接检查关键文件是否存在、可读:
- 运行
ls -lh /var/lib/libvirt/images/,确认目标磁盘文件(如webserver.qcow2)还在,大小合理(不是 0 字节) - 用
qemu-img info /var/lib/libvirt/images/webserver.qcow2验证格式和 backing file 关系——如果它是个快照链中的子镜像(backing file非空),那母盘也必须存在且路径一致,否则 define 会失败 - 如果磁盘是独立 qcow2(无 backing file),基本就稳了一半
找回或重建虚拟机定义 XML
没有 XML,virsh 就不知道 CPU、内存、网卡、磁盘总线这些配置。分两种情况处理:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 如果你之前导出过:
virsh dumpxml webserver > webserver.xml,那就直接virsh define webserver.xml - 如果没有备份,但记得虚拟机名,可用
virt-xml工具快速生成最小可用 XML:virt-xml --import --name webserver --disk /var/lib/libvirt/images/webserver.qcow2 --ram 2048 --vcpus 2 --network network=default(参数按需调整) - 手动写 XML 也行,但容易漏掉
<driver name="qemu" type="qcow2"></driver>或<target dev="vda" bus="virtio"></target>这类细节,导致启动时报错Device 'virtio-blk-pci' could not be initialized
define 后立即验证配置有效性
执行 virsh define webserver.xml 后别急着 start,先做三件事:
- 运行
virsh list --all,确认虚拟机出现在列表里,状态为shut off - 运行
virsh dominfo webserver,核对OS Type、Max memory、Current memory是否符合预期 - 最关键:执行
virsh domblklist webserver,看输出中vda对应的源路径是否准确指向你的.qcow2文件;如果显示error: failed to get disk source path,说明 XML 里<source file="..."></source>路径写错了或权限不对(宿主机 root 要能读该文件)
启动前检查 SELinux 和文件权限
常见静默失败点:XML 定义成功、domblklist 显示正常,但 virsh start 报错 internal error: process exited while connecting to monitor 或直接卡住。大概率是:
- SELinux 拒绝 QEMU 访问磁盘文件:临时关掉测试
setenforce 0,若能启动,说明是策略问题,需打标签chcon -t virt_image_t /var/lib/libvirt/images/webserver.qcow2 - 文件属主不是
root:root或权限不是600:KVM 默认以qemu用户运行,但 libvirt 会通过 setuid 或 socket 权限控制访问,最稳妥是chown root:root /var/lib/libvirt/images/webserver.qcow2 && chmod 600 ... - 磁盘文件被其他进程占用(比如另一个 virsh 正在用它做快照):
lsof /var/lib/libvirt/images/webserver.qcow2查一下
真正麻烦的不是 define 不成功,而是 define 成功后启动失败却查不出原因——这时候得盯住 journalctl -u libvirtd -n 50 -f 的实时日志,QEMU 启动时的报错几乎都写在那里,比 virsh start 的返回信息详细得多。










