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的功能數據共享。

相關網站:http://nbd.sourceforge.net/

 

2. 由於CentOS裏面默認沒有編譯nbd到內核裏,需要重新編譯kernel的源碼,具體步驟如下:

 yum install kernel-devel kernel-headers

 cd /tmp

#下載符合當前版本的kernel src 6.2或者6.4的切換一下目錄即可

wget http://vault.centos.org/6.3/updates/Source/SPackages/kernel-2.6.32-279.22.1.el6.src.rpm

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

 

大功告成

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章