热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

如何将LinuxKVM虚拟机的img文件挂载到宿主机

在使用虚拟化的过程中,难免会遇到虚拟机异常导致无法启动等故障,这时候如何从虚拟机的img中将重要文件或数据拷贝出来显得尤为重要,今天介绍一下利用qemu-nbd的方式将img文件挂载到宿主机。需要注意的是,目前仅针对于img文件类型为qcow2的做过测试。1.

在使用虚拟化的过程中,难免会遇到虚拟机异常导致无法启动等故障,这时候如何从虚拟机的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

大功告成


推荐阅读
  • 龙蜥社区开发者访谈:技术生涯的三次蜕变 | 第3期
    龙蜥社区的开发者们通过自己的实践和经验,推动着开源技术的发展。本期「龙蜥开发者说」聚焦于一位资深开发者的三次技术转型,分享他在龙蜥社区的成长故事。 ... [详细]
  • 如何在Win10系统下通过VMware 14 Pro安装CentOS 7
    本文详细介绍了在Windows 10操作系统中使用VMware Workstation 14 Pro搭建CentOS 7虚拟环境的步骤,包括所需工具、安装过程及系统配置等。 ... [详细]
  • 本文详细介绍了在 CentOS 系统中如何创建和管理 SWAP 分区,包括临时创建交换文件、永久性增加交换空间的方法,以及如何手动释放内存缓存。 ... [详细]
  • 利用 Calcurse 在 Linux 终端高效管理日程与任务
    对于喜爱使用 Linux 终端进行日常操作的系统管理员来说,Calcurse 提供了一种强大的方式来管理日程安排、待办事项及会议。本文将详细介绍如何在 Linux 上安装和使用 Calcurse,帮助用户更有效地组织工作。 ... [详细]
  • 本文介绍了SELinux的两种主要工作模式——强制模式和宽容模式,并提供了如何在CentOS 7中正确启用和配置SELinux的方法,以及在遇到登录问题时的解决策略。 ... [详细]
  • CentOS下ProFTPD的安装与配置指南
    本文详细介绍在CentOS操作系统上安装和配置ProFTPD服务的方法,包括基本配置、安全设置及高级功能的启用。 ... [详细]
  • 本文介绍了Linux操作系统的核心组成部分——内核及其版本分类,以及市面上常见的几种Linux发行版,旨在为初学者提供一个清晰的学习路径。 ... [详细]
  • 如何在Mozilla Firefox中调整GIF动画的循环次数
    本文介绍了如何通过调整Mozilla Firefox的高级设置来控制GIF动画的播放次数,帮助用户根据个人喜好自定义浏览体验。 ... [详细]
  • 构建个人多节点Linux环境(CodeSheep)
    本文介绍如何通过虚拟机搭建一个多节点的Linux环境,这对于学习、实验和项目部署都具有重要意义。文章详细讲解了网络IP设置、节点间通信等关键步骤。 ... [详细]
  • CentOS7通过RealVNC实现多人使用服务器桌面
    背景:公司研发团队通过VNC登录到CentOS服务器的桌面实现软件开发工作为防止数据外泄,需要在RealVNC设置禁止传输文件、访问粘贴板等策略过程&# ... [详细]
  • 本文详细介绍了如何在 CentOS 7 及其衍生发行版(如 Red Hat, Oracle, Scientific Linux 7)上安装和完全卸载 GitLab。包括安装必要的依赖关系、配置防火墙、安装 GitLab 软件包以及常见问题的解决方法。 ... [详细]
  • CentOS 7 默认安装了 MariaDB,作为 MySQL 的一个分支。然而,出于特定需求,我们可能仍需在系统中安装 MySQL。本文将详细介绍如何通过 Yum 包管理器在 CentOS 7 上安装 MySQL,并提供一些常用的 MySQL 命令。 ... [详细]
  • Fiddler 安装与配置指南
    本文详细介绍了Fiddler的安装步骤及配置方法,旨在帮助用户顺利抓取用户Token。文章还涵盖了一些常见问题的解决方案,以确保安装过程顺利。 ... [详细]
  • 本文详细介绍了JQuery Mobile框架中特有的事件和方法,帮助开发者更好地理解和应用这些特性,提升移动Web开发的效率。 ... [详细]
  • 提升移动应用用户体验的8个设计策略
    随着移动应用成为数字世界连接的关键桥梁,用户体验(UX)设计的重要性日益凸显。本文将探讨为何优质的UX设计对移动应用的成功至关重要,并分享8个实用的设计技巧,帮助开发者优化用户体验。 ... [详细]
author-avatar
刘胜良昭桂家贤
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有