目录

Life in Flow

知不知,尚矣;不知知,病矣。
不知不知,殆矣。

X

KVM

虚拟化软件的差别

虚拟化软件(全): qemu 软件纯模拟全虚拟化软件,特别慢!AIX,兼容性好!

xen(半) :性能特别好,需要使用专门修改之后的内核,兼容性差! RedHat 5.5 xen

kvm KVM(全): 全虚拟机,它有硬件支持 CPU,基于内核,而且不需要使用专门的内核 centos6 kvm 性能较好,兼容较好。

KVM 系统需求

  • 1CPU 核心
  • 2G 内存
  • 6G 硬盘
1# 查看系统版本
2[root@openstack ~]# cat /etc/centos-release
3
4# 首先验证CPU是否支持虚拟化,输入有vmx或svm就支持,支持虚拟化则就支持KVM
5[root@openstack ~]# cat /proc/cpuinfo | egrep 'vmx|svm'

关闭防火墙和 SElinux

1# 关闭selinux
2[root@openstack ~]# systemctl stop firewalld.service          #停止firewall
3[root@openstack ~]# systemctl disable firewalld.service    #禁止firewall开机启动
4
5# 关闭selinux
6[root@openstack ~]# setenforce 0
7[root@openstack ~]# vim /etc/sysconfig/selinux 
8SELINUX=disabled

安装 KVM

 1# 查看是否加载KVM :这表明已经加载
 2[root@openstack ~]# lsmod | grep kvm
 3kvm_intel             170086  0 
 4kvm                   566340  1 kvm_intel
 5irqbypass              13503  1 kvm
 6
 7# 如果没有加载则执行以下命令加载KVM
 8[root@openstack ~]# modprobe kvm
 9
10# 安装KVM相关软件包
11## 网络参考
12[root@openstack ~]# yum install qemu-kvm qemu-img virt-manager libvirt libvirt-python virt-manager libvirt-client virt-install virt-viewer -y
13qemu-kvm: KVM模块
14libvirt: 虚拟管理模块
15virt-manager: 图形界面管理虚拟机
16virt-install: 虚拟机命令行安装工具
17
18## 真实实验
19[root@localhost yum.repos.d]# yum install libvirt virt-install qemu-kvm -y
20
21# 启动libvirt并设置开机自启动
22[root@openstack ~]# systemctl start libvirtd
23[root@openstack ~]# systemctl enable libvirtd
24[root@localhost software]# systemctl status libvirtd.service
25   Active: active (running) 
26
27# 远程桌面管理软件
28VNC-Viewer-6.19.325-Windows-64bit
29
30# 文件传输软件
31WinSCP_5.9.0.6786_Setup

安装一台 KVM 虚拟机

1[root@localhost software]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /vmdisk/centos2.raw,format=raw,size=10 --cdrom /software/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 rhel7 系统版本
--name CentOS7 虚拟机的名字
--memory 1024 虚拟机的内存
--vcpus 1 虚拟机 CPU 的核数
--disk /opt/centos2.raw,format=raw,size=10 虚拟机硬盘路径
--cdrom /opt/CentOS-7-x86_64-DVD-1708.iso
--network network=default 使用默认 NAT 的网络
--graphics vnc,listen=0.0.0.0 将控制台通过 VNC 输出(服务端),使用 VNC 客户端
--noautoconsole

查看虚拟机监听的端口

1[root@localhost /]# netstat -lntp
2Active Internet connections (only servers)
3Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name  
4tcp        0      0 0.0.0.0:5900            0.0.0.0:*               LISTEN      33359/qemu-kvm  
5tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      22483/dnsmasq   
6tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      9396/sshd   
7tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      9832/master   
8tcp6       0      0 :::22                   :::*                    LISTEN      9396/sshd   
9tcp6       0      0 ::1:25                  :::*                    LISTEN      9832/master 

virsh 日常操作

 1# 查看运行状态的虚拟机
 2[root@localhost /]# virsh list
 3
 4# 查看所有的虚拟机
 5[root@localhost /]# virsh list --all
 6
 7# 启动虚拟机
 8[root@localhost /]# virsh start centos7
 9
10# 正常关机
11[root@localhost /]# virsh shutdown centos7
12
13# 强制关机(尽可能不用)
14[root@localhost /]# virsh destory centos7
15
16# 重启
17[root@localhost /]# virsh reboot centos7
18
19# 导出虚拟机的配置文件
20[root@localhost vmdisk]# virsh dumpxml centos7 > /vmdisk/centos7.xml
21
22# 导入配置文件
23[root@localhost vmdisk]# virsh define cento7.xml
24
25# 删除虚拟机的配置文件(仅仅是删除虚拟机的配置文件)
26[root@localhost vmdisk]# virsh undefine centos7
27
28# 导入虚拟机配置文件
29[root@localhost vmdisk]# virsh define centos7.xml
30
31# 虚拟机配置文件默认路径在 /etc/libvirt/qemu 目录下
32[root@localhost vmdisk]# ls /etc/libvirt/qemu
33centos7.xml  networks
34
35# 修改虚拟机配置文件
36[root@localhost vmdisk]# virsh edit centos7
37
38# 查看运行的虚拟机的磁盘路径
39[root@localhost vmdisk]# virsh dumpxml centos7 | grep raw
40      <driver name='qemu' type='raw'/>
41      <source file='/vmdisk/centos2.raw'/>
42
43# 修改虚拟机的名字(在关机的状态下重命名)
44[root@localhost vmdisk]# virsh domrename centos7 centos7_one
45Domain successfully renamed
46
47# 挂起虚拟机
48[root@localhost vmdisk]# virsh suspend centos7
49
50# 恢复虚拟机
51[root@localhost vmdisk]# virsh resume centos7
52
53# 查看VNC端口号  直接连接192.168.31.240:0 或 192.168.31.240:5900
54[root@localhost vmdisk]# virsh vncdisplay centos7_one
55:0
56
57# kvm虚拟机开机启动(libvirtd服务器启动的时候虚拟机就会跟着启动) systemctl restart libvirtd
58[root@localhost vmdisk]# virsh autostart centos7_one
59
60# 查看哪条虚拟机为开机自启动(设置开机自启动的虚拟机会有对应的xml文件,其实就是创建centos7.xml的软连接文件)
61[root@localhost vmdisk]# ls /etc/libvirt/qemu/autostart/
62
63# 禁止开机自启动
64[root@localhost vmdisk]# virsh autostart --disable centos7_one
65
66# 修改KVM虚拟机的内核参数配置参数
67[root@localhost ~]# ssh root@192.168.122.186	#连接KVM虚拟机
68[root@localhost ~]# grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
69[root@localhost ~]# reboot
70
71# 控制台 (可以取代VNC)
72[root@localhost vmdisk]# virsh console centos7_one
73[root@localhost vmdisk]# enter #回车
74[root@kvm1 ~]# lscpu | grep -i kvm
75Hypervisor vendor:     KVM
76[root@localhost vmdisk]# logout
77[root@localhost vmdisk]# ctrl + ]

磁盘管理

磁盘格式 功能性
raw 裸格式,占用空间比较大,不支持快照功能,性能较好,不方便传输
qcow2 cow(copyon write)占用空间小,支持快照,性能比 raw 差一点,方便传输

常用命令

 1# 查看磁盘文件信息
 2[root@localhost ~]# qemu-img info /vmdisk/centos2.raw 
 3image: /vmdisk/centos2.raw
 4file format: raw
 5virtual size: 10G (10737418240 bytes)
 6disk size: 1.3G
 7
 8# 创建磁盘
 9[root@localhost ~]# qemu-img create -f qcow2 /vmdisk/oldboy.qcow2 1G
10Formatting '/vmdisk/oldboy.qcow2', fmt=qcow2 size=1073741824 encryption=off cluster_size=65536 lazy_refcounts=off 
11
12# 查看磁盘大小
13[root@localhost vmdisk]# ll -h
14total 1.3G
15-rw-------. 1 qemu qemu  10G Apr 30 10:03 centos2.raw
16-rw-r--r--. 1 root root 5.4K Apr 30 07:56 centos7.xml
17-rw-r--r--. 1 root root 193K Apr 30 10:05 oldboy.qcow2
18
19# 调整虚拟磁盘的容量
20[root@localhost vmdisk]# qemu-img resize /vmdisk/oldboy.qcow2 1T
21Image resized.
22[root@localhost vmdisk]# qemu-img info /vmdisk/oldboy.qcow2 
23image: /vmdisk/oldboy.qcow2
24file format: qcow2
25virtual size: 1.0T (1099511627776 bytes)
26disk size: 212K
27cluster_size: 65536
28Format specific information:
29    compat: 1.1
30    lazy refcounts: false
31
32# raw格式的虚拟磁盘支持增减(缩容会导致数据丢失,生产环境中千万别用),扩容可以用。
33[root@localhost vmdisk]# qemu-img create /vmdisk/oldboy.raw 5G
34[root@localhost vmdisk]# qemu-img resize /vmdisk/oldboy.raw -2G
35Image resized.
36[root@localhost vmdisk]# qemu-img info /vmdisk/oldboy.raw 
37image: /vmdisk/oldboy.raw
38file format: raw
39virtual size: 3.0G (3221225472 bytes)
40disk size: 0
41[root@localhost vmdisk]# qemu-img resize /vmdisk/oldboy.raw +2G
42
43# 磁盘格式转换:将raw格式的磁盘转换为qcow2格式 (虚拟机处于关机状态)
44[root@localhost vmdisk]# qemu-img convert -f raw -O qcow2 /vmdisk/oldboy.raw /vmdisk/oldboy2.qcow2
45修改虚拟机配置文件中的2行
46      <driver name='qemu' type='qcow2'/>
47      <source file='/vmdisk/centos2.qcow2'/>

快照管理

 1# 创建快照
 2[root@localhost vmdisk]# virsh snapshot-create centos7_one
 3Domain snapshot 1619750229 created
 4
 5# 查看指定虚拟机的快照列表    1619750229是时间戳
 6[root@localhost vmdisk]# virsh snapshot-list centos7_one
 7 Name                 Creation Time             State
 8------------------------------------------------------------
 9 1619750229           2021-04-30 10:37:09 +0800 running
10
11# 删除快照
12[root@localhost vmdisk]# virsh snapshot-delete centos7_one --snapshotname 1619750229
13Domain snapshot 1619750229 deleted
14
15# 创建快照指定名字 env_ok
16[root@localhost vmdisk]# virsh snapshot-create-as --name env_ok centos7_one
17Domain snapshot env_ok created
18
19# 还原快照  (系统时间也会随着快照的还原而还原,一定要加定时任务同步时间)
20[root@localhost vmdisk]# virsh snapshot-revert centos7_one --snapshotname env_ok

克隆

  • 完整克隆
  • 链接克隆

完整克隆

自动克隆

 1# 完成克隆,基于centos7_one 克隆 backup
 2[root@localhost ~]# virt-clone --auto-clone -o centos7_one -n backup
 3
 4# 查看克隆之后磁盘的位置
 5[root@localhost ~]# virsh dumpxml backup | grep -i 'qcow2'
 6      <driver name='qemu' type='qcow2'/>
 7      <source file='/vmdisk/centos2-clone.qcow2'/>
 8
 9# 虚拟机的配置文件在这里
10[root@localhost ~]# ls /etc/libvirt/qemu/backup.xml 

手动克隆

 1# 克隆磁盘文件
 2[root@localhost vmdisk]# cp centos2-clone.qcow2  backup02.qcow2
 3
 4# 导出之前backup 的虚拟机配置文件,命名为backup02.xml
 5[root@localhost vmdisk]# virsh dumpxml backup > /vmdisk/backup02.xml
 6
 7# 修改虚拟机配置文件
 8[root@localhost vmdisk]# vim /vmdisk/backup02.xml
 9<name>backup02</name>
10<uuid>e3064380-2878-4451-b0b5-de82886ef214</uuid>  # 删除UUID这一行
11<source file='/vmdisk/backup02.qcow2'/>
12<mac address='52:54:00:9b:a5:0f'/>  # 删除mac地址这一行
13
14# 导入虚拟机配置文件 backup02.xml
15[root@localhost vmdisk]# virsh define /vmdisk/backup02.xml
16Domain backup02 defined from /vmdisk/backup02.xml
17
18# 查看当前虚拟机
19[root@localhost vmdisk]# virsh list --all
20 Id    Name                           State
21----------------------------------------------------
22 -     backup                         shut off
23 -     backup02                       shut off
24 -     centos7_one                    shut off
25
26# 启动backup02虚拟机
27[root@localhost vmdisk]# virsh start backup02
28Domain backup02 started

链接克隆

只有手动克隆,这里模板机为 centos7_one,对应的磁盘文件是 centos2.qcow2

创建出来的链接磁盘必须是 qcow2 格式,但是模板磁盘可以是 raw、qcow2 都行

 1# 创建链接克隆的磁盘
 2[root@localhost vmdisk]# qemu-img create -f qcow2 -b /vmdisk/centos2.qcow2 /vmdisk/backup03.qcow2
 3Formatting '/vmdisk/backup03.qcow2', fmt=qcow2 size=10737418240 backing_file='/vmdisk/centos2.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off 
 4
 5# 查看链接磁盘文件
 6[root@localhost vmdisk]# qemu-img info /vmdisk/backup03.qcow2 
 7image: /vmdisk/backup03.qcow2
 8file format: qcow2
 9virtual size: 10G (10737418240 bytes)
10disk size: 196K
11cluster_size: 65536
12backing file: /vmdisk/centos2.qcow2	# 基于此文件进行链接克隆,保存差异数据
13Format specific information:
14    compat: 1.1
15    lazy refcounts: false
16
17# 导出centos7_one的虚拟机配置文件
18[root@localhost vmdisk]# virsh dumpxml centos7_one > /vmdisk/backup03.xml
19
20# 修改backup03.xml虚拟机配置文件
21[root@localhost vmdisk]# vim /vmdisk/backup03.xml 
22  <name>backup03</name>
23  <uuid>a4d33da7-73b9-4fe7-97f4-f6c50faf6d7c</uuid>  # 删除
24  <source file='/vmdisk/backup03.qcow2'/>
25  <mac address='52:54:00:68:2c:6e'/>	# 删除
26
27# 导入backup03.xml 虚拟机配置文件
28[root@localhost vmdisk]# virsh define /vmdisk/backup03.xml 
29Domain backup03 defined from /vmdisk/backup03.xml
30
31# 启动backup03虚拟机
32[root@localhost vmdisk]# virsh start backup03
33Domain backup03 started
34
35
36# 查看虚拟机列表
37[root@localhost vmdisk]# virsh list --all
38 Id    Name                           State
39----------------------------------------------------
40 5     backup02                       running
41 6     backup03                       running
42 -     backup                         shut off
43 -     centos7_one                    shut off
44
45# 查看VNC端口号
46[root@localhost vmdisk]# virsh vncdisplay backup03
47:1

全自动链接克隆脚本

link_clone.sh 脚本内容如下

 1[root@localhost vmdisk]# cat link_clone.sh 
 2#!/bin/bash 
 3old_vm=$1 
 4new_vm=$2 
 5#a:生成虚拟机磁盘文件 
 6old_disk=`virsh dumpxml $old_vm|grep "<source file"|awk -F"'" '{print $2}'` 
 7disk_tmp=`dirname $old_disk` 
 8qemu-img create -f qcow2 -b $old_disk ${disk_tmp}/${new_vm}.qcow2 
 9
10#b:生成虚拟机的配置文件 
11virsh dumpxml $old_vm >/tmp/${new_vm}.xml 
12#修改虚拟机的名字 
13sed -ri "s#(<name>)(.*)(</name>)#\1${new_vm}\3#g" /tmp/${new_vm}.xml 
14#删除虚拟机uuid 
15sed -i '/<uuid>/d' /tmp/${new_vm}.xml 
16#删除mac地址 
17sed -i '/<mac address/d' /tmp/${new_vm}.xml 
18#修改磁盘路径 
19sed -ri "s#(<source file=')(.*)('/>)#\1${disk_tmp}/${new_vm}.qcow2\3#g" /tmp/${new_vm}.xml 
20
21#c:导入虚拟机并进行启动测试 
22virsh define /tmp/${new_vm}.xml 
23virsh start ${new_vm}
24

执行脚本

1[root@localhost vmdisk]# sh link_clone.sh centos7_one test
2Formatting '/vmdisk/test.qcow2', fmt=qcow2 size=10737418240 backing_file='/vmdisk/centos2.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off 
3Domain test defined from /tmp/test.xml
4
5Domain test started
6

桥接模式

默认虚拟机网络是 NAT 模式,网络 192.168.122.0/24

 11.创建桥接网卡:基于物理网卡ens33创建 br0 网桥
 2[root@localhost vmdisk]# virsh iface-bridge ens33 br0
 3Created bridge br0 with attached device ens33
 4
 52.会报错断开连接,登录宿主机执行命令
 6systemctl restart network
 7
 83.可以连上检查网络已有桥接网络 br0
 9[root@localhost ~]# grep -i "." /etc/sysconfig/network-scripts/ifcfg-*
10

新虚拟机桥接模式

 1# 代表新虚拟机交接到br0这个网卡上:安装新的虚拟机
 2[root@localhost software]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /vmdisk/centos2.raw,format=raw,size=10 --cdrom /software/CentOS-7.6-x86_64-DVD-1810.iso --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
 3
 4# 克隆新的虚拟机
 5# 创建连接磁盘文件
 6[root@localhost ~]# qemu-img create -f qcow2 -b /vmdisk/centos2.qcow2 /vmdisk/backup04.qcow2
 7Formatting '/vmdisk/backup04.qcow2', fmt=qcow2 size=10737418240 backing_file='/vmdisk/centos2.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off 
 8
 9# 安装并从硬盘启动新的虚拟机
10[root@localhost ~]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name backup04 --memory 1024 --vcpus 1 --disk /vmdisk/backup04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
11
12# 通过console 或 VNC连接虚拟机(console还没有设置,所以连接不上) 192.168.31.147/24 
13[root@MiWiFi-R3P-srv ~]# ip addr
141: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
15    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
16    inet 127.0.0.1/8 scope host lo
17       valid_lft forever preferred_lft forever
18    inet6 ::1/128 scope host 
19       valid_lft forever preferred_lft forever
202: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
21    link/ether 52:54:00🏎62:b4 brd ff:ff:ff:ff:ff:ff
22    inet 192.168.31.147/24 brd 192.168.31.255 scope global noprefixroute dynamic eth0
23       valid_lft 42822sec preferred_lft 42822sec
24    inet6 fe80::7d27:42de:ddcf:c118/64 scope link noprefixroute 
25       valid_lft forever preferred_lft forever

老虚拟机从 NAT 模式改为桥接模式(修改虚拟机配置文件)

 1# 注意需要虚拟机关机状态下修改,重启虚拟机才会生效
 2[root@MiWiFi-R3P-srv ~]# virsh edit backup02
 3<interface type='network'>    ==>   <interface type='bridge'>
 4<source network='deafult'/>   ==>   <source bridge='br0'/>
 5
 6# 启动backup02 虚拟机
 7[root@localhost ~]# virsh start backup02
 8[root@localhost ~]# virsh vncdisplay backup02
 9:0
10
11# 登录vnc查看ip,并且使用ssh连接验证
12
13# 登录之后可以自己设置IP地址,从DHCP模式设置为static模式
14[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 
15TYPE="Ethernet"
16PROXY_METHOD="none"
17BROWSER_ONLY="no"
18BOOTPROTO="static"
19IPADDR=192.168.31.180
20NETMASK=255.255.255.0
21GATEWAY=192.168.31.1
22DNS1=192.168.31.1
23DEFROUTE="yes"
24IPV4_FAILURE_FATAL="no"
25IPV6INIT="yes"
26IPV6_AUTOCONF="yes"
27IPV6_DEFROUTE="yes"
28IPV6_FAILURE_FATAL="no"
29IPV6_ADDR_GEN_MODE="stable-privacy"
30NAME="eth0"
31UUID="12468621-5a40-48c9-b17b-17d7645a9ea4"
32DEVICE="eth0"
33ONBOOT="yes"

NAT 模式

机器 网段
KVM 宿主机 br0 192.168.31.140/24 (外网:桥接模式)
virbr0 192.168.122.1/24(NAT 模式,与虚拟机通信)
虚拟机 192.168.122.187/24
192.168.122.1/24 (网关)

使用 iptables 让虚拟机实现上网

 1# 编辑内核配置文件,开启转发
 2[root@localhost ~]# vim /etc/sysctl.conf
 3net.ipv4.ip_forward = 1
 4
 5# 使内核生效
 6[root@localhost ~]# sysctl -p
 7
 8# 清空防火墙的filter表
 9[root@localhost ~]# iptables -F
10
11# 添加转发规则
12[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.122.0/24 -j MASQUERADE 
13
14# 开启iptables
15[root@localhost ~]# systemctl start firewalld

热添加硬盘

添加另外一块磁盘

 1# 创建磁盘文件
 2[root@localhost ~]# qemu-img create -f qcow2 /vmdisk/backup03-add.qcow2 20G
 3Formatting '/vmdisk/backup03-add.qcow2', fmt=qcow2 size=21474836480 encryption=off cluster_size=65536 lazy_refcounts=off 
 4
 5# 查看当前虚拟机所有盘符
 6[root@localhost ~]# virsh dumpxml backup03 | grep target
 7      <target dev='vda' bus='virtio'/>
 8
 9# 为虚拟机附加硬盘:设备名字叫vdb  (这种方式是错误的:添加完之后磁盘容量是0,因为默认是raw类型)
10[root@localhost ~]# virsh attach-disk backup03 /vmdisk/backup03-add.qcow2 vdb
11Disk attached successfully
12
13# 卸载指定磁盘(临时)
14[root@localhost ~]# virsh detach-disk backup03 vdb
15Disk detached successfully
16
17# 卸载指定磁盘(永久)
18[root@localhost ~]# virsh detach-disk backup03 vdb --config
19Disk detached successfully
20
21# 为虚拟机附加硬盘,设备名字叫vdb(并且指定磁盘类型),临时添加,重启系统就会消失
22[root@localhost ~]# virsh attach-disk backup03 /vmdisk/backup03-add.qcow2 vdb --subdriver qcow2
23Disk attached successfully
24
25# 为虚拟机附加硬盘,设备名字叫vdb(并且指定磁盘类型)
26[root@localhost ~]# virsh attach-disk backup03 /vmdisk/backup03-add.qcow2 vdb --subdriver qcow2 --config
27
28# 进入虚拟机查看:发现有 
29[root@localhost ~]# fdisk -l
30/dev/vdb :20GB
31
32# 格式化
33[root@localhost ~]# mkfs.xfs /dev/vdb
34
35# 将/dev/vdb 挂载到/mnt 目录上
36[root@localhost ~]# mount /dev/vdb /mnt
37
38# 复制数据到mnt目录
39[root@localhost ~]# cp /etc/services /mnt
40
41# 准备扩容(扩容之前需要umount 掉挂载点)
42[root@localhost ~]# umount /mnt
43
44# 剥离vdb从虚拟机中
45[root@localhost ~]# virsh detach-disk backup03 vdb
46Disk detached successfully
47
48# 扩容 +10G
49[root@localhost ~]# qemu-img resize /vmdisk/backup03-add.qcow2 +10G
50Image resized.
51
52# 查看磁盘信息
53[root@localhost ~]# qemu-img info /vmdisk/backup03-add.qcow2 
54image: /vmdisk/backup03-add.qcow2
55file format: qcow2
56virtual size: 30G (32212254720 bytes)
57
58# 再次附加磁盘
59[root@localhost ~]# virsh attach-disk backup03 /vmdisk/backup03-add.qcow2 vdb --subdriver qcow2
60Disk attached successfully
61
62# 重新的mount 
63[root@localhost ~]# mount /dev/vdb /mnt
64
65# 查看/mnt目录下的数据是否丢失
66[root@localhost ~]# ls /mnt
67services
68
69# 系统重新识别磁盘容量(更新磁盘分区信息)ex4文件系统使用 resize2fs /dev/vdb  更新分区信息
70[root@localhost ~]# xfs_growfs /dev/vdb
71
72# 再次查看挂载点容量 (发现变为30G)
73[root@localhost ~]# df -h

热添加网卡

 1# 添加网卡 (临时添加,推荐使用)
 2[root@localhost ~]# virsh attach-interface backup03 --type bridge --source br0 --model virtio
 3Interface attached successfully
 4
 5# 添加网卡 (永久添加,但是需要重启)
 6[root@localhost ~]# virsh attach-interface backup03 --type bridge --source br0 --model virtio --config
 7Interface attached successfully
 8
 9# 移除网卡
10[root@localhost ~]# virsh detach-interface backup03 --type bridge --mac 52:54:00:6a:bc:f9
11Interface detached successfully

热添加内存

新虚拟机支持内存扩容

 1# 创建连接磁盘
 2[root@localhost ~]# qemu-img create -f qcow2 -b /vmdisk/centos2.qcow2 /vmdisk/backup05.qcow2
 3Formatting '/vmdisk/backup05.qcow2', fmt=qcow2 size=10737418240 backing_file='/vmdisk/centos2.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off
 4
 5# 创建并启动新的虚拟机
 6[root@localhost ~]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name backup05 --memory 512,maxmemory=2048 --vcpus 1 --disk /vmdisk/backup05.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
 7
 8# 查看当前内存
 9[root@MiWiFi-R3P-srv ~]# free -m
10              total        used        free      shared  buff/cache   available
11Mem:            463          96         246           8         119         217
12Swap:             0           0           0
13
14# 热添加内存(永久操作需要 --config)
15[root@localhost ~]# virsh setmem backup05 1024M
16
17# 查看当前内存
18[root@MiWiFi-R3P-srv ~]# free -m
19              total        used        free      shared  buff/cache   available
20Mem:            975          96         759           8         119         729
21Swap:             0           0           0
22

老虚拟机支持内存扩容(修改完虚拟机配置文件需要重启)

1# 修改最大内存和当前内存
2[root@localhost ~]# virsh edit backup04
3<memory unit='KiB'>1048576</memory>	==>	<memory unit='MiB'>2048</memory>
4<currentMemory unit='KiB'>1048576</currentMemory>	==>	<currentMemory unit='MiB'>1024</currentMemory>
5
6# 重启虚拟机
7[root@localhost ~]# virsh shutdown backup04
8[root@localhost ~]# virsh start backup04

热添加 CPU

 1# 创建连接磁盘
 2[root@localhost ~]# qemu-img create -f qcow2 -b /vmdisk/centos2.qcow2 /vmdisk/backup06.qcow2
 3
 4# 创建并启动新的虚拟机
 5[root@localhost ~]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name backup06 --memory 512,maxmemory=2048 --vcpus 1,maxvcpus=10 --disk /vmdisk/backup06.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
 6
 7# 查看CPU个数
 8[root@MiWiFi-R3P-srv ~]# lscpu | grep "CPU(s):"
 9CPU(s):                1
10NUMA node0 CPU(s):     0
11
12# 扩容CPU 为2个
13[root@localhost ~]# virsh setvcpus backup06 2
14
15# 查看CPU个数
16[root@MiWiFi-R3P-srv ~]# lscpu | grep "CPU(s):"
17CPU(s):                2
18NUMA node0 CPU(s):     0,1

作者:Soulboy