Linux怎么恢复误执行virshundefine但底层qcow2磁盘还在的虚拟机

云宇小哥_9996

云宇小哥_9996

2026-10-16

972人浏览

原创

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

linux怎么恢复误执行virshundefine但底层qcow2磁盘还在的虚拟机

能恢复,只要 /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 Linux Hardware Debug
Zynq Linux Hardware Debug

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 的返回信息详细得多。

相关专题

更多
typedef和define区别
typedef和define区别

typedef和define区别在类型检查、作用范围、可读性、错误处理和内存占用等。本专题为大家提供typedef和define相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.26

313

5

define的用法
define的用法

define用法:1、定义常量;2、定义函数宏:3、定义条件编译;4、定义多行宏。更多关于define的用法的内容,大家可以阅读本专题下的文章。

2023.10.11

619

5

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

4030

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3453

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2633

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

6410

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

6042

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3513

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

3005

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习