文章目录
一、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