linux kvm img目录更换,linux kvm虚拟机img文件挂载到宿主机

在使用虚拟化的过程中,难免会遇到虚拟机异常导致无法启动等故障,这时候如何从虚拟机的img中将重要文件或数据拷贝出来显得尤为重要,今天介绍一下利用qemu-nbd的方式将img文件挂载到宿主机。

需要注意的是,目前仅针对于img文件类型为qcow2的做过测试。

1. 检测img文件的类型:

file test.img

test.img: Qemu Image, Format: Qcow , Version: 2

qemu-nbd方式依赖于内核级别的nbd模块,简单介绍一下nbd。

NBD(Network Block Device)

简介:Tools for the Linux Kernel's network block device, allowing you to use remote block devices over a TCP/IP network,也就是说可以实现IP-SAN的功能数据共享。

2. 由于CentOS里面默认没有编译nbd到内核里,需要重新编译kernel的源码,具体步骤如下:

yum install kernel-devel kernel-headers

cd /tmp

#下载符合当前版本的kernel src 6.2或者6.4的切换一下目录即可

rpm -ivh kernel-2.6.32-279.22.1.el6.src.rpm

cd ~/rpmbuild/SOURCES

#解压tar包到kernel源码的位置

tar jxf linux-2.6.32-279.22.1.el6.tar.bz2 -C /usr/src/kernels/

cd /usr/src/kernels

#备份原有的kernel source

mv $(uname -r) $(uname -r)-old

#有时候不排除内核的版本与实际的source包不一致,所以应以实际为准

mv 2.6.32-431.3.1.el6.x86_64 2.6.32-431.3.1.el6.x86_64-old

#将新下载的kernel重命名

mv  linux-2.6.32-279.22.1.el6 2.6.32-431.3.1.el6.x86_64

chown -R root:root 2.6.32-431.3.1.el6.x86_64

#开始进入编译阶段

cd /usr/src/kernels/2.6.32-431.3.1.el6.x86_64

#make mrproper去先删除之前编译所生成的文件和配置文件等

make mrproper

cd /usr/src/kernels/2.6.32-431.3.1.el6.x86_64-old

#Module.symvers文件用于:1.列出vmlinux和所有模块的导出函数    2.列出所有符号的CRC校验值

cp  Module.symvers /usr/src/kernels/2.6.32-431.3.1.el6.x86_64

cd /usr/src/2.6.32-431.3.1.el6.x86_64

cp /boot/config-2.6.32-358.el6.x86_64 ./.config

#所有问题都基于已有的.config文件,只对新特性和新设定提出询问,避免需要重新设定整个内核的配置

make oldconfig

make prepare

make scripts

make CONFIG_BLK_DEV_NBD=m M=drivers/block

#在 /usr/src/kernels/2.6.32-431.3.1.el6.x86_64目录下

cp drivers/block/nbd.ko /lib/modules/$(uname -r)/kernel/drivers/block/

#Probe all modules

depmod -a

#加载模块,默认nbd的增加分区的功能是关闭的,需要指定max_part这个参数。这个参数指定了一个nbd设备可以有多少个分区。

modprobe nbd max_part=63

#是否加载可以用 lsmod 命令查看

3.利用qemu-nbd实现虚拟机镜像的挂载

#需要安装以下软件

rpm -ivh  --replacefiles --nodeps seabios-bin-0.6.2-3.el6.noarch.rpm

rpm -ivh  --replacefiles --nodeps seabios-0.6.2-3.el6.x86_64.rpm

rpm -ivh  --replacefiles --nodeps qemu-common-0.12.3-8.el6.x86_64.rpm

rpm -ivh  --replacefiles --nodeps qemu-img-0.12.3-8.el6.x86_64.rpm

rpm -ivh  --replacefiles --nodeps qemu-kvm-0.12.3-8.el6.x86_64.rpm

rpm -ivh  --replacefiles --nodeps qemu-system-x86-0.12.3-8.el6.x86_64.rpm

#查看当前与nbd相关的设备

ls /dev/ | grep nbd

#将文件链接到本地的NBD设备上

qemu-nbd -c /dev/nbd0 test01.img

#再次查看与nbd相关的设备,会发现在/nbd0 下多了三个分区nbd0p1 nbd0p2 nbd0p3,这是虚拟机img文件中的分区

ls /dev/ | grep nbd

#挂载到宿主机,就可以访问img的内部了,其中会有一个swapspace是不能挂载的

mount nbd0p1 /mnt/test

大功告成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值