虚拟化KVM
1.虚拟化介绍
VMware Workstation就是虚拟化
虚拟化简单讲,就是把一台物理计算机虚拟成多台逻辑计算机,每个逻辑计算机里面可以运行不同的操作系统,相互不受影响,每个逻辑系统都是独立的存在,这样就可以充分利用物理硬件的资源,而且还可以自由分配资源。
关键词Hypervisor(VMM) 虚拟机管理器(用来管理逻辑计算机的)
虚拟化技术分为全虚拟化和半虚拟化
早期的CPU硬件不支持虚拟化,虚拟机上的操作系统(guestos)要想使用cpu资源,需要通过VMM来翻译指令,这个过程比较耗费资源,这种虚拟化技术叫做全虚拟化 (VMware Workstation)
半虚拟化技术通过修改guestos内核,让guestos可以直接使用CPU资源,而不需要翻译指令了,从而节省了资源,但修改内核比较鸡肋(XEN)
后续cpu厂商直接支持虚拟化,不需要通过VMM翻译指令了,无所谓半虚拟化和全虚拟化
虚拟化技术的优点:
资源池——一个物理机的资源分配到了不同的虚拟机里
很容易扩展——增加物理机或者虚拟机即可,因为虚拟机是可以复制的
很容易云化——亚马孙AWS,阿里云,谷歌云等
虚拟化技术的局限性:
每一个虚拟机都是一个完整的操作系统,所以需要给其分配物理资源,当虚拟机数量增多时,操作系统本身消耗的资源势必增多
虚拟化技术没法解决运维环境和开发环境的矛盾,所以后来才出现了容器技术
参考
虚拟化技术漫谈
全虚拟化和半虚拟化的区别 cpu的ring0 ring1又是什么概念
三种虚拟化技术的技术差别图解
2.常见虚拟化软件
VMware系列
VMware workstation、VMware vsphere(VMware esxi)、VMware Fusion(Mac)
Xen 开源 半虚拟化(需要改机器的内核)
XenServer 商业,厂商Ctirx,基于Xen的(Ctirt把xen收购了)
KVM 开源 基于linux内核模块(被红帽子最后收购)
Hyper-V 商业,微软旗下的产品(适合在微软的操作系统上安装)
Openvz 开源 基于linux 特点:虚拟机和宿主机共用一个内核(如果你宿主机的内核崩溃那么你虚拟机的内核也会崩溃)
VirtualBox 开源 Sun公司开发 Oracle收购Sun
http://developer.huawei.com/ict/forum/thread-23385-1-1.html
软件特点:
VMware系列,商业
VMware Workstation,适合单机使用
VMware Vsphere(VMware esxi),适合规模更大的场景
VMware Fusion(Mac)
Xen 开源,支持半虚拟化
XenServer 商业,Ctirx收购Xen之后研发的,基于Xen的
KVM 开源 ,基于Linux内核模块,目前KVM已经被红帽收购了,大多数系统都倾向于使用KVM
Hyper-V 商业,微软的产品,适合在windows服务器上用
Openvz 开源 ,轻量,基于Linux,虚拟机和宿主机共用一个内核,优点是一台物理机可以虚拟化很多台虚拟机,缺点是不稳定,物理机的内核奔溃,所有的虚拟机都会崩溃,早期vps供应商用得比较多
VirtualBox 开源 ,Sun公司开发 ,Oracle收购Sun之后,现在属于Oracle
3.虚拟化架构
I型:虚拟机直接运行在系统硬件上,创建硬件全仿真实例,被称为“裸机”,也称为裸金属架构。
II型:虚拟机运行在传统操作系统上,同样创建的是硬件全仿真实例,被称为“托管”hypervisor。也称为宿主架构。
Xen属于I型,KVM属于II型。
4.KVM介绍
简介1
KVM是以色列初创公司Qumranet开发,2008年9月RedHat公司收购了Qumranet
KVM是Linux内核的一个模块,它把Linux内核变成了一个Hypervisor
KVM是完全开源的,RedHat基于KVM的虚拟化解决方案叫做RHEV
KVM在Linux操作系统里面以进程的形式出现,由标准的Linux调度程序进行调度,这使得KVM能够使用Linux内核的已有功能
只有一个KVM内核模块还不能实现虚拟化的全部功能,就好比操作系统只有内核还不能成为一个完整的操作系统一样
QEMU是一个开源的虚拟化软件,纯软件,可以虚拟化所以的硬件,性能不强
KVM基于QEMU开发了一个能够运行在用户空间的工具QEMU-KVM
磁盘、网络设备等都是通过QEMU-KVM这个工具模拟出来的
KVM和QEMU-KVM通信是通过/dev/kvm实现的
libvirt是用来管理KVM虚拟机的API,其命令为virsh
简介2
这里只介绍KVM而不介绍其他虚拟化软件的原因有两点,一是我们大多数的服务器系统都是Linux内核的操作系统,而KVM是基于Linux内核的。二是KVM是开源、免费的,其他的例如VMware Vsphere、XenServer等都是商业收费的,而Hyper-V 又是Windows的,Openvz 又有局限性(与宿主共用内核,就无法安装其他内核的虚拟机),稳定性也有待考究,VirtualBox又不适合大规模的虚拟化场景,所以最后就只剩下KVM了。
KVM是Kernel-based Virtual Machine的缩写,意为基于内核的虚拟机。KVM是一个完全开源的系统虚拟化模块,它所基于的是Linux内核,它把Linux内核变成了一个Hypervisor,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM目前已成为学术界的主流VMM之一。
最开始KVM是由以色列初创公司Qumranet开发,后来2008年9月RedHat公司收购了Qumranet,RedHat基于KVM的虚拟化解决方案叫做RHEV,不过RHEV是收费的。
KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。而Xen早期则是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。但Xen本身有自己的进程调度器,存储管理模块等,所以代码较为庞大。广为流传的商业系统虚拟化软件VMware ESX系列是基于软件模拟的Full-Virtualization。
KVM在Linux操作系统里面以进程的形式出现,由标准的Linux调度程序进行调度,这使得KVM能够使用Linux内核的已有功能。但是只有一个KVM内核模块还不能实现虚拟化的全部功能,就好比操作系统只有内核还不能成为一个完整的操作系统一样。所以这就需要提到QEMU了,QEMU是一个开源的虚拟化软件,纯软件,可以虚拟化所有的硬件,性能不强。而KVM基于QEMU开发了一个能够运行在用户空间的工具QEMU-KVM,KVM里的磁盘、网络设备等都是通过QEMU-KVM这个工具模拟出来的,所以KVM结合QEMU-KVM工具之后才算完整,KVM和QEMU-KVM通信是通过/dev/kvm实现的。其中libvirt是用来管理KVM虚拟机的API,其命令为virsh。
KVM架构图
5.Centos7上安装KVM
前提是CPU支持虚拟化
1.虚拟机设置内存4G(根据实际的实验需求来)
2.处理器2核,虚拟化引擎两个虚拟化相关的选项打上对勾(如果在启动机器时报“CPU性能计数器问题”可以把下边的虚拟化CPU性能计数器的√去掉,只要前边的)
3.增加一个50G的虚拟磁盘
4.开启虚拟机
检查cpu参数是否支持虚拟化
grep -Ei 'vmx|svm' /proc/cpuinfo
vmx(标识):英特尔CPU
svm(标识):AMD
准备工作-关闭防火墙
关闭iptables或者firewalld
关闭selinux
格式化新磁盘,挂载到/kvm_data
查看新磁盘
这里不用分区直接格式化
查看你格式化磁盘的格式
创建/kvm_data目录并把新磁盘挂在到该目录下
[root@localhost ~]# mkdir [root@localhost ~]# mount /dev/sdb /kvm_data/
编辑配置文件让磁盘开机自动挂载到目录下:vi /etc/fstab
/dev/sdb /kvm_data ext4 defaults 0 0
下载一个centos7的镜像文件
安装kvm
yum install -y virt-* libvirt bridge-utils qemu-img
6.配置网卡并安装centos7
配置网卡,增加桥接网卡
拷贝现有网卡并改名为br0
cp ifcfg-eno16777736 ifcfg-br0
编辑网卡br0更改一些东西
TYPE=Bridge BOOTPROTO=none NAME=br0 DEVICE=br0 ONBOOT=yes PREFIX=24 IPADDR=192.168.18.128 NETMASK=225.225.225.0 GATEWAY=192.168.18.2 DNS1=114.114.114.114 DNS2=8.8.8.8
把之前的网卡也更改一下(其他IP都去掉BRIDGE=br0意思是桥接到br0往卡上)
TYPE=Ethernet BOOTPROTO=none NAME=eno16777736 DEVICE=eno16777736 ONBOOT=yes BRIDGE=br0
配置完重启网卡服务
systemctl restart network
配置成功桥接网卡之后你会发现br0是之前网卡的IP
检查KVM模块是否加载
lsmod|grep kvm
启动libvirtd服务
systemctl start libvirtd
检查进程在不在
ps aux|grep libvirt
命令:brctl show
可以看到两个网卡br0和virbr0
virbr0:是libvirtd服务启动起来的一个桥接网卡跟我们桥接的br0网卡不一样
为什么有两个,因为分别代表两种网络模式,因为vmware可以用鼠标点换网络模式,而kvm只能在系统里换,就需要有两个模式,之后配置你指向哪个就是哪个模式
virbr0:NAT模式
br0:桥接模式
7.命令行安装centos7
virt-install --name=awei-01 --memory=512,maxmemory=1024 --vcpus=1,maxvcpus=2 --os-type=linux --os-variant=rhel7 --location=/tmp/CentOS-7-x86_64-DVD-1804.iso --disk path=/kvm_data/awei-01.img,size=10 --bridge=br0 --graphics=none --console=pty,target_type=serial --extra-args="console=tty0 console=ttyS0"
命令说明:
--name 指定虚拟机的名称
--memory 指定分配给虚拟机的内存资源大小
--maxmemory 指定可调节的最大内存资源大小,因为KVM支持热调整虚拟机的资源
--vcpus 指定分配给虚拟机的CPU核心数量
--maxvcpus 指定可调节的最大CPU核心数量
--os-type 指定虚拟机安装的操作系统类型
--os-variant 指定系统的发行版本
--location 指定ISO镜像文件所在的路径,支持使用网络资源路径,也就是说可以使用URL
--disk path 指定虚拟硬盘所存放的路径及名称,size 则是指定该硬盘的可用大小,单位是G
--bridge 指定使用哪一个桥接网卡,也就是说使用桥接的网络模式
--graphics 指定是否开启图形
--console 定义终端的属性,target_type 则是定义终端的类型
--extra-args 定义终端额外的参数
报错:
解决办法:yum install -y openssl-1.0.2k*
开始安装前的检测硬件:这时候其实已经进入了一个虚拟终端了,按Ctrl+]退出终端,但是我们不能退出来
开始安装(翻译)
1) [x] Language settings 语言设置 2) [!] Time settings 时间设置
(English (United States)) 英语(美国) (Timezone is not set.) 未设置时区
3) [!] Installation source 安装源 4) [!] Software selection 软件选择
(Processing...) 正在处理 (Processing...) 正在处理
5) [!] Installation Destination 安装目标 6) [x] Kdump
(No disks selected) 未选择磁盘 (Kdump is enabled) Kdump已启用
7) [ ] Network configuration 网络配置 8) [!] Root password 跟密码
(Not connected) 未连接 (Password is not set.) 未设置密码
9) [!] User creation 创建用户
(No user will be created) 不会创建用户
Please make your choice from above ['q' to quit | 'b' to begin installation |
'r' to refresh]: 请从上面选择['q'退出|'b'开始安装|"r"刷新:
语言配置
配置语言-敲“1”回车
2.再回车-选择“68”项中文
3.在选择中文类别“1”中文简体
时区设置
敲“2”回车-选择“1”时区设置-回车
2.选择“2”亚洲-回车
3.回车-选择“64”上海
配置安装目标
敲“5”回车-选择“c”-回车
Installation 1) [x] Language settings 2) [x] Time settings (Simplified Chinese (China)) (Asia/Shanghai timezone) 3) [x] Installation source 4) [x] Software selection (Local media) (Minimal Install) 5) [!] Installation Destination 6) [x] Kdump (No disks selected) (Kdump is enabled) 7) [ ] Network configuration 8) [!] Root password (Not connected) (Password is not set.) 9) [!] User creation (No user will be created) Please make your choice from above ['q' to quit | 'b' to begin installation | 'r' to refresh]: 5 ================================================================================ ================================================================================ Probing storage... Installation Destination [x] 1) : 10 GiB (vda) 1 disk selected; 10 GiB capacity; 10 GiB free ... Please make your choice from above ['q' to quit | 'c' to continue | 'r' to refresh]: c ================================================================================ ================================================================================ Autopartitioning Options [ ] 1) Replace Existing Linux system(s) [x] 2) Use All Space [ ] 3) Use Free Space Installation requires partitioning of your hard drive. Select what space to use for the install target. Please make your choice from above ['q' to quit | 'c' to continue | 'r' to refresh]: 2 ================================================================================ ================================================================================ Autopartitioning Options [ ] 1) Replace Existing Linux system(s) 替换现有的Linux系统 [x] 2) Use All Space 利用所有空间 [ ] 3) Use Free Space 使用可用空间 Installation requires partitioning of your hard drive. Select what space to use for the install target. Please make your choice from above ['q' to quit | 'c' to continue | 'r' to refresh]: c 默认就可以 ================================================================================ ================================================================================ Partition Scheme Options [ ] 1) Standard Partition 标准分区 [ ] 2) Btrfs Btrfs系统 [x] 3) LVM [ ] 4) LVM Thin Provisioning LVM精简资源调配 Select a partition scheme configuration. Please make your choice from above ['q' to quit | 'c' to continue | 'r' to refresh]: 1 ================================================================================ ================================================================================ Partition Scheme Options [x] 1) Standard Partition [ ] 2) Btrfs [ ] 3) LVM [ ] 4) LVM Thin Provisioning Select a partition scheme configuration. Please make your choice from above ['q' to quit | 'c' to continue | 'r' to refresh]: c 完成
翻译:
[ ] 1) Replace Existing Linux system(s) 替换现有的Linux系统
[x] 2) Use All Space 利用所有空间
[ ] 3) Use Free Space 使用可用空间
设置root密码
Installation 1) [x] Language settings 2) [x] Time settings (Simplified Chinese (China)) (Asia/Shanghai timezone) 3) [x] Installation source 4) [x] Software selection (Local media) (Minimal Install) 5) [x] Installation Destination 6) [x] Kdump (Automatic partitioning (Kdump is enabled) selected) 8) [!] Root password 7) [ ] Network configuration (Password is not set.) (Not connected) 9) [!] User creation (No user will be created) Please make your choice from above ['q' to quit | 'b' to begin installation | 'r' to refresh]: 8 ================================================================================ ================================================================================ Please select new root password. You will have to type it twice. Password: Password (confirm): ================================================================================ ================================================================================ Question The password you have provided is weak: The password fails the dictionary check 您提供的密码很弱:密码无法通过字典检查 - it is too simplistic/systematic. 它过于简单化/系统化 Would you like to use it anyway? 你想用它吗? Please respond 'yes' or 'no': yes 请回答“是”或“否”:
配置完这几项之后选“b”开始安装
按回车继续进行重启
8.虚拟机管理
命令整合
[root@localhost ~]# virsh list //查看虚拟机列表,只能看到运行的虚拟机
[root@localhost ~]# virsh list --all //查看虚拟机列表,包括未运行的虚拟机
[root@localhost ~]# virsh console awei-01 # 进入指定的虚拟机,进入的时候还需要按一下回车
[root@localhost ~]# virsh start awei-01 # 启动虚拟机
[root@localhost ~]# virsh shutdown awei-01 # 关闭虚拟机
[root@localhost ~]# virsh destroy awei-01 # 强制停止虚拟机
[root@localhost ~]# virsh undefine awei-01 # 彻底销毁虚拟机,会删除虚拟机配置文件,但不会删除虚拟磁盘
[root@localhost ~]# virsh autostart awei-01 # 设置宿主机开机时该虚拟机也开机
[root@localhost ~]# virsh autostart --disable awei-01 # 解除开机启动
[root@localhost ~]# virsh suspend awei-01 # 挂起虚拟机
[root@localhost ~]# virsh resume awei-01 # 恢复挂起的虚拟机
ctrl+] //退出虚拟机使用快捷键
ps aux |grep kvm //查看kvm进程
virsh list //查看虚拟机列表,只能看到运行的虚拟机
[root@awei-01 ~]# virsh list Id 名称 状态 ---------------------------------------------------- 2 awei-02 running
virsh list --all //查看虚拟机列表,包括未运行的虚拟机
[root@awei-01 ~]# virsh list --all Id 名称 状态 ---------------------------------------------------- 2 awei-02 running - awei-01 关闭
virsh console awei-01//进入指定虚拟机 连接完之后要回车进去
virsh undefine awei-01//彻底销毁虚拟机,会删除虚拟机配置文件,virsh list --all就看不到了 (配置文件在/etc/libvirt/qemu里边)
要想彻底删除这个虚拟机需要删除“虚拟磁盘文件”在kvm的根目录里/kvm_data
ls /etc/libvirt/qemu/ //可以查看虚拟机配置文件
9.克隆虚拟机
克隆虚拟机是虚拟机软件必须得有的功能,这样能省去我们安装系统及环境的时间,如果使用过VMware、VirtualBox等虚拟机软件的话,都知道有这个功能,KVM也不例外,只不过我们没有用图形化界面,是命令行形式的而已。
要克隆某个虚拟机,首先这个虚拟机需要为关闭状态:
virsh shutdown awei-01
[root@awei-01 ~]# virsh shutdown awei-01 域 awei-01 被关闭
然后执行以下命令进行克隆:
virt-clone --original awei-01 --name awei-02 --file /kvm_data/awei-02.img
[root@awei-01 ~]# virt-clone --original awei-01 --name awei-02 --file /kvm_data/awei-02.img 正在分配 'awei-02.img' | 10 GB 00:00:37 成功克隆 'awei-02'。
virsh list --all 查看一下会多出一台awei-02的机器
[root@awei-01 ~]# virsh list --all Id 名称 状态 ---------------------------------------------------- - awei-01 关闭 - awei-02 关闭
参数说明
--original指定克隆源虚拟机
--name指定克隆后的虚拟机名字
--file指定目标虚拟机的虚拟磁盘文件
如果aminglinux01虚拟机开机状态,则提示先关闭或者暂停虚拟机
为了方便管理,我们可以退出虚拟终端,在外边远程连接它进行操作
[root@awei-01 ~]# ssh 192.168.18.130 The authenticity of host '192.168.18.130 (192.168.18.130)' can't be established. ECDSA key fingerprint is b8:43:75:b8:96:d0:42:d8:0b:5e:89:64:60:e0:73:c7. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.18.130' (ECDSA) to the list of known hosts. [email protected]'s password: 密码 Last login: Wed May 13 09:40:39 2020 [root@localhost ~]# w 17:12:03 up 1 min, 2 users, load average: 0.17, 0.10, 0.04 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root ttyS0 09:40 7:31m 0.11s 0.11s -bash root pts/0 192.168.18.128 17:11 3.00s 0.01s 0.01s w
10.快照管理
同样的创建快照也是虚拟机软件的一个很重要的功能,快照能够很方便的帮我们把虚拟机恢复到一个正常的状态下。我们来看看命令行下如何使用KVM创建虚拟机的快照:
创建快照 virsh snapshot-create awei-01
[root@awei-01 ~]# virsh snapshot-create awei-01 已生成域快照 1589336112
raw格式的虚拟磁盘不支持做快照,qcow2支持
qemu-img info /kvm_data/awei-01.img //查看aminglinux01.img信息,同时会查看到快照列表(因为快照是做的磁盘快照)
[root@awei-01 ~]# qemu-img info /kvm_data/awei-01.img image: /kvm_data/awei-01.img file format: qcow2 ##虚拟磁盘格式 virtual size: 10G (10737418240 bytes) # 虚拟磁盘的总大小 disk size: 1.3G # 虚拟磁盘目前所占用的物理磁盘大小 cluster_size: 65536 Snapshot list: # 快照列表 ID TAG VM SIZE DATE VM CLOCK 1 1589336112 0 2020-05-13 10:15:12 00:00:00.000 Format specific information: compat: 1.1 lazy refcounts: true
virsh snapshot-list aminglinux01 //列出所有快照
[root@awei-01 ~]# virsh snapshot-list awei-01 名称 生成时间 状态 ------------------------------------------------------------ 1589336112 2020-05-13 10:15:12 +0800 shutoff [root@awei-01 ~]# virsh snapshot-list awei-02 名称 生成时间 状态 ------------------------------------------------------------
virsh snapshot-current awei-01//查看当前快照版本
ls /var/lib/libvirt/qemu/snapshot/awei-01//查看所有快照配置文件
virsh snapshot-revert awei-01 1513440854//恢复指定快照
virsh snapshot-delete awei-01 1513440854//删除快照
11.磁盘格式
虚拟磁盘常用格式有raw和qcow2,以上我们也提到了raw格式的虚拟磁盘不支持创建快照,qcow2格式的虚拟磁盘才支持创建快照。
qemu-img info /kvm_data/awei-01.img//查看虚拟磁盘格式
[root@awei-01 ~]# qemu-img info /kvm_data/awei-01.img image: /kvm_data/awei-01.img file format: qcow2 virtual size: 10G (10737418240 bytes) disk size: 1.3G cluster_size: 65536 Snapshot list: ID TAG VM SIZE DATE VM CLOCK 1 1589336112 0 2020-05-13 10:15:12 00:00:00.000 Format specific information: compat: 1.1 lazy refcounts: true
创建一个2G大小的raw格式的虚拟磁盘,-f选项用于指定虚拟磁盘的格式
qemu-img create -f raw /kvm_data/awei-01_2.img 2G//创建2G的raw格式磁盘
[root@awei-01 ~]# qemu-img create -f raw /kvm_data/awei-01_2.img 2G Formatting '/kvm_data/awei-01_2.img', fmt=raw size=2147483648
把raw格式的磁盘转换为qcow2格式
qemu-img convert -O qcow2 /kvm_data/awei-01_2.img /kvm_data/awei-01_2.qcow2
[root@awei-01 ~]# qemu-img info /kvm_data/awei-01_2.img ##先查看原来的磁盘格式 image: /kvm_data/awei-01_2.img file format: raw ##raw格式的 virtual size: 2.0G (2147483648 bytes) disk size: 0 [root@awei-01 ~]# qemu-img convert -O qcow2 /kvm_data/awei-01_2.img /kvm_data/awei-01_2.qcow2 ##raw格式转换为qcow2格式 [root@awei-01 ~]# qemu-img info /kvm_data/awei-01_2.qcow2 ##查看转换之后的 image: /kvm_data/awei-01_2.qcow2 file format: qcow2 ##成功转换为acow2格式 virtual size: 2.0G (2147483648 bytes) disk size: 196K cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false
如上,与其说是转换,不如说是从raw格式的磁盘复制了一份格式为qcow2磁盘出来,因为原本的磁盘并不会发生任何的变化,而是从这个raw格式磁盘的基础上复制出来了一个新的qcow2格式的磁盘。
转换后用ls -lh查看磁盘文件的大小,可以看到qcow2格式的磁盘文件比较小,raw格式的磁盘文件大小和我们指定空间大小一样是2G:
[root@awei-01 kvm_data]# ls -lh 总用量 2.7G -rw-r--r-- 1 root root 2.0G 5月 13 20:39 awei-01_2.img -rw-r--r-- 1 root root 193K 5月 13 20:41 awei-01_2.qcow2 -rw------- 1 root root 11G 5月 13 10:15 awei-01.img -rw------- 1 qemu qemu 1.4G 5月 13 20:49 awei-02.img drwx------ 2 root root 16K 5月 9 01:28 lost+found
PS:raw格式的磁盘性能比qcow2要好,但是raw格式的磁盘无法做快照
使用du -sh命令查看则不一样了,raw格式的磁盘文件大小是0,而qcow2格式的磁盘文件大小则是和我们使用ls -lh查看的一样:
[root@awei-01 kvm_data]# du -sh * 0 awei-01_2.img 196K awei-01_2.qcow2 1.4G awei-01.img 1.4G awei-02.img 16K lost+found
这就是raw格式的虚拟磁盘文件和qcow2格式的虚拟磁盘文件在物理磁盘存储上的区别
给aminglinux02转换为raw格式的磁盘
先把awei-02虚拟机关闭
virsh shutdown awei-02
qemu-img convert -O raw /kvm_data/awei-02.img /kvm_data/awei-02_3.raw
[root@awei-01 kvm_data]# qemu-img convert -O raw /kvm_data/awei-02.img /kvm_data/awei-02_3.raw [root@awei-01 kvm_data]# ls -l 总用量 4113052 -rw-r--r-- 1 root root 2147483648 5月 13 20:39 awei-01_2.img -rw-r--r-- 1 root root 197120 5月 13 20:41 awei-01_2.qcow2 -rw------- 1 root root 10739384832 5月 13 10:15 awei-01.img -rw-r--r-- 1 root root 10737418240 5月 14 02:26 awei-02_3.raw # 此时的属组属主为root -rw------- 1 root root 1407254528 5月 14 02:09 awei-02.img drwx------ 2 root root 16384 5月 9 01:28 lost+found
virsh edit awei-02//更改格式和文件路径
启动:virsh start aminglinux02
可以发现启动状态的虚拟机的磁盘文件的属组属主会发生改变
[root@awei-01 kvm_data]# ls -l 总用量 4113052 -rw-r--r-- 1 root root 2147483648 5月 13 20:39 awei-01_2.img -rw-r--r-- 1 root root 197120 5月 13 20:41 awei-01_2.qcow2 -rw------- 1 root root 10739384832 5月 13 10:15 awei-01.img -rw-r--r-- 1 qemu qemu 10737418240 5月 14 02:26 awei-02_3.raw # 此时的属组属主为qemu -rw------- 1 root root 1407254528 5月 14 02:09 awei-02.img drwx------ 2 root root 16384 5月 9 01:28 lost+found
此时如果要给study02制作快照就会报如下错误:
[root@awei-01 kvm_data]# virsh snapshot-create awei-02 错误:不支持的配置:存储类型 vda 不支持磁盘 raw 的内部快照
12.磁盘扩容 – raw格式
以上介绍了虚拟磁盘格式的,以及如何转换虚拟磁盘格式,下面我们来看看如何进行磁盘扩容:
[root@awei-01 kvm_data]# ls -lh /kvm_data/awei-02_3.raw -rw-r--r-- 1 qemu qemu 10G 5月 14 03:03 /kvm_data/awei-02_3.raw [root@awei-01 kvm_data]# qemu-img resize /kvm_data/awei-02_3.raw +2G Image resized. [root@awei-01 kvm_data]# ls -lh /kvm_data/awei-02_3.raw -rw-r--r-- 1 qemu qemu 12G 5月 14 03:08 /kvm_data/awei-02_3.raw
如上可以看到,原本的10G变成12G了,但是此时进入虚拟机中会发现磁盘依旧是10G:
[root@localhost ~]# fdisk -l 磁盘 /dev/vda:10.7 GB, 10737418240 字节,20971520 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x000ab192 设备 Boot Start End Blocks Id System /dev/vda1 * 2048 2099199 1048576 83 Linux /dev/vda2 2099200 4196351 1048576 82 Linux swap / Solaris /dev/vda3 4196352 20971519 8387584 83 Linux
这是因为还没有生效,需要重启虚拟机才能生效,但是注意这个重启要在宿主机上使用virsh命令进行重启,如下:
[root@awei-01 kvm_data]# virsh destroy awei-02 域 awei-02 被删除 [root@awei-01 kvm_data]# virsh start awei-02 域 awei-02 已开始 [root@awei-01 kvm_data]# virsh console awei-02 连接到域 awei-02 换码符为 ^] [root@localhost ~]# fdisk -l 磁盘 /dev/vda:12.9 GB, 12884901888 字节,25165824 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x000ab192 设备 Boot Start End Blocks Id System /dev/vda1 * 2048 2099199 1048576 83 Linux /dev/vda2 2099200 4196351 1048576 82 Linux swap / Solaris /dev/vda3 4196352 20971519 8387584 83 Linux
然后还需要把这2G的空间分区才可以使用,因为我们安装这个系统的时候选择的是标准分区,所以无法像LVM分区那样直接扩容逻辑卷:
[root@localhost ~]# fdisk /dev/vda
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):n # 新建分区
Partition type:
p primary (3 primary, 0 extended, 1 free)
e extended
Select (default e): p # 选择新建主分区
已选择分区 4
起始 扇区 (20971520-25165823,默认为 20971520): # 默认即可,直接按回车
将使用默认值 20971520
Last 扇区, +扇区 or +size{K,M,G} (20971520-25165823,默认为 25165823): # 默认即可,直接按回车
将使用默认值 25165823
分区 4 已设置为 Linux 类型,大小设为 2 GiB
命令(输入 m 获取帮助):p # 再次查看磁盘信息
磁盘 /dev/vda:12.9 GB, 12884901888 字节,25165824 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x00003436
设备 Boot Start End Blocks Id System
/dev/vda1 * 2048 1026047 512000 83 Linux
/dev/vda2 1026048 3123199 1048576 82 Linux swap / Solaris
/dev/vda3 3123200 20971519 8924160 83 Linux
/dev/vda4 20971520 25165823 2097152 83 Linux # 可以看到多了一个/dev/vda4分区
命令(输入 m 获取帮助):w # 保存退出
除了对已有磁盘扩容外,还可以额外增加磁盘,宿主机下执行以下命令:
[root@localhost ~]# qemu-img create -f raw /kvm_data/awei-02_2.raw 5G #先增加一块磁盘 Formatting '/kvm_data/study02_2.raw', fmt=raw size=5368709120 [root@localhost ~]# qemu-img info /kvm_data/awei-02_2.raw ##查看刚增加的磁盘大小 image: /kvm_data/awei-02_2.raw file format: raw virtual size: 5.0G (5368709120 bytes) disk size: 0 [root@localhost ~]# virsh edit awei-02 # 编辑配置文件,在原本的标签下增加以下内容 [root@localhost ~]# virsh destroy awei-02 Domain study02 destroyed [root@localhost ~]# virsh start awei-02 Domain awei-02 started [root@localhost ~]#
qemu-img resize /kvm_data/aminglinux02_3.raw +2G
qemu-img info /kvm_data/aminglinux02_3.raw
virsh destroy aminglinux02
virsh start aminglinux02
virsh console aminglinux02
fdisk -l 查看磁盘情况,并分新的分区
除了对已有磁盘扩容外,还可以额外增加磁盘
qemu-img create -f raw /kvm_data/aminglinux02_2.raw 5G
virsh edit aminglinux02 //增加
virsh destroy aminglinux02
virsh start aminglinux02
13.磁盘扩容 – qcow2格式
qcow2格式的虚拟磁盘的扩容方式和raw格式的是一样的,只不过需要注意的是,如果虚拟磁盘保存了快照,则无法扩容会报错,如下:
[root@awei-01 kvm_data]# qemu-img info /kvm_data/awei-01.img image: /kvm_data/awei-01.img file format: qcow2 virtual size: 10G (10737418240 bytes) disk size: 1.3G cluster_size: 65536 Snapshot list: ID TAG VM SIZE DATE VM CLOCK 1 1589336112 0 2020-05-13 10:15:12 00:00:00.000 Format specific information: compat: 1.1 lazy refcounts: true [root@awei-01 kvm_data]# qemu-img resize /kvm_data/awei-01 awei-01_2.img awei-01_2.qcow2 awei-01.img [root@awei-01 kvm_data]# qemu-img resize /kvm_data/awei-01.img +2G qemu-img: Can't resize an image which has snapshots qemu-img: This image does not support resize qemu-img resize /kvm_data/aminglinux01.img +2G
需要把快照删除后才能进行扩容:
[root@awei-01 kvm_data]# virsh snapshot-delete awei-01 1589336112 已删除域快照 1589336112 [root@awei-01 kvm_data]# qemu-img resize /kvm_data/awei-01.img +2G Image resized. [root@awei-01 kvm_data]#
剩下的操作和上面演示的raw是一样的,这里就不再演示了。
如果不希望删除快照的话,就只能是创建一块新的虚拟磁盘,操作方式也是和raw一样的。
建议不管是raw格式的还是qcow2格式的虚拟磁盘需要扩容,最好是使用新增硬盘的方式进行扩容,而不是在原有的磁盘上进行扩容,因为新增磁盘相对独立与已有的磁盘,误操作时也不容易对已有的磁盘造成影响。
14.调整cpu、内存、网卡
virsh dominfo awei-01 //查看配置
[root@awei-01 ~]# virsh dominfo awei-01 Id: - 名称: awei-01 UUID: e7db2f69-4a35-4ce4-ae14-a2f99820a700 OS 类型: hvm 状态: 关闭 CPU: 1 最大内存: 1048576 KiB 使用的内存: 524288 KiB 持久: 是 自动启动: 禁用 管理的保存: 否 安全性模式: none 安全性 DOI: 0
调整cpu内存
virsh edit awei-01//更改如下部分内容
2048576 # 内存的最大大小624288 # 目前使用的内存大小4 # CPU的核心数量,current的值为当前使用的核心数量,标签的值则为最大可使用的核心数量
更改完配置文件之后,如果虚拟机是开机状态的话需要重启,关机状态的话则直接启动即可生效
[root@awei-01 ~]# virsh shutdown awei-01 域 awei-01 被关闭 [root@awei-01 ~]# virsh start awei-01 域 awei-01 已开始
这样就完成了内存和CPU的调整,以上我们是通过编辑配置文件来对内存和CPU的资源进行调整,需要重启虚拟机之后才能生效。不过好在KVM是支持动态调整的,但前提是有设置最大的资源大小,例如以上的例子中,我们将内存的最大大小设置了两个G左右,那么我们就可以在这两个G以内动态的调整内存的大小,CPU也是同理。如下示例:
[root@awei-01 ~]# virsh setmem awei-01 800m # 动态调整内存大小为800M [root@awei-01 ~]# virsh setvcpus awei-01 3 # 动态调整CPU核心数量为3核 [root@awei-01 ~]# virsh dominfo awei-01 # 可以看到无需重启也生效了 Id: 6 名称: awei-01 UUID: e7db2f69-4a35-4ce4-ae14-a2f99820a700 OS 类型: hvm 状态: running CPU: 3 CPU 时间: 34.7s 最大内存: 2049024 KiB 使用的内存: 819200 KiB 持久: 是 自动启动: 禁用 管理的保存: 否 安全性模式: none 安全性 DOI: 0
# 想要动态调整的配置永久生效,则需要把当前配置写入到配置文件里去
virsh dumpxml awei-01 > /etc/libvirt/qemu/awei-01.xml
注:内存资源可以动态的调大调小,而CPU资源只能动态地调大不能调小。
调整网卡
virsh domiflist awei-01//查看网卡
[root@awei-01 ~]# virsh domiflist awei-01 接口 类型 源 型号 MAC ------------------------------------------------------- vnet1 bridge br0 virtio 52:54:00:b2:43:c4
如上,可以看到目前该虚拟机只有一个网卡。
增加一块新的网卡,并设置为nat网络模式(virbr0类似vmware的vmnet8),这里如果写--source br0,则网络模式为桥接
virsh attach-interface awei-01 --type bridge --source virbr0
[root@awei-01 ~]# virsh attach-interface awei-01 --type bridge --source virbr0 成功附加接口 [root@awei-01 ~]# virsh domiflist awei-01 接口 类型 源 型号 MAC ------------------------------------------------------- vnet1 bridge br0 virtio 52:54:00:b2:43:c4 vnet2 bridge virbr0 rtl8139 52:54:00:fc:9a:ae
virsh dumpxml awei-01 > /etc/libvirt/qemu/awei-01.xml//需要把配置写入到配置文件里
这条命令末尾如果写的是 --source br0 ,则是设置网络模式为桥接,和VMware里的桥接模式一样。--source是用于指定桥接到哪一块网卡上。
例如我们也可以桥接到br0上:
virsh attach-interface awei-01 --type bridge --source br0
[root@awei-01 ~]# virsh attach-interface awei-01 --type bridge --source br0 成功附加接口 [root@awei-01 ~]# virsh domiflist awei-01 接口 类型 源 型号 MAC ------------------------------------------------------- vnet1 bridge br0 virtio 52:54:00:b2:43:c4 vnet2 bridge virbr0 rtl8139 52:54:00:fc:9a:ae vnet3 bridge br0 rtl8139 52:54:00:8f:7f:cb [root@awei-01 ~]#
15.迁移虚拟机
该方式要确保虚拟机是关机状态
virsh shutdown awei-01
然后通过rsync命令将配置文件拷贝到另一台机器上:
[root@awei-01 ~]# rsync -av /etc/libvirt/qemu/awei-01.xml 192.168.77.128:/etc/libvirt/qemu/awei-01.xml
接着将虚拟机的磁盘文件也拷贝到另一台机器上:
[root@awei-01 ~]# virsh domblklist awei-01 ##查看虚拟机磁盘所在目录 目标 源 ------------------------------------------------ vda /kvm_data/awei-01.img hda - [root@awei-01 ~]# rsync -av /kvm_data/awei-01.img 192.168.77.128:/kvm_data/awei-01.img
最后就是在另一台机器上根据实际情况修改虚拟机的配置文件,例如虚拟机的名称要对得上,虚拟磁盘文件路径要对得上等等,因为我这里两台机器的环境都是一样的,所以就不需要修改配置文件了,直接定义新虚拟机即可。以下这条命令在另一台机器上执行:
[root@awei-01 ~]# virsh define /etc/libvirt/qemu/awei-01.xml
修改磁盘路径
virsh define /etc/libvirt/qemu/aminglinux03.xml //定义新虚拟机
virsh list --all //会发现新迁移的aminglinux03子机