设为首页 收藏本站
查看: 965|回复: 0

[经验分享] linux kvm虚拟机img文件挂载到宿主机

[复制链接]

尚未签到

发表于 2016-1-8 14:09:11 | 显示全部楼层 |阅读模式
  在使用虚拟化的过程中,难免会遇到虚拟机异常导致无法启动等故障,这时候如何从虚拟机的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
  
  大功告成
  
  
  
  
  
  
  
  
  
  
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-161937-1-1.html 上篇帖子: Ubuntu12.10 下搭建基于KVM-QEMU的虚拟机环境(十一) 下篇帖子: 菜鸟玩云计算之八:Ubuntu Server12.10 之 KVM 安装和创建虚拟机
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表