Linux 桌面虚拟化技术 KVM
- KVM:是 Kernel-based Virtual Machine 的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM已成为学术界的主流VMM之一。
VM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。而Xen早期则是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。但Xen本身有自己的进程调度器,存储管理模块等,所以代码较为庞大。广为流传的商业系统虚拟化软件VMware ESX系列是基于软件模拟的Full-Virtualization。
官方网址:http://www.linux-kvm.org/page/Main_Page
- KVM: 是指基于 Linux 内核的虚拟机(Kernel-based Virtual Machine)。是第一个整合到Linux 内核的虚拟化技术。在 KVM 模型中,每一个虚拟机都是一个由 Linux 调度程序管理的标准进程,你可以在用户空间启动客户机操作系统。
- 一个普通的 Linux 进程有两种运行模式:内核和用户。 KVM 增加了第三种模式:客户模式(有自己的内核和用户模式)
- XEN :需要升级内核,只能支持和物理机系统一样的操作系统。 xen 虚拟上,可以运行windows ?
- KVM: 支持 linux 以外的其它系统。比如:windows
QEMU:是一套由 Fabrice Bellard 所编写的以 GPL 许可证分发源码的模拟处理器,在GNU/Linux 平台上使用广泛。QEMU 具有高速度和跨平台的特性,QEMU 能模拟至接近真实电脑的速度。
QEMU 能模拟整个电脑系统,包括中央处理器及其他周边设备。
QEMU 和 vmware 一样,都是仿真虚拟化技术,效率比较低。QEMU 也是一种虚拟机技术。
- 实验环境:
- VM 虚拟机 CentOS 7.6 SElinux、Firewall以及iptables 均为关闭状态
- 查看 CPU 是否支持虚拟化
- egrep "vmx|svm" /proc/cpuinfo
- intel: vmx
- AMD: svm
- 如果显示为空,则表示不支持虚拟化,需要开启 主板 BIOS 虚拟化支持
- 安装 KVM 模块、管理工具和 libvirt,命令行安装:
- yum install qemu-kvm libvirt libguestfs-tools virt-install libvirt-python librbd1 -y
- 注:使用系统镜像,先配置好 yum 本地源
qemu-kvm : kvm 主程序, KVM 虚拟化模块
virt-manager: KVM 图形化管理工具,这里不安装不使用
libvirt: 虚拟化服务
libguestfs-tools : 虚拟机的系统管理工具
virt-install : 安装虚拟机的实用工具 。比如 virt-clone 克隆工具就是这个包安装的
libvirt-python : python 调用 libvirt 虚拟化服务的 api 接口库文件
librbd1:是一个属于librados的用户态接口库 - 安装完 KVM 后启动服务
- systemctl enable libvirtd --now
- 确定正确加载 kvm 模块
- lsmod |grep kvm
kvm_intel 188740 0
kvm 637515 1 kvm_intel
irqbypass 13503 1 kvm
- 如果启动报错,查看 系统日志 /var/log/messages 排查
解决办法:安装最新版本的 librbd1
配置 KVM 网络桥接功能
- 网桥介绍: 经常说的 Bridge 设备其实就是网桥设备,也就相当于现在的二层交换机,用于连接同一网段内的所有机器,目的就是将第一块网卡 ens33 添加到 br0,此时 br0 就成为了所谓的交换机设备,物理机的 ens33 也是连接在上面的。
- 添加桥接设备 br0: 相当于一个二层交换机
- 使用 virsh 命令配置网桥
- 使用 virsh 命令配置网桥很方便,但 br0 上不会自动配置 DNS,如果需要虚拟机上网需要自己添加DNS,过程如下:
# yum install libvirt-client -y #安装包括 virsh 命令的 rpm 包
# virsh iface-bridge ens33 br0 --no-stp
注:iface-bridge 网卡接口名 新建网桥名 不启用 stp 生成树协议
# echo 'DNS1=8.8.8.8' >> /etc/sysconfig/network-scripts/ifcfg-br0
# systemctl restart network.service
- 重启验证
- 扩展:virbr0 概述
virbr0 是一种虚拟网络接口,这是由于安装和启用了 libvirtd 服务后会自动生成一个桥设备名字为 virbr0。
libvirtd 这个服务,在安装系统时,已经帮你安装好并开机启动了。所以尽管我们没有安装 KVM,一样可以能看到这个 virbr0 这个桥设备。 - libvirtd 在服务器上生成一个 virtual network switch (virbr0),kvm 中所有的虚拟机(guests操作系统)通过这个 virbr0 连起来。默认情况下 KVM 中 virbr0 使用的是 NAT 网络模式。所以这种情况下 KVM 中的虚拟机需要通过物理机的网卡才能访问外部。
- 创建KVM 虚拟机,准备一个硬盘或者分区,用于存放安装好的 Linux 操作系统:
- mkfs.xfs /dev/sdc
- mount /dev/sdc /var/lib/libvirt/images/
- 写入 fstab 实现开机挂载
- virt-install 命令常用选项:
-n NAME, --name=NAME 指定 Guest 名字
-r MEMORY, --ram=MEMORY 指定内存大小
--vcpus=VCPUS 指定虚拟机的 CPU 数量
--disk 指定虚拟机磁盘存储文件的路径 , size=5 指定虚拟磁盘的大小,单位是 G;
例:--disk path=/var/lib/libvirt/images/centos-76.img,size=5
--accelerate KVM 或 KQEMU 内核加速器,这个选项默认是添加的。另外,如果系统 KVM 和KQEMU 加速器都支持,优先使用 KVM 加速器。
-c CDROM, --cdrom=CDROM 指定用于全虚拟化 Guest 的虚拟光驱, --cdrom=后指定ISO 或 CDROM 镜像。
--network #指定虚拟机的网卡模式。如:--network bridge=br0
-x EXTRA, --extra-args=EXTRA 用来给加载的 kernel 和 initrd 提供额外的内核命令行参数。比如无人值守安装系统 - 准备工作
- 基于 apache 服务器搭建本地 yum 源镜像
# yum install httpd -y
# systemctl enable httpd --now
# mkdir /var/www/html/centos7/ - 准备系统镜像:centos7.6 (不建议使用 MINI 版)
# mount /dev/cdrom /var/www/html/centos7/ - # iptables -F #关闭防火墙
创建 ks.cfg 自动应答文件
cat /var/www/html/ks.cfg
firewall --disabled
install
url --url="http://192.168.2.234/centos7"
rootpw --iscrypted $1$root$j0bp.KLPyr.u9kgQ428D10
auth --useshadow --passalgo=sha512
text
firstboot --disable
keyboard us
lang en_US.UTF-8
selinux --disabled
logging --level=info
reboot
timezone Asia/Shanghai
network --bootproto=dhcp --device=eth0 --onboot=on
bootloader --location=mbr
zerombr
clearpart --all --initlabel
part /boot --fstype="xfs" --size=500
#part swap --fstype="swap" --size=1000
#part / --fstype="ext4" --size=1 --growpart pv.156 --fstype="lvmpv" --size=1 --grow
volgroup centos --pesize=4096 pv.156
logvol swap --fstype="swap" --size=1000 --name=swap --vgname=centos
logvol / --fstype="xfs" --vgname=centos --size=1 --grow%packages
#CentOS 6.X 这里要使用 @base
@^minimal
@core
%end创建 centos-7 虚拟机:
- virt-install --name=centos7 --memory=4096,maxmemory=4096 --vcpus=1,maxvcpus=1 --os-type=linux --os-variant=rhel7 --location=http://192.168.2.234/centos7/ --network bridge=br0 -x "ks=http://192.168.2.234/ks.cfg" --disk path=/var/lib/libvirt/images/centos7.qcow2,size=10 --graphics=none --console=pty,target_type=serial --extra-args="console=tty0 console=ttyS0"
- KVM 虚拟机常用命令
# virsh list #列出在运行的虚拟机
# virsh start centos7 #启动 centos7虚拟机
# virsh shutdown centos7 #关闭 centos7 虚拟机
# virsh autostart centos7 #设置 centos7.虚拟机为物理机开机后,自动启动 - 重启验证
- shutdown 需要点时间
- 设为开机启动 kvm 中 centos7 虚拟机,但是 reboot 物理机后,没有启动。
解决:
# chkconfig --list libvirtd #开机启动了
# libvirtd 0:off 1:off 2:off 3:on4:on5:on6:off
# vim /etc/fstab #记得设置开机自动挂载 sdc,不然后开机启动不了虚拟机
KVM 虚拟机克隆和快照
- 克隆 kvm 虚拟机
克隆前,centos7.0 需要提前关机。
语法:virt-clone -o 原虚拟机 -n 新虚拟机 -f 新虚拟机镜像存放路径
选项:-o old -n new
虚拟机镜像: 就是整个虚拟机文件。 - virt-clone -o centos7 -n centos7-1 -f /var/lib/libvirt/images/centos7-1.qcow2
- KVM 虚拟机组成
一台 KVM 虚拟机由两部分组成:虚拟机配置文件和镜像 img
查看虚拟机的配置文件: ll /etc/libvirt/qemu
总用量 8
drwxr-xr-x 2 root root 25 8月 11 10:50 autostart
-rw------- 1 root root 3340 8月 13 12:34 centos7-1.xml
-rw------- 1 root root 3334 8月 11 10:31 centos7.xml
drwx------ 3 root root 42 8月 11 07:59 networksvim /etc/libvirt/qemu/centos7-1.xml
- 调整虚拟机配置,必须关闭该虚拟机
- viresh shutdown centos7-1
- 重新加载配置文件
- virsh define --file /etc/libvirt/qemu/centos7-1.xml
定义域 centos7-1(从 /etc/libvirt/qemu/centos7-1.xml)
- 发现内存已经调整为 1G
- 测试链接
- 修改 IP HOSTNAME
- 开启之前关闭的虚拟机
- virsh start centos7
- 原虚拟机和克隆完的虚拟机配置文件的区别:
- vimdiff /etc/libvirt/qemu/centos7.xml /etc/libvirt/qemu/centos7-1.xml
- 注:这里可以看出两者的 MAC 地址是不一样的。 所以对克隆或复制出来的虚拟机启动后,要修改网卡配置文件的 MAC 地址,因为克隆出来的虚拟机的真实 MAC 地址和操作系统中的 ifcfg-eth0 中的MAC 地址不一样。
- 虚拟机常用镜像格式对比
- 目前主要虚拟机的镜像格式:raw,cow, qcow,qcow2,vmdk 。
raw 格式镜像
raw:老牌的镜像格式,用一个字来说就是裸,也就是赤裸裸,你随便 dd 一个 file 就模拟了一个raw 格式的镜像。由于裸的彻底,性能上来说的话还是不错的。centos6 上 KVM 和 XEN 默认的格式还是这个格式。centos7 以上默认是 qcow2 。
裸的好处还有就是简单,支持转换成其它格式的虚拟机镜像对裸露的它来说还是很简单的(如果其它格式需要转换,有时候还是需要它做为中间格式),空间使用来看,这个很像磁盘,使用多少就是多少(du -h 看到的大小就是使用大小)。
例: qcow2 转为 vmdk 方法是: qcow2 转为 raw ,然后把 raw 转为 vmdk 。也可以直接 qcow2 转为 vmdk
raw 格式的缺点:不支持 snapshot 快照。 - cow、qcow、qcow2 格式
1、cow 格式:还没有成熟,就被放弃了。后来被 qcow 格式所取代。
2、qcow 格式:刚刚出现的时候有比较好的特性,但其性能和 raw 格式对比还是有很大的差距,目前已经被新版本的 qcow2 取代。
3、qcow2 格式:
现在比较主流的一种虚拟化镜像格式,经过优化,目前 qcow2 的性能上接近 raw 裸格式的性能qcow2 格式支持 snapshot,可以在镜像上做 N 多个快照,具有以下优点:
更小的存储空间
支持创建 image 镜像
支持多个 snapshot,对历史 snapshot 进行管理
支持 zlib 的磁盘压缩
支持 AES 的加密
4、 vmdk 格式:
VMware 的格式,整体性能最好,因为原本 VMware 就是做虚拟化起家。从性能和功能上来说,vmdk 应该算最出色的,由于 vmdk 结合了 VMware 的很多能力,目前来看,KVM 和 XEN 使用这种格式的情况不是太多。但就 VMware 的企业级虚拟化 Esxi 来看,它的稳定性和各方面的能力都很好
KVM 快照:
快照的作用:1、热备 2、灾难恢复 3、回滚到历中的某个状态- 注:快照是存放在 kvm 的磁盘镜像中。
- kvm 快照,分两种:
方法 1:使用 lvm 快照,如果分区是 lvm,可以利用 lvm 进行 kvm 的快照备份
方法 2:使用 qcow2 格式的镜像创建快照。 - 创建 KVM 快照
- 要使用快照功能,磁盘格式必须为 qcow2。
- qemu-img info /var/lib/libvirt/images/centos7-1.qcow2
- 语法:virsh snapshot-create-as KVM 虚拟机名 快照名
- virsh snapshot-create-as centos7-1 系统初始
- 查看快照文件大小
- ll -h /var/lib/libvirt/qemu/snapshot/centos7-1/
- 查看当前 kvm 中的虚拟机,是基于哪个快照来运行
- virsh snapshot-current centos7-1 |head
- 查看快照占用的大小:
- emu-img info /var/lib/libvirt/images/centos7-1.qcow2
image: /var/lib/libvirt/images/centos7-1.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 3.3G
cluster_size: 65536
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
1 系统初始 226M 2021-08-13 13:17:37 00:15:30.624
Format specific information:
compat: 1.1
lazy refcounts: true
- 恢复虚拟机快照必须关闭虚拟机
- 安装一些软件后创建快照
- 关闭虚拟机后执行恢复快照
- virsh snapshot-revert 虚拟机名称 快照名称
virsh shutdown centos7-1
域 centos7-1 被关闭virsh domstate centos7-1
关闭virsh snapshot-revert centos7-1 系统初始
virsh snapshot-current centos7-1 |head
- 删除快照
- virsh snapshot-delete centos7-1 vim_lrzsz
- virsh 常用命令
# virsh list #查看已启动的虚拟机列表
# virsh list --all #查看所有虚拟机列表
# virsh start centos7 #启动名称为 centos7 虚拟机
# virsh shutdown centos7 #关闭 名称为 centos7 虚拟机
# virsh dumpxml centos7 > /opt/centos7.xml #导出centos7 虚拟机配置文件
# virsh undefine centos7 #取消域 centos7.0 的定义。
注:virsh undefine centos7.0 会删除虚拟机 centos7.0 的配置文件,虚拟机 centos7.0 的磁盘
镜像文件还在。另外,发现“虚拟系统管理器”中管理的 kvm 虚拟机,没有 centos7.0
#
- 不能直接删除有快照的虚拟机,要先删除快照
- 列表、配置文件已经删除,但是磁盘文件依然存在
- 把虚拟机重新加入到 virt-manager 目录列表。
语法:virsh define 虚拟机.xml 的绝对路径 - # virsh destroy centos7 #强制关机,强制关闭 虚拟机。 当使用 virsh shutdown 正常关机,不行时,用这个。
# virsh autostart centos7#设置开机自启动 centos7.0
# virsh autostart --disable centos7.0 #取消虚拟机随宿主机开机自启
# virsh suspend centos7.0 #挂起虚拟机
# virsh resume centos7.0 #恢复虚拟机
qcow2 格式转换成 raw
- qemu-img convert -f qcow2 -O raw /var/lib/libvirt/images/centos7-1.qcow2 /var/lib/libvirt/images/centos7-1.raw
- 查看转换后的格式,已经转换成了 raw
- qemu-img info /var/lib/libvirt/images/centos7-1.raw
image: /var/lib/libvirt/images/centos7-1.raw
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: 1.2G
- 修改虚拟机配置文件-使用新的磁盘格式启动虚拟机
- virsh edit centos7-1
- #注意 vim 直接编辑配置文件/etc/libvirt/qemu/xuegod63-kvm2.xml 不生效
修改后,需要重启服务
- 其他镜像格式转换方法
例 1:将 vmdk 转换为 qcow2
qemu-img convert -f vmdk -O qcow2 source-name.vmdk target-name.qcow2
例 2:将 qcow2 转换为 vmdk
]# cd /var/lib/libvirt/images/
]# qemu-img convert -f qcow2 -O vmdk centos7.img centos7.vmdk
使用 X11 图形转发
- 需要安装 virt-manager 和 tigervnc
- yum -y install virt-manager tigervnc
- 注:5900为 tigervnc默认监听端口,使用的不是真正的虚拟机图形界面,虚拟机并没有安装图形界面
- kvm 使用的系统字体,对中文支持不是很友好,需要单独准备字体,这里使用win系统的微软雅黑,将字体文件导入到 /usr/share/fonts/dejavu/ 目录下,然后重启一下
- 重启之后检查xshell设置X11 转发,使用 virt-manager 命令启动
- 注意这里调用的是 Xmanager - Passive 程序
- 图形界面点点鼠标即可
Linux 桌面虚拟化技术 KVM相关推荐
- Linux桌面虚拟化技术KVM
内容: • 虚拟化产品对比介绍 • 安装 KVM • 实戓 1:配置 KVM 网络桥接功能 • 实戓 2:使用 KVM 安装虚拟机 虚拟化产品对比介绍 vmware KVM rhel6_x64 xen ...
- Linux桌面虚拟化技术-KVM
一. KVM概述 KVM 即 Kernel-based Virtual Machine 基于内核的虚拟机. KVM,是一个开源的系统虚拟化模块,自 Linux 2.6.20 之后集成在 Linux 的 ...
- Linux桌面虚拟化技术--KVM
文章目录 虚拟化概念 为什么要使用虚拟化 KVM安装以及使用 virsh常用命令 磁盘格式转换 快照管理 虚拟机克隆 虚拟机的网络连接模式 磁盘热添加.扩容 热添加网卡 热添加内存 热添加CPU kv ...
- 桌面虚拟化技术 KVM
Linux 桌面虚拟化技术 KVM KVM: 是指基于Linux 内核的虚拟机(Kernel-based Virtual Machine).是第一个整合到 Linux 内核的虚拟化技术.在 KVM 模 ...
- linux 桌面显示 kvm,Linux的桌面虚拟化技术KVM(五)——virsh常用命令
(1).virsh常用命令 virsh list 查看已打开虚拟机列表 virsh list --all 查看所有虚拟机列表 virsh version 查看 virsh 版本号 virsh star ...
- Linux的桌面虚拟化技术KVM(一)——新建KVM虚拟机
(1).虚拟化产品对比介绍 虚拟化技术有以下三种:仿真虚拟化,这是一种对系统硬件没有要求,但性能最低的虚拟化技术:半虚拟化,这是一种直接使用物理硬件,性能高,但需要修改内核的虚拟化技术:全虚拟化,这是 ...
- 新一代的桌面虚拟化技术
第二代桌面虚拟化技术 第一代技术实现了远程操作和虚拟技术的结合,降低的成本使得虚拟桌面技术的普及称为可能,但是影响普及的并不仅仅是采购成本,管理成本和效率在这个过程中也是非常重要的一环. 纵观IT技术 ...
- 虚拟化技术KVM的搭建
2019独角兽企业重金招聘Python工程师标准>>> KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案.K ...
- 虚拟化技术KVM和XEN概述
虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机.在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计 ...
最新文章
- 拉链法导致的链表过深问题为什么不用二叉查找树代替,而选择红黑树?为什么不一直使用红黑树?
- web语义化方便了谁?
- html代码_HTML代码与基础
- java+mysql学生学籍后台管理系统源码
- asp.net关于页面不回发,不生成__doPostBack方法问题的完美解决方案--ZT
- 自加++(Java版本)
- 【收集资料】OpenGL学习
- miui8.2 是android 7.0,因与MIUI 8.2撞车 小米5暂缺失安卓7.0
- 面向单片机编程(一)- 单片机该怎么学
- Python入门经典. 以解决计算问题为导向的Python编程实践
- Quartz 是什么?一文带你入坑
- Termux基础教程(无编程基础动图展示版)
- 竟然可以检查微信是否被删了好友?(Android Accessibility 了解一下)
- 洪金宝坦言婚姻全靠“忍”。网友:好男人啊
- 自动曝光修复算法附完整C代码
- 骗了全世界130年的钻石骗局 终于栽在中国
- 一些设计上的基本常识 - 梁飞
- SAP-MM 采购订单涉及的后台表
- 计算机ps基础考试题,2017年计算机一级PS考试模拟题及答案
- 0.elasticsearch介绍
热门文章
- 50070无法访问的问题的排除
- VC++ 绘制线条 OnLButtonDown函数(DrawView.cpp) 利用SDK全局函数实现画线功能 利用MFC的CDC类实现画线功能 利用MFC的CClientDC类实现画线功能
- 淘宝订单转化率低的原因,怎样提高店铺订单转化率,提高店铺订单转化率的小技巧
- 向量化编程思路小结(矩阵计算)
- 灭火器摆放识别检测算法 yolo
- 调教ChatGPT提取公众号封面
- Github建立远程库,并从本地导入
- ERROR 1366(HY000)报错解决方法
- Comet OJ - 2019国庆欢乐赛 G-字符串(后缀数组)
- AWS 中文入门开发教学 35- MySQL@RDS - 建立MySQL数据库服务