![31fc2090c44fee66095c5fefd7abf69f.png](https://i-blog.csdnimg.cn/blog_migrate/6111889444fd740a12e5a25204d02970.jpeg)
KVM虚拟机发生故障,无法正常启动,但是里面存在重要数据,这时如何进行恢复
问题:如何恢复故障KVM虚拟机qcow2磁盘镜像文件LVM分区中的数据
下面以Fedora32 Cockpit方式安装的虚拟机为演示环境,介绍如何恢复故障KVM虚拟机qcow2磁盘镜像文件LVM分区中的数据
1)Fedora32默认安装了cockpit
yum安装cockpit-machines
yum install cockpit-machines.noarch
![ddeb86175967794af5fdf2661123be6b.png](https://i-blog.csdnimg.cn/blog_migrate/3f5f69e0de7e728c7e1c1ffa40d06b09.jpeg)
2)登录cockpit并创建虚拟机 https://192.168.31.155:9090登录cockpit
![40bc73ee9554e8f2603546a13313e675.png](https://i-blog.csdnimg.cn/blog_migrate/9df0348db8db4c507c5253967dd3ccac.jpeg)
3)上传自动化安装CentOS7的系统镜像用于测试
![cf99bf866f7d62e2c978d02383a5479c.png](https://i-blog.csdnimg.cn/blog_migrate/d06b2db85ce90102fbeeb01deca02ca8.jpeg)
4)创建虚拟机
![4e48192fe95f37c830c1d68f2bbada92.png](https://i-blog.csdnimg.cn/blog_migrate/cc53c9fe6a90f2d4371bd932bbc2c9c2.jpeg)
![d9a31933ebf50f7b81dfe28518297726.png](https://i-blog.csdnimg.cn/blog_migrate/593454bc0660cf68d26ae26b4bcf9576.jpeg)
![32c42c3917437a0ed67d913e948492db.png](https://i-blog.csdnimg.cn/blog_migrate/0d277a834006ae55fffaac20cf29f354.jpeg)
![bbbb5eff39a1431a94a2906c30cc8fd8.png](https://i-blog.csdnimg.cn/blog_migrate/4d17fd8db932bf45a733b944b35ea87c.jpeg)
![5e843fb0b587baa1eace79517643a511.png](https://i-blog.csdnimg.cn/blog_migrate/c658aff6c517b8f7b429bd2b3b41beab.jpeg)
5)在/data分区下写入数据,用于测试
![3abaa40635526e8a999fa007deebf8be.png](https://i-blog.csdnimg.cn/blog_migrate/d5173b93e4d3f320d5e3fefc1903cf86.jpeg)
6)模拟系统无法启动的故障
![a5c15bb8a802982950585b981ab41f1f.png](https://i-blog.csdnimg.cn/blog_migrate/236b1881211b91ccb47f5228932bfd96.jpeg)
7)关闭虚拟机
![aea8682e8f64ca61386f473dd0cba2e7.png](https://i-blog.csdnimg.cn/blog_migrate/51e43fc262cd788f5383d2202e987e1d.jpeg)
接下来进入正题
如何恢复故障KVM虚拟机qcow2磁盘镜像文件LVM分区中的数据
方法一、使用qemu-nbd工具挂载KVM虚拟机的磁盘镜像文件
1. 首先检查当前系统的kernel对NBD模块的支持(NBD:network block device),并加载nbd驱动
Fedora32默认带nbd驱动,CentOS7系统需要手动编译modinfo nbd手动加载nbd驱动modprobe nbd max_part=16lsmod | grep nbd
![027088b9bbe1e411fb60e19e6e3c6d54.png](https://i-blog.csdnimg.cn/blog_migrate/6f626df42d132fe099ca3af5fd008df7.jpeg)
![fb3aaac5eaa623c42aa878acc43029cb.png](https://i-blog.csdnimg.cn/blog_migrate/1b23859ff3af6032a77fd09b2c9d5b55.jpeg)
2、将qcow2镜像映射为网络块设备(nbd)
qemu-nbd -c /dev/nbd0 /var/lib/libvirt/images/YF_OS.qcow2 ll /dev/nbd0*
![f7a0db7ab00d6058abb82f5e525582c0.png](https://i-blog.csdnimg.cn/blog_migrate/14d0ad7a090972dca74b794fcd4856fa.jpeg)
![b6713a0c30892ae6c1c6707daa230def.png](https://i-blog.csdnimg.cn/blog_migrate/24334b761c4b22ff9d924f7795dc8913.jpeg)
![89eef7b1beec7ade0c71025102f42f8e.png](https://i-blog.csdnimg.cn/blog_migrate/ef5dad0de785b1c18b5b5d38a7f28c5c.jpeg)
3、挂载nbd设备
lsblk lsblk -f 挂载mount /dev/mapper/vg_centos-lv_data /kvm_data/
![f4ff8b6d5842f690f8385ac0f23aa27c.png](https://i-blog.csdnimg.cn/blog_migrate/56db36f42f6419237a8a90f8ded3808c.jpeg)
![cb06c0d6ff96d494fa1e9a41198cad2e.png](https://i-blog.csdnimg.cn/blog_migrate/5ee7de469c33275c26cde7c8b67e2e2e.jpeg)
并查看data分区下数据,这时就可以拷贝该分区下的数据进行备份恢复
方法二:使用guestmount挂载KVM虚拟机的磁盘镜像文件
1、安装软件包libguestfs和libguestfs-tools
yum install libguestfs libguestfs-tools -y
![efd19d5d4ed2fa444a682779fad2f017.png](https://i-blog.csdnimg.cn/blog_migrate/cb804b7a97f20e5d508d5625c94bd519.jpeg)
2、virt-filesystems检测虚拟机磁盘文件
virt-filesystems 参数-a 检测虚拟机磁盘文件
virt-filesystems -a /var/lib/libvirt/images/YF_OS.qcow2
3、guestmount命令进行挂载
guestmount -a /var/lib/libvirt/images/YF_OS.qcow2 -m /dev/vg_centos/lv_data /mnt/kvm_images/
命令解释:
-a参数指定虚拟磁盘镜像文件
-m参数指定要挂载的设备在虚拟机中的挂载点
最后给出宿主机中的挂载点
cd /mnt/kvm_images/ll -trh
![c257005791286e3801cc637be7905726.png](https://i-blog.csdnimg.cn/blog_migrate/442a090f493e3c9a5902f734c99539c6.jpeg)
查看虚拟机中的/data数据下数据,这时就可以拷贝该分区下的数据进行备份恢复