在使用虚拟化的过程中,难免会遇到虚拟机异常导致无法启动等故障,这时候如何从虚拟机的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
大功告成
相关推荐
其中,fs-type 是虚拟机磁盘文件中的文件系统类型,hda.img 是磁盘文件,1 是要挂载的分区号,/mnt 是本地宿主机的目录。在使用 lomount 命令时,需要注意的是虚拟机磁盘文件没有被虚拟机使用。使用完后,需要用 ...
安装KVM虚拟机通常涉及以下步骤:首先,确保主机系统满足硬件需求,如支持虚拟化的CPU和足够的内存。然后,安装必要的KVM组件,如libvirt、qemu-kvm、virsh等。接着,创建虚拟机配置文件,并指定CPU、内存、网络、...
下面我们将详细介绍KVM虚拟机的基本使用和安装系统的过程。 **一、KVM环境准备** 1. **硬件需求**:KVM虚拟化对硬件要求较高,至少需要支持虚拟化的CPU(如Intel VT或AMD-V),足够的内存和磁盘空间。 2. **操作...
img文件通常用于PVE的LXC容器,而KVM虚拟机则需要不同的磁盘映像格式。这个转换过程可以让我们在PVE中充分利用KVM的高级功能,如硬件虚拟化、更灵活的存储管理和性能优化。 描述中提及的"img2kvm"是一个工具或脚本...
5. **命令行操作流程**:使用`virsh`命令连接到vCenter主机,列出所有虚拟机,选择目标虚拟机,执行导出和转换操作。 【创建和启动KVM虚拟机】 完成迁移后,可以通过`virt-manager`这个图形化工具创建和启动KVM...
5. **安装操作系统**:挂载ISO镜像文件,启动虚拟机并进行操作系统安装。 6. **管理虚拟机**:启动、停止、迁移或调整虚拟机资源。 虚拟化技术大致分为两类:全虚拟化和半虚拟化。KVM属于全虚拟化,意味着虚拟机...
- 使用`mount`命令将镜像文件挂载到指定目录,如`/mnt`: ``` sudo mount -o loop raw.img /mnt ``` - 挂载后,你可以通过`df -h`检查挂载点的状态。 2. **VHD/VHDX磁盘文件挂载** 对于VHD(Virtual Hard ...
总结起来,Linux下加载vmdk文件涉及到的工具主要包括qemu-img、losetup以及VMware的vmdk-tools。这些工具为Linux用户提供了一个桥梁,使他们能在非VMware环境中直接访问和操作.vmdk文件。理解并掌握这些工具的使用,...
**KVM虚拟机镜像制作** 1. **Glance及镜像格式**:Glance是OpenStack中负责镜像服务的组件,它可以处理多种镜像格式,如qcow2、vmdk等。在实际操作中,BCE项目主要使用qcow2格式,这种格式支持快照和磁盘大小动态...
KVM支持热迁移,即在不中断服务的情况下将运行中的虚拟机从一台宿主机迁移到另一台。这通常依赖于共享存储,如iSCSI、NFS或GlusterFS,并需要网络支持如VLAN或SR-IOV。 **5. 安全性与隔离** KVM虚拟化提供了良好的...
这通过运行命令`kvm-img convert -O qcow2 <input_vmdk_file> <output_qcow2_file>`实现。这个过程可能需要一段时间,并且在转换期间不能中断,否则可能导致转换失败。 转换完成后,新的.qcow2文件会在images目录下...
- **QEMU-img**:用于管理KVM虚拟机磁盘映像的工具。 #### 四、组件之间的关系 各个组件之间存在明确的关系,它们共同作用于构建高可用集群: 1. **DLM**:提供锁机制,是其他组件的基础。 2. **CLVM**:依赖于DLM...
这涉及到在宿主机上创建一个桥接设备,并将物理网络接口连接到此桥接设备。以下是在Red Hat系统中配置桥接网络的例子: 1. **创建桥接设备**:首先,在`/etc/sysconfig/network-scripts/`目录下,编辑或创建`ifcfg-...
在虚拟化技术领域,KVM(Kernel-based Virtual Machine)是一个非常重要的开源解决方案,...以上是KVM的基本操作命令,通过熟练掌握这些命令,可以轻松地在Linux环境中管理KVM虚拟机,实现高效的资源利用和灵活的部署。
本文将深入探讨KVM虚拟机的备份脚本及其相关知识点。 一、KVM备份类型 1. 全量备份:这种备份方式会捕获虚拟机的完整状态,包括操作系统、应用程序、配置文件以及数据。全量备份通常耗时较长,但恢复速度快。 2. ...
学习这个资源包,你将能够掌握在Ubuntu 20.04上建立和管理KVM虚拟机的技能,这对于数据中心管理员、系统管理员或开发者来说是非常有价值的。无论是进行测试、开发还是运行多个服务,KVM都提供了一个强大且灵活的平台...
在虚拟化技术中,KVM(Kernel-based Virtual Machine)是一个重要的开源虚拟化平台,它允许在Linux内核中运行多个虚拟机。KVM的存储虚拟化机制是通过Storage Pool和Volume来实现的,这两个概念是KVM存储管理的核心。...
总之,创建KVM虚拟机涉及的关键步骤包括:选择合适的硬盘镜像格式(如qcow2),使用`qemu-img`创建镜像文件,编写XML配置文件定义虚拟机的详细配置,最后使用`virsh`命令管理虚拟机。通过实践和学习,你将在虚拟化...
- **拷贝内核及initrd.img文件**: ```bash # 拷贝命令省略 ``` - **卸载根分区**: ```bash umount /mnt ``` - **修改根分区label**: ```bash tune2fs -L rootfs ubuntu1110.img ``` ##### 发布...
6. **挂载ISO和虚拟硬盘**:在虚拟机定义中指定ISO作为启动设备,虚拟硬盘作为系统磁盘。 7. **启动虚拟机**:使用`virsh`创建并启动虚拟机。 ```bash virsh define opensuse.xml virsh start opensuse ``` 8....