linux 系统qcow2镜像制作

一、linux 系统qcow2镜像制作

1. 基础知识

KVM

Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM已成为学术界的主流VMM之一。

计算机最重要几种资源分别是:计算(CPU)、存储(RAM、ROM),以及为了连接各种设备抽象出的 I/O 资源。所以 Intel 分别设计出了 VT-x 指令集、VT-d 指令集、VT-c 指令集等技术来实现硬件虚拟化,让 CPU 配合我们来实现这个目标,了解了核心思想之后,让我们来看一看 KVM 的架构图。

图片出自论文《Residency-Aware Virtual Machine Communication Optimization: Design Choices and Techniques》)
在这里插入图片描述
Intel 定义了 Virtual Machine Extension(VMX)这个处理器特性,也就是传说中的 VT-x 指令集。

虚拟化kvm发展

2006 年 10 月由以色列的 Qumranet 组织开发的一种新的“虚拟机”方案,并将其贡献给开源世界

2007 年 2 月于 Linux Kernel-2.6.20 中第一次包含了 KVM

2008 年 9 月,红帽收购了 Qumranet ,由此入手了 KVM 的虚拟化技术。在之前红帽决是将Xen 加入到自己的默认特性当中——那是 2006 年,因为当时Xen技术脱离了内核的维护方式,也许是因为采用 Xen 的 RHEL 在企业级虚拟化方面没有赢得太多的市场,也许是因为思杰跟微软走的太近了,种种原因,导致其萌生了放弃 Xen。而且在正式采用 KVM 一年后,就宣布在新的产品线中彻底放弃 Xen ,集中资源和精力进行 KVM 的工作。

2009 年 9 月,红帽发布其企业级 Linux 的 5.4 版本( RHEL5.4 ),在原先的 Xen 虚拟化机制之上,将 KVM 添加了进来

2010 年 11 月,红帽发布其企业级 Linux 的 6.0 版本( RHEL6.0 ),这个版本将默认安装的 Xen 虚拟化机制彻底去除,仅提供 KVM 虚拟化机制

2011 年初,红帽的老搭档 IBM 找上红帽,表示 KVM 这个东西值得加大力度去做。于是到了 5 月, IBM 和红帽,联合惠普和英特尔一起,成立了开放虚拟化联盟( Open Virtualization Alliance ),一起声明要提升 KVM 的形象,加速 KVM 投入市场的速度,由此避免 VMware 一家独大的情况出现。联盟成立之时,红帽的发言人表示, 大家都希望除 “ VMware 之外还有一种开源选择。未来的云基础设施一定会基于开源

自 Linux 2.6.20 之后逐步取代 Xen 被集成在Linux 的各个主要发行版本中,使用 Linux 自身的调度器进行管理。

VMware与KVM

KVM:需要硬件支持的虚拟化技术,从硬件层面实现隔离;(openstack默认使用的虚拟化技术就是KVM)

QEMU:QEMU和KVM一样是一种虚拟化软件;

QUEMU和KVM的区别:由于KVM是内核级虚拟化软件(能虚拟化出CPU和内存),磁盘、网卡虚拟不出来,于是KVM就是结合了QEMU实现了用户态的虚拟化;

KVM和Qemu、libvirt的关系

不同的基于KVM的虚拟化平台,可能会采用不同的虚拟化组件,目前主流的采用QEMU-KVM组件。

KVM:Kernel-Based Virtual Machine 基于内核的虚拟机,是Linux内核的一个可加载模块,通过调用Linux本身内核功能,实现对CPU的底层虚拟化和内存的虚拟化,使Linux内核成为虚拟化层,需要x86架构的,支持虚拟化功能的硬件支持(比如Intel VT,AMD-V),是一种全虚拟化架构。KVM在2007年年2月被导入Linux 2.6.20内核中。从存在形式来看,它包括两个内核模块:kvm.ko 和 kvm_intel.ko(或kvm_amd.ko),本质上,KVM是管理虚拟硬件设备的驱动,该驱动使用字符设备/dev/kvm(由KVM本身创建)作为管理接口,主要负责vCPU的创建,虚拟内存的分配,vCPU寄存器的读写以及vCPU的运行。

QEMU:是一套由Fabrice Bellard编写的模拟处理器的自由软件,它是一个完整的可以单独运行的软件,可以独立模拟出整台计算机,包括CPU,内存,IO设备,通过一个特殊的“重编译器”对特定的处理器的二进制代码进行翻译,从而具有了跨平台的通用性。QEMU有两种工作模式:系统模式,可以模拟出整个电脑系统,另一种是用户模式,可以运行不同与当前硬件平台的其他平台上的程序(比如在x86平台上运行跑在ARM平台上的程序);其代码地址 http://git.qemu.org/qemu.git ,有兴趣的同学可以自己去看看,目前最新的版本是2.7.0,在0.9.1及之前版本还可以使用kqemu加速器(可以理解为QEMU的一个插件,用来提高QEMU的翻译性能,支持Windows平台),但1.0以后版本就只能使用qemu-kvm(只支持Linux)进行加速了,1.3版本后QEMU和QEMU-KVM合二为一了。

QEMU-KVM:从前面对KVM内核模块的介绍知道,它只负责CPU和内存的虚拟化,加载了它以后,用户就可以进一步通过工具创建虚拟机(KVM提供接口),但仅有KVM还是不够的,用户无法直接控制内核去做事情(KVM只提供接口,怎么创建虚拟机,分配vCPU等并不在它上面进行),还必须有个运行在用户空间的工具才行,KVM的开发者选择了比较成熟的开源虚拟化软件QEMU来作为这个工具,并对其进行了修改,最后形成了QEMU-KVM。

在QEMU-KVM中,KVM运行在内核空间,QEMU运行在用户空间,实际模拟创建,管理各种虚拟硬件,QEMU将KVM整合了进来,通过/ioctl 调用 /dev/kvm,从而将CPU指令的部分交给内核模块来做,KVM实现了CPU和内存的虚拟化,但kvm不能虚拟其他硬件设备,因此qemu还有模拟IO设备(磁盘,网卡,显卡等)的作用,KVM加上QEMU后就是完整意义上的服务器虚拟化。

总结:QEMU-KVM具有两大作用:

1.提供对cpu,内存(KVM负责),IO设备(QEMU负责)的虚拟

2.对各种虚拟设备的创建,调用进行管理(QEMU负责)

libvirt
RedHat开始支持KVM后,大概是觉得QEMU+KVM方案中的用户空间虚拟机管理工具不太好用或者通用性不强,所以干脆搞了个libvirt出来,一个针对各种虚拟化平台的虚拟机管理的API库,一些常用的虚拟机管理工具如virsh(类似vim编辑器),virt-install,virt-manager等和云计算框架平台(如OpenStack,OpenNebula,Eucalyptus等)都在底层使用libvirt提供的应用程序接口。

libvirt主要由三个部分组成:API库,一个守护进程 libvirtd 和一个默认命令行管理工具 virsh。

QEMU是一个独立的虚拟化解决方案,并不依赖KVM(它本身自己可以做CPU和内存的模拟,只不过效率较低),而KVM是另一套虚拟化解决方案,对CPU进行虚拟效率较高(采用了硬件辅助虚拟化),但本身不提供其他设备的虚拟化,借用了QEMU的代码进行了定制,所以KVM方案一定要依赖QEMU

即使后来RedHat后来开发了libvirt,也只能简单的认为是个虚拟机管理工具,仍然需要通过用户空间QEMU来与KVM进行交互

2. 什么是qcow2

QCOW2镜像格式是Qemu支持的磁盘镜像格式之一。它可以使用一个文件来表示一个固定大小的块设备。与Raw镜像格式相比,QCOW2具有如下优点:

  • 更小的文件大小,即便不支持holes(稀疏文件)的文件系统同样适用
  • 支持写时拷贝(COW, Copy-on-write),QCOW2镜像只反映底层磁盘镜像所做的修改
  • 支持快照,QCOW2镜像可以包含镜像历史的多重快照
  • 支持基于zlib的数据压缩
  • 支持AES加密

3. KVM环境下制作qcow2格式镜像

CentOS7 KVM环境下制作qcow2格式镜像
参考URL: https://my.oschina.net/u/4113630/blog/4377259
云平台虚拟机镜像制作(从iso到qcow2)
参考URL: https://www.jianshu.com/p/4c1998854be5
linux系统qcow2镜像的制作
参考URL: https://www.cnblogs.com/yuhaohao/p/13071612.html

未测试验证,TODO!

4. 检查CPU是否支持虚拟化

Linux虚拟化是利用基于内核的KVM和libvirt来实现,需要CPU支持虚拟化

egrep -c '(vmx|svm)' /proc/cpuinfo

输出结果
56

如果回显大于0,说明有vmx或者svm,说明硬件支持虚拟化。

vmx是Intel,svm是AMD
匹配到’svm’说明你的linux服务器是支持AMD的虚拟化技术AMD-V;匹配到’vmx’说明你的linux服务器是支持Intel的虚拟化技术Intel-VT

开启服务器物理机的CPU虚拟化功能

开机时按‘F2、F12、DEL、ESC’等键就可以进入到BIOS
启用CPU虚拟化功能,设置【Configuration】【Intel Virtual Technology】【Enabled】

VMware开启VT-x硬件虚拟化技术

VMware安装centos 6.5虚拟机,无法支持KVM虚拟化,后发现未开启VT。
关闭虚拟机,打开虚拟机设置,VT开启操作如下

在这里插入图片描述如果勾选,那么在虚拟机(GuestOS)中会获得本机上的硬件虚拟化特性,但会降低虚拟化性能;

ESXI 6 开启VT-x硬件虚拟化技术

一般虚拟化主ESXi都会开启BIOS中的CPU虚拟化技术,INTEL叫VT-x,AMD的叫AMD-V。

在这里插入图片描述

ESXI 6.0 CPU虚拟化是在web端设置的,在客户端vSphere中没有这个设置,切记!

检查主板是否开启虚拟化

先安装检查工具:
Ubuntu系统执行以下命令:

sudo apt update && sudo apt install cpu-checker -y

Ubuntu 安装完成后,执行以下命令:

sudo kvm-ok

输出的结果如下:

INFO: /dev/kvm existsKVM acceleration can be used

表明kvm加速可用。

2) 确认CPU和主板都可支持后。接下来安装kvm虚拟化套件:

只用VMware开虚拟机?来了解一下更强大KVM虚拟化技术
参考URL: https://copyfuture.com/blogs-details/20210223032018622k

3)命令行启动kvm虚拟机
kvm虚拟机常用管理命令

查看启动中的kvm虚拟机:

virsh list

查看所有kvm虚拟机状态:

virsh list --all

启动kvm虚拟机:

virsh start FH-UMP-ZABBIX2(虚拟机名称)

5. 通过qemu-img命令,vmdk格式 转成 qcow2

VMWare 导出vmdk并转为qcow2格式
参考URL: https://blog.csdn.net/mofeimo110/article/details/121914841

核心思路:qemu-img命令
qemu-img是QEMU的磁盘管理工具,在qemu-kvm源码编译后就会默认编译好qemu-img这个二进制文件。

安装qemu-img
https://qemu.weilnetz.de/w64/ 去官网下载安装包安装

选择安装路径:
在这里插入图片描述添加到系统环境变量PATH中:

在这里插入图片描述

qemu-img convert -O qcow2 xxxx-disk1.vmdk   xxxx-disk1.qcow2

如上,命令 亲测可用!

实战:

# qemu-img info SLES11SP1-single.vmdk 
 image: SLES11SP1-single.vmdk 
 file format: vmdk 
 virtual size: 20G (21474836480 bytes) 
 disk size: 3.9G 

# qemu-img convert -f vmdk -O qcow2 SLES11SP1-single.vmdk SLES11SP1-single.img 

# qemu-img info SLES11SP1-single.img 
 image: SLES11SP1-single.img 
 file format: qcow2 

img转换vmdk

qemu-img convert -f raw openwrt.img -O vmdk openwrt.vmdk

-O的O是大写!

6. qcow2镜像转vmdk,导入ESXi

阿里云qcow2镜像转vmdk,导入ESXi
参考URL: https://www.cnblogs.com/tangjizhong/p/12559710.html

7. qcow2镜像压缩

压缩 KVM 的 qcow2 镜像文件
参考URL: https://www.cnblogs.com/fb010001/p/12800490.html

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西京刀客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值