首页 > 其他分享 >kvm

kvm

时间:2024-04-08 23:00:51浏览次数:28  
标签:-- qcow2 kvm server virsh root

一:什么是云计算

  • 云计算是按量付费的模式

  • 云计算:实现数据的计算、储存、处理和共享的一种技术。需要掌握网络知识、linux、虚拟化、数据库、python、云计算等技术知识;

云:在多个物理服务器安装部署软件整合物理资源(cpu、内存、磁盘)叫做云;也是分布式的一种;

计算:把整合的物理资源分配出去提供给用户,用户部署自己的业务称之为计算;

  • 核心技术:

    虚拟化技术:提供iaas支撑,包括:cpu(计算资源)、硬盘(存储资源)、网卡(网络资源)

    分布式技术:保证数据的高可靠性,存储在不同的物理设备中,摆脱了硬件设备的限制

二:什么是虚拟化

  • 服务器虚拟化:将一台物理服务器划分为多个虚拟机,每个虚拟机可以运行独立的操作系统和应用程序。服务器虚拟化可以实现资源的高效利用和灵活的管理,从而降低硬件成本和管理复杂度。
  • 存储虚拟化:将多个物理存储设备抽象为单个逻辑存储设备的技术。通过存储虚拟化,可以实现存储资源的池化和集中管理,从而提高存储资源的利用率和灵活性。
  • 网络虚拟化:是一种对网络资源进行抽象和隔离的技术,使多个虚拟网络能够共享同一组物理网络资源。网络虚拟化可以实现灵活的网络配置和管理,满足不同应用和使用者的网络需求。

三:qemu和kvm虚拟化软件的差别

虚拟化软件:

1:qemu

  • qemu软件纯模拟全虚拟化软件,效率低!兼容性好(模拟多种硬件,X86架构处理器、AMD64架构处理器、ARM、AIX架构等)!

    qemu是一个完整的可以单独运行的软件,可以独立模拟出整台计算机,包括:cpu、内存、io设备。

    qemu有两种工作模式:

    ​ 系统模式:可以模拟出整个电脑系统;

    ​ 用户模式:可以运行不同于当前硬件平台的其他平台上的程序(比如在x86cpu架构运行arm的操作系统)

    1.0以后次版本只能使用qemu-kvm(只支持Linux)进行加速,1.3版本后qemu和qemu-kvm整合了

    qemu-kvm qemu-img (qcow2,raw)作用:管理虚拟机的虚拟磁盘

2:kvm

  • KVM(linux) 全虚拟化,它有硬件支持cpu。工作在内核层,性能高;

    kvm需要经过修改qemu软件(qemu-kvm)来实现虚拟机的管理;

    kvm是一个内核模块,用户空间通过qemu模拟硬件提供给虚拟机使用,一台虚拟机就是一个普通的Linux进程,虚拟机中vcpu就是该进程中的线程

3:qemu-kvm

  • qemu-kvm

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

    qemu将kvm 整合进来,通过ioctl调用/dev/kvm接口,将有关cpu指令的部分交由内核模块来做。kvm负责cpu虚拟化+内存虚拟化,但kvm不能模拟其他设备。qemu模拟IO设备(网卡,磁盘、输入输出设备等),kvm加上qemu之后就能实现真正意义上服务器虚拟化。由于qemu模拟io设备效率不高的原因,现在常常采用半虚拟化的virtio方式来虚拟机io设备。

  • qemu-kvm作用:
    1. kvm负责:cpu,内存
    2. qemu负责:io设备,对各种虚拟设备的创建,调用管理;

四:libvirt简介

libvirt是一套免费、开源的支持linux下主流虚拟化管理程序的C函数库,为包括kvm在内的各种虚拟化管理程序提供一套方便、可靠的编程接口;

libvirt虚拟机的管理软件:kvm,xen,qemu,lxc,vmware,hyper-v,virtual box等虚拟化系统;

Libvirtd可以被本地的virsh调用,也可以被远程的virsh调用,Libvirtd调用qemu-kvm操作虚拟机;

一个针对各种虚拟化平台的虚拟机管理的api库,一些常用的虚拟机管理工具如:virsh、virt-install、virt-manager、virt-clone等和云计算平台openstack都在底层使用了libvirt提供的应用程序接口,libvirt主要由三部分组成:api库、守护进程libvirtd和默认cli管理工具virsh

五:安装kvm虚拟化管理工具

apt install qemu virt-manager
宿主机:内存4G + 纯净的系统ubuntu 22.04.1。
cpu开启虚拟化。
两个网卡,eth0 仅主机模式 10.0.0.11, eth1 nat模式 172.16.0.11 。

检查服务器是否开启虚拟化

[root@localhost ~]# hostnamectl set-hostname kvm-server
[root@kvm-server ~]# lscpu |grep -i virtualization
Virtualization:        VT-x
Virtualization type:   full
[root@kvm-server ~]# egrep -c '(vmx|svm)' /proc/cpuinfo
4

配置离线源并安装软件包

# 创建解压目录
[root@kvm-server ~]# mkdir -p /var/www/html
[root@kvm-server ~]# tar zxvf openstack-yoga-ceph.tar.gz -C /var/www/html/

# 基础工具包
bash-completion


安装kvm工具
[root@kvm-server ~]# yum install libvirt virt-install qemu-kvm virt-manager -y

virt和libvirtd以及qemu-kvm验证

[root@kvm-server ~]# systemctl start libvirtd
[root@kvm-server ~]# systemctl enable libvirtd

[root@kvm-server ~]# virt-manager


[root@kvm-server ~]# systemctl stop libvirtd
[root@kvm-server ~]# virt-manager #停止了libvirtd之后virt-manager无法连接到qemu-kvm

[root@kvm-server ~]# yum -y install mesa-libGLES-devel mesa-dri-drivers

总结:virt-manager通过libvirtd管理qemu-kvm虚拟机

六:安装一台kvm虚拟机

启动libvirtd服务

[root@kvm-server ~]# systemctl start libvirtd.service
[root@kvm-server ~]# systemctl status libvirtd

创建虚拟机
建议虚拟机内存不要低于1024M,否则安装系统特别慢!

[root@kvm-server ~]# mkdir /kvm

[root@kvm-server ~]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos76-01 --memory 1024 --vcpus 1 --disk /kvm/centos01.raw,format=raw,size=10 --cdrom /kvm/CentOS-7.6-x86_64-DVD-1810.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

--virt-type kvm 虚拟化的类型(不写此参数默认为qemu)
--os-type=linux 系统类型
--os-variant centos7 系统版本
--name centos76-01 虚拟机的名字
--memory 1024 虚拟机的内存
--vcpus 1 虚拟cpu的核数
--disk /opt/centos01.raw,format=raw,size=10 虚拟机所用磁盘或镜像文件格式以及保存位置,以G为单位
--cdrom /opt/CentOS-7-x86_64-DVD-1708.iso 系统镜像
--network network=default 使用默认桥接的网络
--graphics vnc,listen=0.0.0.0 --graphics 控制模式,listien=监听地址,port=监听端口
--noautoconsole 不自动开启控制台

查看端口:

[root@kvm-server ~]# netstat -auntlp|grep 5900
tcp     0    0 0.0.0.0:5900         0.0.0.0:*        LISTEN      19480/qemu-kvm 

vnc:10.0.0.11:5900
启动第一台云主机端口是5900,第二台云主机为5901,以此类推。

安装操作系统配置

云主机不建议用swap分区

swap分区属于硬盘上面的空间,云主机硬盘本身就是虚拟的比物理硬盘性能要低,这个时候要拿性能低的来作为内存加速或者作为虚拟内存,那么这个内存性能也很低,最后导致一些进程占用swap空间会出现进程卡顿、计算跟不上。所以云主机为了提高性能尽可能关闭swap。

第一次安装完操作系统需要手动启动

virsh start centos76-01

七:kvm虚拟机的virsh日常管理和配置

1:libvirt软件提供virsh命令

列表:virsh list --all
开机:virsh start $name
关机:virsh shutdown $name
拔电源关机:virsh destroy $name
重启:virsh reboot $name

2:导入导出虚机配置及删除

虚拟机由两个文件组成:磁盘文件和配置文件
导出配置dumpxml例子:virsh dumpxml centos76-01>centos76-01.xml
删除virsh undefine centos76-01.xml 推荐:先拔电源destroy,在删除undefine
导入配置virsh define centos76-01.xml

[root@kvm-server ~]# virsh dumpxml centos76-01>centos76-01.xml  #导出虚机配置文件
[root@kvm-server ~]# virsh destroy centos76-01  #拔电源
[root@kvm-server ~]# virsh undefine centos76-01  #删除虚机
[root@kvm-server ~]# virsh list --all  #再次查看就没有centos7实例了
[root@kvm-server ~]# virsh define /root/centos76-01.xml  #导入配置
[root@kvm-server ~]# virsh list --all  #再次查看恢复了
[root@kvm-server ~]# virsh start centos76-01 

3:重命名

domrename 必须关机状态下操作

[root@kvm-server ~]# virsh shutdown centos76-01
[root@kvm-server ~]# virsh domrename centos76-01 centos76-001
[root@kvm-server ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     centos76-001                    shut off

4:挂起

suspend,挂起之后到vnc控制界面输入任何字符都无法输入

[root@kvm-server ~]# virsh suspend centos76-001 

5:恢复挂起虚拟机

resume,恢复之后解锁

[root@kvm-server ~]# virsh resume centos76-001 

6:查询vnc端口号

vncdisplay

[root@kvm-server ~]# virsh vncdisplay centos76-001 
:0

vnc可以使用长接口10.0.0.11:5900,还可以使用短接口10.0.0.0:0去连接

7:kvm虚机开机自启动

下面两种方法哪一种都行

[root@kvm-server ~]# virsh autostart centos76-001 
[root@kvm-server ~]# ln -s /etc/libvirt/qemu/centos76-001.xml /etc/libvirt/qemu/autostart/

前提:systemctl enable libvirtd(libvirtd服务开机自启动)
开机自启动的本质就是创建一个软件接到/etc/libvirt/qemu/autostart/目录下面

[root@kvm-server ~]# ll /etc/libvirt/qemu/autostart/centos76-001.xml 
lrwxrwxrwx 1 root root 34 Oct 13 13:37 /etc/libvirt/qemu/autostart/centos76-001.xml -> /etc/libvirt/qemu/centos76-001.xml

8:kvm虚机取消开机自启动

autostart --disable

[root@kvm-server ~]# virsh autostart --disable centos76-001 
[root@kvm-server ~]# rm -rf /etc/libvirt/qemu/autostart/centos76-001.xml 

9:xshell-console登录,代替vnc

[root@kvm-server ~]# virsh console centos76-001  #默认无法登录的,没有配置console 波特率。
[root@kvm-server ~]# ssh 192.168.122.159
[email protected]'s password: 
Last login: Fri Oct 13 13:39:31 2023
[root@localhost ~]# grubby --update-kernel=ALL --args="console=ttyS0,115200n8" #115200=波特率,n8=8位
[root@localhost ~]# reboot

测试:

[root@kvm-server ~]# virsh console centos76-001 
Connected to domain 'centos76-001'
Escape character is ^] (Ctrl + ])  # 到这里之后敲回车

CentOS Linux 7 (Core)
Kernel 3.10.0-957.el7.x86_64 on an x86_64

localhost login: root # 输入账号
Password:  #输入密码
Last login: Sun Sep 17 22:05:35 from kvm01

[root@localhost ~]# logout

CentOS Linux 7 (Core)
Kernel 3.10.0-957.el7.x86_64 on an x86_64

localhost login:  # ctrl + ] # 退出 
[root@kvm-server ~]# 

10:模拟磁盘分区满了,迁移虚拟机到其它的磁盘分区

修改配置edit

直接mv移动磁盘文件到新的分区下面

[root@kvm-server ~]# virsh shutdown centos76-001 
[root@kvm-server ~]# mkdir /data
[root@kvm-server ~]# mv /kvm/centos01.raw /data/

再次启动的时候会报错(还是会去/kvm/下面寻找磁盘文件)

[root@kvm-server ~]# virsh start centos76-001 
error: Failed to start domain 'centos76-001'
error: Cannot access storage file '/kvm/centos01.raw': No such file or directory

既然找不到磁盘文件很具推断应该应该修改配置文件/etc/libvirt/qemu/centos76-001.xml
当打开这个文件之后都会有提示让使用virsh edit centos76-001去修改。

[root@kvm-server ~]# virsh edit centos76-001
   <source file='/kvm/centos01.raw'/>  修改成   <source file='/data/centos01.raw'/>

[root@kvm-server ~]# virsh start centos76-001  #再次启动成功
Domain 'centos76-001' started

[root@kvm-server ~]# virsh dumpxml centos76-001 |grep raw  #验证,能看到磁盘路径ok
      <driver name='qemu' type='raw'/>
      <source file='/data/centos01.raw'/>

八:kvm虚拟机虚拟磁盘格式转换和快照管理

raw: 裸格式,占用空间比较大,不支持快照功能,性能较好,不方便传输。假设:总10G占用10G
qcow2: cow(copy on write)占用空间小,支持快照,性能比raw差一点,方便传输。假设:总10G占用2G

如下两条命令安装操作系统的格式不一样。一个raw一个qcow2。

[root@kvm-server ~]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos01.raw,format=raw,size=10 --cdrom /opt/CentOS-7.6-x86_64-DVD-1810.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

[root@kvm-server ~]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos01.qcow2,format=qcow2,size=10 --cdrom /opt/CentOS-7.6-x86_64-DVD-1810.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

1:磁盘工具的常用命令

qemu-img info,create,resize,convert

1.1:查看虚拟磁盘信息:info

[root@kvm-server ~]# qemu-img info /data/centos01.raw 
image: /data/centos01.raw
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: 1.3G

1.2:创建一块qcow2格式的虚拟硬盘:create

[root@kvm-server ~]# qemu-img create -f qcow2 /data/centos01.qcow2 1G
Formatting '/data/centos01.qcow2', fmt=qcow2 size=1073741824 encryption=off cluster_size=65536 lazy_refcounts=off 
[root@kvm-server ~]# 
[root@kvm-server ~]# qemu-img info /data/centos01.qcow2 
image: /data/centos01.qcow2
file format: qcow2
virtual size: 1.0G (1073741824 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false

1.3:调整磁盘容量:

resize(qcow2不支持减少磁盘容量,raw支持)

[root@kvm-server ~]# qemu-img resize /data/centos01.qcow2 +1G
Image resized.

[root@kvm-server ~]# qemu-img info /data/centos01.qcow2 #再次查看virtual size变成2G为ok。
image: /data/centos01.qcow2
file format: qcow2
virtual size: 2.0G (2147483648 bytes)
disk size: 260K
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false

1.4:raw转qcow2并使用qcow2文件启动:

qemu-img convert -f raw -O qcow2 xxx.raw xxx.qcow2

[root@kvm-server ~]# qemu-img info /data/centos01.raw 
image: /data/centos01.raw
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: 1.3G

[root@kvm-server ~]# qemu-img convert -f raw -O qcow2 /data/centos01.raw /data/centos02.qcow2 
[root@kvm-server data]# ll -h /data/
total 3.1G
-rw-r--r-- 1 root root 257K Oct 13 14:12 centos01.qcow2
-rw------- 1 qemu qemu  10G Oct 13 14:13 centos01.raw
-rw-r--r-- 1 root root 1.4G Oct 13 14:13 centos02.qcow2



[root@kvm-server ~]# qemu-img info /data/centos02.qcow2 
image: /data/centos02.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 1.7G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false

验证qcow2格式磁盘启动虚拟机

[root@kvm-server ~]# virsh edit centos76-001 
<driver name='qemu' type='raw'/> 修改为:<driver name='qemu' type='qcow2'/>
<source file='/data/centos01.raw'/> 修改为:<source file='/data/centos02.qcow2'/> 

[root@kvm-server ~]# virsh start centos76-001  #启动实例
[root@kvm-server ~]# ll -h /data/centos02.qcow2 
-rw-r--r-- 1 root root 1.4G Oct 13 14:13 /data/centos02.qcow2   #qcow2格式原始大小

测试增加数据以及删除数据查看磁盘空间会不会随着删除而减少

[root@kvm-server ~]# ssh 192.168.122.159  #测试ssh登录也可以使用vnc测试
[email protected]'s password: 
Last login: Fri Oct 13 13:56:10 2023
[root@localhost ~]# dd if=/dev/zero of=test.raw bs=500M count=1
1+0 records in
1+0 records out
524288000 bytes (524 MB) copied, 7.70743 s, 68.0 MB/s
[root@localhost ~]# exit
logout
Connection to 192.168.122.159 closed.
[root@kvm-server ~]# ll -h /data/centos02.qcow2
-rw-r--r-- 1 qemu qemu 1.8G Oct 13 14:41 /data/centos02.qcow2 #qcow2格式用多少占多少

当在虚机删除500M文件之后空间也不会释放,因为只能扩大不能缩小。

[root@kvm-server ~]# ssh 192.168.122.159
[email protected]'s password: 
Last login: Fri Oct 13 14:40:59 2023 from gateway
[root@localhost ~]# 
[root@localhost ~]# rm -rf test.raw 
[root@localhost ~]# exit
logout
Connection to 192.168.122.159 closed.
[root@kvm-server ~]# ll -h /data/centos02.qcow2 
-rw-r--r-- 1 qemu qemu 1.8G Oct 13 14:42 /data/centos02.qcow2

raw和qcow2格式磁盘大小对比:

(字节单位换算器:https://tool.520101.com/calculator/zijie/ https://www.5ii.com/calcdata/)

[root@kvm-server ~]# ll /data/centos02.qcow2 
-rw-r--r-- 1 root root 1908604928 Oct  8 15:04 /data/centos02.qcow2
[root@kvm-server ~]# 
[root@kvm-server ~]# ll /data/centos01.raw 
-rw------- 1 root root 10737418240 Oct  8 09:20 /data/centos01.raw


[root@kvm-server ~]# virsh help domblkinfo 
[root@kvm-server ~]# virsh domblkinfo centos76-001 vda
[root@kvm-server ~]# virsh domblkinfo centos76-001 --all
[root@kvm-server ~]# virsh domblkinfo centos76-001 vda --human 

2:快照管理

创建快照virsh snapshot-create-as --name snapshot01 centos76-001

[root@kvm-server ~]# virsh snapshot-create centos76-001 #默认时间戳为名字
Domain snapshot 1694961947 created

[root@kvm-server ~]# virsh snapshot-create-as --name snapshot01 centos76-001 #指定名字为snapshot01
Domain snapshot snapshot01 created

查看快照virsh snapshot-list centos76-001

[root@kvm-server ~]# virsh snapshot-list centos76-001 
 Name                 Creation Time             State
------------------------------------------------------------
 1697179540           2023-10-13 14:45:40 +0800 running
 snapshot01           2023-10-13 14:45:52 +0800 running

删除快照virsh snapshot-delete centos76-001 --snapshotname 1694961947

[root@kvm-server ~]# virsh snapshot-delete centos76-001 --snapshotname 1697179540
Domain snapshot 1697179540 deleted

还原快照virsh snapshot-revert centos76-001--snapshotname snapshot01

测试:虚拟机开机之后创建一些测试文件,再关机还原快照查看文件是否存在,如果不存在则说明恢复成功

[root@kvm-server ~]# virsh snapshot-revert centos76-001 --snapshotname snapshot01

raw不支持做快照,qcow2支持快照,并且快照就保存在qcow2的磁盘文件中

# 快照保存在qcow2磁盘文件中
[root@kvm-server ~]# qemu-img info /data/centos02.qcow2 
image: /data/centos02.qcow2
file format: qcow2
virtual size: 10 GiB (10737418240 bytes)
disk size: 1.52 GiB
cluster_size: 65536
Snapshot list:
ID        TAG               VM SIZE                DATE     VM CLOCK     ICOUNT
2         snapshot01        216 MiB 2023-09-17 07:01:18 08:08:45.019           
Format specific information:
    compat: 1.1
    compression type: zlib
    lazy refcounts: false
    refcount bits: 16
    corrupt: false
    extended l2: false

九: kvm虚拟机克隆

1:完整克隆

完整克隆是原始虚拟机当前状态的完整副本。此副本虚拟机完全独立,但需要较多的存储空间;

1.1:自动克隆

[root@kvm-server ~]# ll -h /data/centos02.qcow2 
-rw-r--r-- 1 root root 2.3G Oct 13 14:53 /data/centos02.qcow2
[root@kvm-server ~]# 
[root@kvm-server ~]# virt-clone --auto-clone -o centos76-001 -n centos76-001-backup
Allocating 'centos02-clone.qcow2'               |  10 GB  00:00:02     
Clone 'centos76-001-backup' created successfully.


[root@kvm-server ~]# ll /data/centos02*   #再次查看大小不一样,克隆的时候不会克隆快照
-rw------- 1 root root 1390411776 Oct 13 14:57 /data/centos02-clone.qcow2
-rw-r--r-- 1 root root 2378695168 Oct 13 14:53 /data/centos02.qcow2

1.2:手动克隆

[root@kvm-server ~]# cp /data/centos02-clone.qcow2 /data/node1.qcow2	#拷贝磁盘文件
[root@kvm-server ~]# virsh dumpxml centos76-001 >node1.xml	#备份配置文件
[root@kvm-server ~]# vim node1.xml 	#编辑配置文件
#修改虚拟机的名字为node1
  <name>centos76-001</name>  改为    <name>node1</name>
#删除虚拟机uuid
#删除mac地址
#修改磁盘路径
<disk type='file' device='disk'>
  <driver name='qemu' type='qcow2'/>
  <source file='/data/centos01.qcow2'/>	# centos01改为node1
  <target dev='vda' bus='virtio'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</disk>
[root@kvm-server ~]# virsh define node1.xml	#导入配置文件
[root@kvm-server ~]# virsh start node1	  #启动系统

2:链接克隆

链接克隆是对原始虚拟机的引用,所需的存储空间较少。但是必须能够访问原始虚拟机才能运行;

[root@kvm-server ~]# qemu-img create -f qcow2 -b /data/centos01.qcow2 /data/node2.qcow2
Formatting '/data/node2.qcow2', fmt=qcow2 size=2147483648 backing_file='/data/centos01.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off 

[root@kvm-server ~]# qemu-img info /data/node2.qcow2 
image: /data/node2.qcow2	#在你使用web02.qcow2这块盘的时候也会要求先加载centos01-clone.qcow2这块盘,然后再把web02.qcow2这块盘的差异数据补上。
file format: qcow2
virtual size: 2.0G (2147483648 bytes)
disk size: 196K
cluster_size: 65536
backing file: /data/centos01.qcow2	#基于centos01.qcow2做的连接克隆
Format specific information:
    compat: 1.1
    lazy refcounts: false
[root@kvm-server ~]# ll -h /data/node2.qcow2 	#查看一下大小
-rw-r--r-- 1 root root 193K Oct 13 15:29 /data/node2.qcow2

[root@kvm-server ~]# virsh dumpxml centos76-001 >node2.xml
[root@kvm-server ~]# vim node2.xml
#修改虚拟机的名字
  <name>centos76-001</name>  改为 <name>node2</name>
#删除虚拟机uuid
<uuid>ded20983-d091-48f9-af0c-1e18ea3b9c72</uuid>
#删除mac地址
<mac address='52:54:00:3f:7f:62'/>
#修改磁盘路径
<source file='/data/node2.qcow2'/>
[root@kvm-server ~]# virsh define node2.xml
[root@kvm-server ~]# virsh start node2

[root@kvm-server ~]# ll -h /data/node2.qcow2 #再次查看大小变大了。这个是因为开机之后生成一些日志、数据
-rw-r--r-- 1 qemu qemu 7.7M May  2 21:08 /data/node2.qcow2

九:kvm虚拟机桥接网络

默认的虚拟机网络是nat模式,网段192.168.122.0/24

1:创建桥接网卡

创建桥接网卡

[root@kvm-server ~]# virsh iface-bridge eth1 br0 
Created bridge br0 with attached device eth1
Bridge interface br0 started

创建网桥会自动修改网卡配置文件

[root@kvm-server ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0 
DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO="none"
IPADDR="172.16.0.11"
NETMASK="255.255.255.0"
GATEWAY="172.16.0.254"
STP="on"
DELAY="0"
[root@kvm-server ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1 
DEVICE=eth1
ONBOOT=yes
BRIDGE="br0"

删除桥接网卡(删除也会自动删除 br0 网卡配置文件)

[root@kvm-server ~]# virsh iface-unbridge br0

2:新虚拟机使用桥接模式

默认NAT模式

重点修改’bridge=‘参数

[root@kvm-server ~]# qemu-img create -f qcow2 -b /data/centos02-clone.qcow2 /data/bridge.qcow2
Formatting '/data/bridge.qcow2', fmt=qcow2 size=10737418240 backing_file='/data/centos02-clone.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off 

[root@kvm-server ~]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name bridge --memory 1024 --vcpus 1 --disk /data/bridge.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

Starting install...
Domain creation completed.

验证网段是否和虚拟机桥接网段一样

[root@kvm-server ~]# virsh console bridge
[root@localhost ~]# ip a|grep 172
    inet 172.16.0.26/24 brd 172.16.0.255 scope global noprefixroute dynamic eth0

抓包测试:虚拟机长ping

[root@kvm-server ~]# tcpdump -i vnet0 -enl  icmp #vnet网线
[root@kvm-server ~]# tcpdump -i br0 -enl  icmp #br0网桥
[root@kvm-server ~]# tcpdump -i virbr0 -enl  icmp #默认net网络模式,br0启动的虚拟机这个无法抓到包
[root@kvm-server ~]# tcpdump -i eth1 -enl  icmp #eth1网卡

1.2:修改默认网络虚拟机为桥接网络

[root@kvm-server ~]# virsh destroy centos76-001
[root@kvm-server ~]# virsh edit centos76-001
  <interface type='network'>
    <mac address='52:54:00:42:53:52'/>
    <source network='default'/>
    <model type='virtio'/>
    <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
  </interface>

<!--修改成如下-->
    <interface type='bridge'>
      <mac address='52:54:00:4b:b9:6a'/>
      <source bridge='br0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>

[root@kvm-server ~]# virsh start centos76-001	#启动
[root@kvm-server ~]# virsh console centos76-001	#consle连接
[root@localhost ~]# ip a|grep 172
    inet 172.16.0.27/24 brd 172.16.0.255 scope global noprefixroute dynamic eth0

抓包测试:虚拟机长ping

[root@kvm-server ~]# tcpdump -i vnet0 -enl icmp #vnet网线
[root@kvm-server ~]# tcpdump -i br0 -enl icmp #br0网桥
[root@kvm-server ~]# tcpdump -i virbr0 -enl icmp # 默认net网络模式,br0启动的虚拟机这个无法抓到包
[root@kvm-server ~]# tcpdump -i eth1 -enl icmp # eth1网卡

1.3:网络详解

上图中左边为br桥接网络模式,右边为默认net网络模式。net模式想要上外网就需要内核转发到服务器的网卡。

# 课后学习
[root@kvm-server ~]# virsh net-list
 Name          State    Autostart   Persistent
------------------------------------------------
 default       active   yes         yes

[root@kvm-server ~]# virsh net-edit default # nat模式

# 查看虚拟机网络模式
[root@kvm-server ~]# virsh edit $name # 搜索interface

[root@kvm-server ~]# virsh net-dumpxml default

十:kvm虚拟机扩容

(硬盘、网卡、内存、cpu)

[root@kvm-server ~]# virsh snapshot-list centos76-001
[root@kvm-server ~]# virsh snapshot-delete centos76-001 --snapshotname snapshot01
[root@kvm-server ~]# virsh domrename centos76-001 vm01

1:kvm虚拟机添加硬盘

注意:必须先创建硬盘在执行添加硬盘

临时生效
virsh attach-disk vm01 /data/vm01-disk01.qcow2 vdb --subdriver qcow2
永久生效--config
virsh attach-disk vm01 /data/vm01-disk01.qcow2 vdb --subdriver qcow2 --config
临时剥离硬盘
virsh detach-disk vm01 vdb
永久剥离硬盘--config
virsh detach-disk vm01 vdb --config

创建一块10G的盘符

[root@kvm-server ~]# qemu-img create -f qcow2 /data/vm01-disk01.qcow2 10G
Formatting '/data/vm01-disk01.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=10737418240 lazy_refcounts=off refcount_bits=16

查看当前web实例盘符的名字(vda)

[root@kvm-server ~]# virsh dumpxml vm01|grep target|grep vd
      <target dev='vda' bus='virtio'/>

vm01虚拟机添加一块硬盘为vdb,必须要用绝对路径(需要虚拟机开机才可以添加)

[root@kvm-server ~]# virsh attach-disk vm01 /data/vm01-disk01.qcow2 vdb
error: Failed to attach disk
error: Requested operation is not valid: domain is not running
[root@kvm-server ~]# virsh start vm01 # 必须启动虚拟机才可以添加硬盘
[root@kvm-server ~]# virsh attach-disk vm01 /data/vm01-disk01.qcow2 vdb
Disk attached successfully


[root@kvm-server ~]# virsh dumpxml vm01|grep target|grep vd    #再次查看
      <target dev='vda' bus='virtio'/>
      <target dev='vdb' bus='virtio'/>

默认用raw格式打开硬盘所以为0MB。原因没有指定打开的格式

[root@kvm-server ~]# virsh console vm01 
[root@localhost ~]# lsblk |grep vdb
vdb    253:16   0 192.5K  0 disk 
[root@localhost ~]# 
[root@localhost ~]# fdisk -l|grep vdb
Disk /dev/vdb: 0 MB, 197120 bytes, 385 sectors #查看硬盘没有显示大小

剥离硬盘

[root@kvm-server ~]# virsh detach-disk vm01 vdb
Disk detached successfully
[root@kvm-server ~]# virsh dumpxml vm01|grep target|grep vd    #再次查看
      <target dev='vda' bus='virtio'/>

加上此参数--subdriver qcow2能识别大小。--config永久添加,如果不加重启服务器之后丢失vdb盘

[root@kvm-server ~]# virsh attach-disk vm01 /data/vm01-disk01.qcow2 vdb --subdriver qcow2
[root@kvm-server ~]# virsh attach-disk vm01 /data/vm01-disk01.qcow2 vdb --subdriver qcow2 --config

再次到虚拟机查看10G的硬盘能识别出来并挂载

[root@kvm-server ~]# virsh console vm01 
[root@localhost ~]# fdisk -l |grep vdb
Disk /dev/vdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
[root@localhost ~]# 
[root@localhost ~]# lsblk |grep vdb
vdb    253:16   0   10G  0 disk 
[root@localhost ~]# mkfs.xfs /dev/vdb 
[root@localhost ~]# mount /dev/vdb /mnt/
[root@localhost ~]# df -h /mnt/
Filesystem      Size  Used Avail Use% Mounted on
/dev/vdb         10G   33M   10G   1% /mnt
[root@localhost ~]# cp /etc/services /mnt/    #拷贝一个文件,等扩容完了之后查看文件还存不存在
[root@localhost ~]# umount /mnt/    #扩容是硬盘不能是挂载状态

测试扩容

[root@kvm-server ~]# virsh detach-disk vm01 vdb    #剥离硬盘
[root@kvm-server ~]# qemu-img resize /data/vm01-disk01.qcow2 +10GG    #扩容


[root@kvm-server ~]# qemu-img info /data/vm01-disk01.qcow2    #查看大小为20G
image: /data/vm01-disk01.qcow2
file format: qcow2
virtual size: 20 GiB (21474836480 bytes)
disk size: 11.6 MiB
cluster_size: 65536
Format specific information:
    compat: 1.1
    compression type: zlib
    lazy refcounts: false
    refcount bits: 16
    corrupt: false
    extended l2: false

添加硬盘

[root@kvm-server ~]# virsh attach-disk vm01 /data/vm01-disk01.qcow2 vdb --subdriver qcow2

再次测试挂载并查看大小

[root@kvm-server ~]# virsh console vm01
[root@localhost ~]# mount /dev/vdb /mnt/
[root@localhost ~]# ll /mnt/services 	#文件还在
-rw-r--r--. 1 root root 670293 May  3 22:47 /mnt/services

[root@localhost ~]# df -h /mnt/	#查看大小没有更新
Filesystem      Size  Used Avail Use% Mounted on
/dev/vdb         10G   33M   10G   1% /mnt

[root@localhost ~]# xfs_growfs /dev/vdb # 更新一下超级块儿(刷新分区信息)
data blocks changed from 2621440 to 5242880
[root@desktop-hh2qqho ~]# df -h /mnt
Filesystem      Size  Used Avail Use% Mounted on
/dev/vdb         20G   34M   20G   1% /mnt

2:kvm虚拟机添加网卡

添加网卡,加此--model virtio参数添加的网卡显示eth不加就随机显示ens

--config永久添加,重启也生效
添加网卡

[root@kvm-server ~]# virsh attach-interface vm01 --type bridge --source br0 --model virtio 
[root@kvm-server ~]# virsh attach-interface vm01 --type bridge --source br0 --model virtio --config

查看网卡,多了eth1

[root@kvm-server ~]# virsh console vm01
[root@localhost ~]# ip a

剥离网卡(加上虚机的mac)

[root@kvm-server ~]# virsh detach-interface vm01 --type bridge --mac 52:54:00:a9:d8:41
[root@kvm-server ~]# virsh detach-interface vm01 --type bridge --mac 52:54:00:a9:d8:41 --config

3:kvm虚拟机添加内存

新建虚机进行热添加内存

[root@kvm-server ~]# qemu-img create -f qcow2 -b /data/centos02.qcow2 -F qcow2 /data/vm02.qcow2
Formatting '/data/vm02.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=10737418240 backing_file=/data/centos02.qcow2 backing_fmt=qcow2 lazy_refcounts=off refcount_bits=16

利用此--memory 512,maxmemory=2048参数添加虚机,支持热添加内存

maxmemory指定最大内存,如果制定了此参数实际2048m内存再物理机已经分配出去了

[root@kvm-server ~]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name vm02 --memory 512,maxmemory=2048 --vcpus 1 --disk /data/vm02.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

[root@kvm-server ~]# virsh console vm02 
[root@localhost ~]# free -m	#查看当前内存
[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            302          96          82           8         122          54
Swap:             0           0           0

临时热添加内存和缩小

# 临时热添加内存
[root@kvm-server ~]# virsh setmem vm02 2048M
[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            302         112          76           8         113          44
Swap:          4095           0        4095


# 也能缩小,如果是生产不建议缩小会导致内存数据丢失
[root@kvm-server ~]# virsh setmem vm02 1024M
[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1838         113        1610           8         114        1578
Swap:          4095           0        4095

永久添加内存与缩小

[root@kvm-server ~]# virsh setmem vm02 2048M --config	#扩容
[root@kvm-server ~]# virsh setmem vm02 1024M --config	#缩小

在原有虚机热添加内存

[root@kvm-server ~]# virsh edit vm01 
  <memory unit='KiB'>1048576</memory>
  <currentMemory unit='KiB'>1048576</currentMemory>
<!--改为-->
  <memory unit='MiB'>2048</memory>
  <currentMemory unit='MiB'>1024</currentMemory>

[root@kvm-server ~]# virsh setmem vm01 2048M --config --live

[root@kvm-server ~]# virsh console vm01
[root@localhost ~]# reboot 	#重启虚机生效
[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            991          97         774           6         119         750
Swap:          4095           0        4095

[root@kvm-server ~]# virsh dominfo vm01
Id:             4
Name:           vm01
UUID:           73a3f7bb-c969-4216-ab5d-fafe6fad6d45
OS Type:        hvm
State:          running
CPU(s):         1
CPU time:       30.8s
Max memory:     2097152 KiB
Used memory:    1048576 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: none
Security DOI:   0

[root@kvm-server ~]# virsh setmem vm01 2048M

[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1838         104        1552           8         181        1562
Swap:          4095           0        4095

4:kvm虚拟机添加cpu

创建虚机进行热添加cpu

[root@kvm-server ~]# qemu-img create -f qcow2 -b /data/centos02.qcow2 -F qcow2 /data/vm03.qcow2
Formatting '/data/vm02.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=10737418240 backing_file=/data/centos02.qcow2 backing_fmt=qcow2 lazy_refcounts=off refcount_bits=16

加此参数支持热添加cpu--vcpus 5,maxvcpus=10

maxvcpus指定最大cpu,如果制定了此参数实际vcpu已经再物理机分配出去了

[root@kvm-server ~]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name vm03 --memory 512,maxmemory=2048 --vcpus 5,maxvcpus=10 --disk /data/vm03.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

增加cpu,--config永久生效,不支持减少cpu

[root@kvm-server ~]# virsh console vm03
[root@localhost ~]# lscpu |grep 'CPU(s):'
CPU(s):                5
NUMA node0 CPU(s):     0-4

# 增加cpu
[root@kvm-server ~]# virsh setvcpus vm03 6

[root@localhost ~]# lscpu |grep 'CPU(s):'
CPU(s):                6
NUMA node0 CPU(s):     0-5

标签:--,qcow2,kvm,server,virsh,root
From: https://www.cnblogs.com/zhangjianzi/p/18122862

相关文章

  • ARM架构银河麒麟使用笔记-安装KVM
    ARM架构银河麒麟使用笔记-安装KVMarm银河麒麟KVM现在的平台是,主机用的是ubuntu,里面用qemu开启了arm架构的银河麒麟系统,系统可以访问百度。要做的事情是:在这个银河麒麟系统中,再安装qemu,再用qemu创建一个x86_64位的CentOS7.9.2009的系统,这个系统使用qemu的虚拟网桥方式与银河麒麟......
  • 在Linux中,如何创建和管理KVM虚拟机?
    在Linux环境中创建和管理KVM(Kernel-basedVirtualMachine)虚拟机通常涉及以下几个步骤:1.系统准备与检查确保系统兼容性:检查CPU是否支持硬件虚拟化(如IntelVT-x或AMD-V)。可以使用以下命令:egrep-o'(vmx|svm)'/proc/cpuinfo如果返回结果中有vmx(Intel)或svm(AMD),则说明CPU支......
  • 服务器安装KVM环境并安装虚拟机(centOS7)
    一.安装KVM环境1.检测是否支持KVM        cat/proc/cpuinfo|egrep'vmx|svm'        返回结果中有vmx或svm,说明cpu是支持的2. 关闭SELinux,将/etc/sysconfig/selinux中的 SELinux=enforcing 修改为 SELinux=disabled        vi/etc/s......
  • Ubuntu中安装使用QEMU/KVM/virt-manager运行虚拟机
    本文为原创,原文发布于个人博客网站:Ubuntu中安装使用QEMU/KVM/virt-manager运行虚拟机有时候我们需要在同一台计算机中使用多种不同操作系统环境,基于已有的同一堆硬件资源来获得不同操作系统各自的便利性。对此,常用的解决方案主要有:在物理机器中安装使用双系统在宿主系统中安......
  • Ubuntu中安装使用QEMU/KVM/virt-manager运行虚拟机
    本文为原创,首次发布于我的个人博客网站:Ubuntu中安装使用QEMU/KVM/virt-manager运行虚拟机有时候我们需要在同一台计算机中使用多种不同操作系统环境,基于已有的同一堆硬件资源来获得不同操作系统各自的便利性。对此,常用的解决方案主要有:在物理机器中安装使用双系统在宿主系统......
  • kvm根据vnet找虚拟机
    盲写了一段脚本,还没验证原理:根据vnet的mac地址,遍历虚拟机的xml文件中找到有对应mac地址的那一个注意:如果虚拟机网卡的mac地址为:fa:16:3e:ef:74:6e,那么vnet对应的MAC应该为:fe:16:3e:ef:74:6e。即第一段由fa换成fe,之后相同。forvmIDin{1..100};doecho${vmID}:;......
  • kvm管理命令
    查看运行的虚拟机[root@103kvm]#virshlistId名称状态----------------------------------------------------1dbrunning5testrunning查看所有的虚拟机[root@103k......
  • RockyLinux安装QEMU/KVM虚拟化
    一、QEMU/KVM技术简介QEMU/KVM是一种开源虚拟化技术,全称是QuickEmulator/KernelBasedVirtualMachine。它结合了QEMU的模拟器和KVM(内核虚拟机)的加速器,提供了基于硬件的全虚拟化和容器级的系统虚拟化能力。QEMU是一个用于模拟计算机硬件的开源软件,它可以模拟各种硬件设备,包括CP......
  • virt-top 命令查看kvm虚拟机的资源使用情况
    命令介绍virt-top:a'top'-likeutilityforvirtualizationSUMMARYvirt-top[-options]OPTIONS-1StartbydisplayingpCPUs(default:tasks)-2Startbydisplayingnetworkinterfaces-3Startb......
  • 怎么完全删除KVM虚拟机
    使用KVM创建的虚拟机确定不需要了可以使用以下方式删除找到改虚拟机对应的磁盘列出虚拟机磁盘,假如需要删除虚拟机名为CentOSES01213#virshdomblklistCentOSES01213目标源----------------------------------hda/kvm/CentOSES01213.qcow2hdb-删除虚拟机#停......