kvm 虚拟化

KVM(Kernel-Based Virtual Machines)是一个基于Linux内核的虚拟化技术, 可以直接将Linux内核转换为Hypervisor(系统管理程序)从而使得Linux内核能够直接管理虚拟机, 直接调用Linux内核中的内存管理、进程管理子系统来管理虚拟机。

一 虚拟机配置

1.修改虚拟机内存,至少设置成2 GB

“硬件”选项卡中单击“处理器”, 在虚拟化引擎中勾选如红框内所示选项,如下图:

(千万别忘了)

kvm  虚拟化

 

 再添加一个磁盘大小为50的硬盘

kvm  虚拟化

 

 上图为虚拟机的设置

然后启动虚拟机进行配置

 2. 检查 CPU 参数

启动虚拟机,查看以下,内存是否更改成功:

[root@kvm ~]# free
       total      used     free      shared    buff/cache   available
Mem:  1868688  125360  1582372     8752     160956     1584208
Swap:  097148     0     2097148

检查 CPU 是否开启虚拟化支持:

kvm  虚拟化
[root@kvm ~]# grep -Ei 'vmx|svm' /proc/cpuinfo
//vmx为英特尔的cpu;svm为AMD的cpu。
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch arat tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec xsaves
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch arat tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec xsaves
kvm  虚拟化

如果显示为空,就要检查虚拟化设置,是否打 “√

 3.挂载新磁盘

使用 lsblk 命令,检查虚拟机是否新增一块50的磁盘;

kvm  虚拟化
[root@kvm ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0  500M  0 part /boot
└─sda2            8:2    0 19.5G  0 part 
  ├─centos-root 253:0    0 17.5G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   50G  0 disk 
sr0              11:0    1    4G  0 rom 
kvm  虚拟化

sdb为新增的磁盘

然后格式化这块磁盘,格式化成ext4格式:

kvm  虚拟化
[root@kvm ~]# mkfs.ext4 /dev/sdb 
mke2fs 1.42.9 (28-Dec-2013)
/dev/sdb is entire device, not just one partition!
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
3276800 inodes, 13107200 blocks
655360 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2162163712
400 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
4096000, 7962624, 11239424

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done   

[root@kvm ~]# blkid /dev/sdb
//blkid+磁盘:查看磁盘信息
/dev/sdb: UUID="dab6d659-e334-41ed-a15a-96ce05b48c1a" TYPE="ext4" 
kvm  虚拟化

格式化完成后,挂载磁盘,先创建挂载目录 /kvm_data ,然后进行挂载

[root@kvm ~]# mkdir /kvm_data
[root@kvm ~]# mount /dev/sdb /kvm_data/

为了方便开机可以自动挂载,编写 /etc/fstab 文件 ,添加文件最末一行:

kvm  虚拟化
[root@kvm ~]# vi /etc/fstab 
[root@kvm ~]# cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Thu Aug 22 22:51:46 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=34f3cd91-b7f0-44dd-9334-2bb66e939898 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
/dev/sdb     /kvm_data           ext4      defaults    0 0
kvm  虚拟化

4. 关闭防火墙和selinux

关闭防火墙设置开机不自启:

[root@kvm ~]# systemctl stop firewalld
[root@kvm ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.

关闭SELinux,编辑 /etc/selinux/config,将 enforcing 修改为 disabled 

kvm  虚拟化
[root@kvm ~]# vi /etc/selinux/config
[root@kvm ~]# cat /etc/selinux/config 

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled 
//修改这一位置的内容
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted
kvm  虚拟化

修改完后,重启虚拟机,使其生效,使用getenforce查看:

[root@kvm ~]# getenforce 
Disabled

5.安装 KVM

使用Yum 安装KVM:

[root@kvm ~]# yum install -y  virt-*  libvirt  bridge-utils qemu-img
…………
Complete!

二 启动KVM

1.配置网卡

增加桥接网卡 ifcfg-br0

[root@kvm ~]# cd /etc/sysconfig/network-scripts/
[root@kvm network-scripts]# cp ifcfg-eno16777736 ifcfg-br0
//ifcfg-eno16777736为配置IP的网卡,你的网卡可能与我的不同

修改桥接网卡 ifcfg-br0的内容

kvm  虚拟化
[root@kvm network-scripts]# vi ifcfg-br0 
[root@kvm network-scripts]# cat ifcfg-br0 
TYPE=Bridge
BOOTPROTO=none
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.16.5
NETMASK=255.255.255.0
GATEWAY=192.168.16.2
DNS1=114.114.114.114
DNS2=8.8.8.8
kvm  虚拟化

修改NATA网卡 ifcfg-eno16777736

kvm  虚拟化
[root@kvm network-scripts]# vi ifcfg-eno16777736
[root@kvm network-scripts]# cat ifcfg-eno16777736 
TYPE=Ethernet
BOOTPROTO=none
NAME=eno16777736
DEVICE=eno16777736
ONBOOT=yes
BRIDGE=br0
kvm  虚拟化

修改完网卡内容后 ,重新启动网卡服务并查看网卡信息

kvm  虚拟化
[root@kvm network-scripts]# service network restart
Restarting network (via systemctl):  [  OK  ]     
[root@kvm network-scripts]# ifconfig 
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.16.5  netmask 255.255.255.0  broadcast 
192.168.16.255
        inet6 fe80::20c:29ff:fe8d:1f90  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:8d:1f:90  txqueuelen 0  (Ethernet)
        RX packets 90  bytes 7092 (6.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 38  bytes 3604 (3.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  
mtu 1500
        ether 00:0c:29:8d:1f:90  txqueuelen 1000  (Ethernet)
        RX packets 126287  bytes 182444678 (173.9 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 32532  bytes 2953477 (2.8 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
kvm  虚拟化

可以清楚的看到br0网卡出现并且带有IP,而以前的eno16777736网卡则没有IP。网卡配置完成。

2.启动 libvirtd服务

检查KVM模块是否加载

[root@kvm network-scripts]# lsmod|grep kvm
kvm_intel             162153  0 
kvm                   525259  1 kvm_intel

启动libvirtd并检查是否成功启动

kvm  虚拟化
[root@kvm network-scripts]# systemctl start libvirtd
[root@kvm network-scripts]# ps -ef |grep libvirt
root      17270      1  1 04:36 ?        00:00:00 /usr/sbin/libvirtd
nobody    17383      1  0 04:36 ?        00:00:00 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
root      17384  17383  0 04:36 ?        00:00:00 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
root      17416   2264  0 04:36 pts/0    00:00:00 grep --color=auto libvirt
kvm  虚拟化

启动成功后,使用brctl命令可以看到两个网卡

kvm  虚拟化
[root@kvm ~]# cd
[root@kvm ~]# brctl show
bridge name     bridge id               STP enabled     interfaces
br0            8000.000c298d1f90       no          eno16777736
virbr0          8000.525400c7e229       yes           virbr0-nic
kvm  虚拟化

3.命令安装CentOS7

CentOS7镜像下载地址:

http://mirrors.163.com/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-2003.iso

首先,通过 SCRT上传CentOS 7镜像到 /tmp 目录下,如果没有镜像的可以自行下载。上传后,使用 ll 命令查看 /tmp 目录下是否存在CentOS 7镜像文件

[root@kvm ~]# ll /tmp/
total 4228096
-rw-r--r--  1 root root 4329570304 Apr 15  2016 CentOS-7-x86_64-DVD-1511.iso

镜像存在,使用 virt-install 进行 CentOS 7 的安装

kvm  虚拟化
[root@kvm ~]# virt-install --name=test --memory=512,maxmemory=1024
--vcpus=1,maxvcpus=2 --os-type=linux --os-variant=rhel7
--location=/tmp/CentOS-7-x86_64-DVD-1511.iso
--disk path=/kvm_data/test.img,size=10 
--bridge=br0
--graphics=none
--console=pty,target_type=serial 
--extra-args="console=tty0 console=ttyS0"
kvm  虚拟化

打完上面那条命令后,等一会,就可以看见下面这段命令,这是系统基础设置,带 [!] 基本都是需要配置的,接下来我们开始配置 “Timezone settings” ,输入 “2”,按 Enter 

kvm  虚拟化
Starting installer, one moment...
anaconda 21.48.22.56-1 for CentOS 7 started.
 * installation log files are stored in /tmp during the installation
 * shell is available on TTY2
 * when reporting a bug add logs from /tmp as separate text/plain attachments
17:01:51 Not asking for VNC because we don't have a network
================================================================================
================================================================================
Installation

 1) [x] Language settings                 2) [!] Timezone 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)
 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]: 2
=====================================================================
kvm  虚拟化

“Timezone settings”时区设置选择 5) Asia亚洲,再选择城市 62) Shanghai上海

kvm  虚拟化
Timezone settings

Available regions
 1)  Africa                 6)  Atlantic              10)  Pacific
 2)  America                7)  Australia             11)  US
 3)  Antarctica             8)  Europe                12)  Etc
 4)  Arctic                 9)  Indian
 5)  Asia
Please select the timezone.
Use numbers or type names directly [b to region list, q to quit]: 5
================================================================================
================================================================================
Timezone settings

Available timezones in region Asia
 1)  Aden                  28)  Irkutsk               54)  Pyongyang
 2)  Almaty                29)  Jakarta               55)  Qatar
 3)  Amman                 30)  Jayapura              56)  Qyzylorda
 4)  Anadyr                31)  Jerusalem             57)  Rangoon
 5)  Aqtau                 32)  Kabul                 58)  Riyadh
 6)  Aqtobe                33)  Kamchatka             59)  Sakhalin
 7)  Ashgabat              34)  Karachi               60)  Samarkand
 8)  Baghdad               35)  Kathmandu             61)  Seoul
 9)  Bahrain               36)  Khandyga              62)  Shanghai
10)  Baku                  37)  Kolkata               63)  Singapore
11)  Bangkok             38)Krasnoyarsk             64) Srednekolymsk
12)  Beirut                39)  Kuala_Lumpur          65)  Taipei
13)  Bishkek               40)  Kuching               66)  Tashkent
14)  Brunei                41)  Kuwait                67)  Tbilisi
15)  Chita                 42)  Macau                 68)  Tehran
16)  Choibalsan            43)  Magadan               69)  Thimphu
17)  Colombo               44)  Makassar              70)  Tokyo
18)  Damascus             45)  Manila                71)  Ulaanbaatar
19)  Dhaka                 46)  Muscat                72)  Urumqi
20)  Dili                  47)  Nicosia               73)  Ust-Nera
21)  Dubai                 48)  Novokuznetsk          74)  Vientiane
22)  Dushanbe             49)  Novosibirsk           75)  Vladivostok
Press ENTER to continue
23)  Gaza                  50)  Omsk                  76)  Yakutsk
24)  Hebron             51)  Oral                  77)  Yekaterinburg
25)  Ho_Chi_Minh           52)  Phnom_Penh            78)  Yerevan
26)  Hong_Kong             53)  Pontianak
27)  Hovd
Please select the timezone.
Use numbers or type names directly [b to region list, q to quit]: 62
================================================================================
kvm  虚拟化

输入完毕后,可以发现 2 的 [!] 变成了 [x] ,证明配置完毕。

接下来配置“Software selection”,选择 “4”,在选择 “c”,因为默认就是 minimalinstall,按 Enter 键:

kvm  虚拟化
Installation

 1) [x] Language settings                 2) [x] Timezone settings
        (English (United States))                (Asia/Shanghai timezone)
 3) [x] Installation source               4) [!] 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]: 4
================================================================================
================================================================================
Base environment
Software selection

Base environment

 1)  [x] Minimal Install                 7)  [ ] Server with GUI
 2)  [ ] Compute Node                    8)  [ ] GNOME Desktop
 3)  [ ] Infrastructure Server           9)  [ ] KDE Plasma Workspaces
 4)  [ ] File and Print Server          10)  [ ] Development and Creative Work
 5)  [ ] Basic Web Server station
 6)  [ ] Virtualization Host
  Please make your choice from above ['q' to quit | 'c' to continue |
  'r' to refresh]: c
kvm  虚拟化

接下来配置 “Installation Destination”,选择 “5”,其余的依次选择 “c”,按 Enter 键:

kvm  虚拟化
Installation

 1) [x] Language settings                 2) [x] Timezone settings
        (English (United States))           (Asia/Shanghai timezone)
 3) [!] Installation source               4) [!] Software selection
        (Processing...)                          (Processing...)
 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]: c
================================================================================
================================================================================
Partition Scheme Options

[ ] 1) Standard Partition

[ ] 2) Btrfs

[x] 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
Generating updated storage configuration
Checking storage configuration...
================================================================================
================================================================================
kvm  虚拟化

接下来配置 “Root password”,选择 8,按 Enter 键:

kvm  虚拟化
Installation

 1) [x] Language settings                 2) [x] Timezone settings
        (English (United States))                (Asia/Shanghai timezone)
 3) [x] Installation source               4) [x] Software selection
        (Local media)                            (Minimal Install)
 5) [x] Installation Destination          6) [x] Kdump
        (Automatic partitioning selecte          (Kdump is enabled)
        d)                                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
================================================================================
================================================================================
kvm  虚拟化

依次输入两次密码,密码相同,我设置的为123456

kvm  虚拟化
Password: 123456 
//密码为密文,不显示。
Password (confirm): 123456
================================================================================
================================================================================
Question

You have provided a weak password: The password fails the dictionary check - it 
is too simplistic/systematic
Would you like to use it anyway?
//这句话的意思:你的密码太过简单,是否使用它,输入yes即可。
Please respond 'yes' or 'no': yes
=========================================================
=========================================================
kvm  虚拟化

配置完成,选择 “b”,按 Enter 键后,开始安装

kvm  虚拟化
Installation

 1) [x] Language settings                 2) [x] Timezone settings
        (English (United States))                (Asia/Shanghai timezone)
 3) [x] Installation source               4) [x] Software selection
        (Local media)                            (Minimal Install)
 5) [x] Installation Destination          6) [x] Kdump
        (Automatic partitioning selecte          (Kdump is enabled)
        d)                                8) [x] Root password
 7) [ ] Network configuration                    (Password is 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]: b
================================================================================
================================================================================
Progress
Setting up the installation environment
.
Creating disklabel on /dev/vda
.
Creating xfs on /dev/vda1
.
Creating lvmpv on /dev/vda2
.
Creating swap on /dev/mapper/centos-swap
.
……………………
Installing readline (34/297)
Installing gawk (35/297)
Installing elfutils-libelf (36/297)
Installing libgpg-error (37/297)
Installing libffi (38/297)
Installing libattr (39/297)
Installing libacl (40/297)
Installing libcap (41/297)
Installing libgcrypt (42/297)
Installing cpio (43/297)
Installing libxml2 (44/297)
Installing libnl3 (45/297)
Installing expat (46/297)
Installing p11-kit (47/297)
……………………
.
Performing post-installation setup tasks
.
Configuring installed system
.
Writing network configuration
.
Creating users
.
Configuring addons
.
Generating initramfs
.
Running post-installation scripts
.
        Use of this product is subject to the license agreement found at /usr/share/centos-release/EULA

        Installation complete.  Press return to quit 
//按回车
……………………
CentOS Linux 7 (Core)
Kernel 3.10.0-327.el7.x86_64 on an x86_64
localhost login: root
Password: 123456
[root@localhost ~]# 
//按“Ctrl+]”键,退出终端,回到宿主机。
[root@kvm ~]# 
kvm  虚拟化

CentOS 7安装完成。

三  虚拟机管理

1.完成虚拟机安装,已经退回到宿主机,接下来我们来通过宿主机 virsh 命令进行管理刚才安装的 CentOS 7虚拟机

查看虚拟机列表:

kvm  虚拟化
[root@kvm ~]# virsh list
//查看虚拟机列表,只能看到正在运行的虚拟机
 Id    Name                           State
----------------------------------------------------
 2     test                           running
[root@kvm ~]# virsh list --all
//查看虚拟机列表,包括未运行的虚拟机
 Id    Name                           State
----------------------------------------------------
 2     test                           running
kvm  虚拟化

进入指定的虚拟:

kvm  虚拟化
[root@kvm ~]# virsh console test
Connected to domain test
Escape character is ^]
//如果迟迟未动敲下回车就ok,下面就是正常登录时需要输入的用户名密码
CentOS Linux 7 (Core)
Kernel 3.10.0-327.el7.x86_64 on an x86_64

localhost login: 
kvm  虚拟化

若发生以下报错信息,命令如下:

[root@kvm ~]# virsh console test
Connected to domain test
Escape character is ^]
error: operation failed: Active console session exists for this domain

解决方式,命令如下:

[root@kvm ~]# ps -ef |grep console
root      11167  10987  0 01:55 tty1     00:00:00 virsh console test
root      16017  15750  0 10:01 pts/1    00:00:00 grep --color=auto console
[root@kvm ~]# kill -9 11167

vrish常用命令,命令如下:

virsh shutdown test          //关闭虚拟机

virsh start test                  //开启虚拟机

virsh destroy test             //类似stop,这个是强制停止

virsh undefine test           //彻底销毁虚拟机,会删除虚拟机配置文件,virsh list --all就看不到

virsh autostart test           //宿主机开机该虚拟机也开机

virsh autostart --disable test     //解除开机启动

virsh suspend test           //挂起

virsh resume test            //恢复

2. 克隆虚拟机

克隆虚拟机之前,要先关闭虚拟机,不然会提示这种错误:

[root@kvm ~]# virt-clone --original test --name test02 --file 
/kvm_data/test02.img
ERROR    Domain with devices to clone must be paused or shutoff.

关闭虚拟机后,再次进行克隆:

kvm  虚拟化
[root@kvm ~]# virsh shutdown test
Domain test is being shutdown
[root@kvm ~]# virt-clone  --original test --name test02 --file 
/kvm_data/test02.img
Allocating 'test02.img'                        3% 
[=                    ]  20 MB/s | 365 MB  00:08:23 ETA
//开始克隆
[root@kvm ~]# virt-clone  --original test --name test02 --file 
/kvm_data/test02.img
Allocating     'test02.img'         |  10 GB  00:00:35     
Clone 'test02' created successfully.
//克隆完成且成功
kvm  虚拟化

 original:指定克隆源虚拟机。

 name:指定克隆后的虚拟机名字。

 file:指定目标虚拟机的虚拟磁盘文件。

查看虚拟机配置文件 /etc/libvirt/qemu/ ,看是否增加 test02.xml 文件:

[root@kvm ~]# ls /etc/libvirt/qemu/
networks  test02.xml  test.xml

接下来,我们启动刚刚克隆的虚拟机test02,首先查看虚拟机列表,然后启动克隆的虚拟机test02

kvm  虚拟化
[root@kvm ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     test                           shut off
 -     test02                         shut off

[root@kvm ~]# virsh start test02
Domain test02 started
kvm  虚拟化

3. 快照管理

快照是在我们使用Vmware的时候,很常用的一个功能。它可以回到之前的某一状态。在KVM中RAW格式的虚拟磁盘不支持做快照,qcow2支持

创建快照:

[root@kvm ~]# virsh snapshot-create test
Domain snapshot 1588485687 created

查看test.img信息,同时会查看到快照列表:

kvm  虚拟化
[root@kvm ~]# qemu-img info /kvm_data/test.img 
image: /kvm_data/test.img
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 1.1G
cluster_size: 65536
Snapshot list:
ID    TAG       VM SIZE   DATE              VM CLOCK
1     1588485687    0       2020-05-03 14:01:27   00:00:00.000
Format specific information:
    compat: 1.1
lazy refcounts: true
kvm  虚拟化

列出所有快照:

[root@kvm ~]# virsh snapshot-list test
 Name                 Creation Time             State
------------------------------------------------------------
 1588485687           2020-05-03 14:01:27 +0800 shutoff

查看当前快照版本:

kvm  虚拟化
[root@kvm ~]# virsh snapshot-current test
<domainsnapshot>
  <name>1588485687</name>
  <state>shutoff</state>
  <creationTime>1588485687</creationTime>
  <memory snapshot='no'/>
  <disks>
    <disk name='vda' snapshot='internal'/>
    <disk name='hda' snapshot='no'/>
  </disks>
  <domain type='kvm'>
    <name>test</name>
    <uuid>49d7cb9c-20dc-42dd-a260-01532b5132e5</uuid>
    <memory unit='KiB'>1048576</memory>
    <currentMemory unit='KiB'>524288</currentMemory>
    <vcpu placement='static' current='1'>2</vcpu>
    <os>
      <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
      <boot dev='hd'/>
    </os>
    <features>
      <acpi/>
      <apic/>
    </features>
    <cpu mode='custom' match='exact' check='partial'>
      <model fallback='allow'>Broadwell-noTSX-IBRS</model>
      <feature policy='require' name='md-clear'/>
      <feature policy='require' name='spec-ctrl'/>
      <feature policy='require' name='ssbd'/>
    </cpu>
    <clock offset='utc'>
      <timer name='rtc' tickpolicy='catchup'/>
      <timer name='pit' tickpolicy='delay'/>
      <timer name='hpet' present='no'/>
    </clock>
    <on_poweroff>destroy</on_poweroff>
    <on_reboot>restart</on_reboot>
    <on_crash>destroy</on_crash>
    <pm>
      <suspend-to-mem enabled='no'/>
      <suspend-to-disk enabled='no'/>
    </pm>
    <devices>
      <emulator>/usr/libexec/qemu-kvm</emulator>
      <disk type='file' device='disk'>
        <driver name='qemu' type='qcow2'/>
        <source file='/kvm_data/test.img'/>
        <target dev='vda' bus='virtio'/>
        <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
      </disk>
      <disk type='file' device='cdrom'>
        <driver name='qemu' type='raw'/>
        <target dev='hda' bus='ide'/>
        <readonly/>
        <address type='drive' controller='0' bus='0' target='0' unit='0'/>
      </disk>
      <controller type='usb' index='0' model='ich9-ehci1'>
        <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x7'/>
      </controller>
      <controller type='usb' index='0' model='ich9-uhci1'>
        <master startport='0'/>
        <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0' multifunction='on'/>
      </controller>
      <controller type='usb' index='0' model='ich9-uhci2'>
        <master startport='2'/>
        <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x1'/>
      </controller>
      <controller type='usb' index='0' model='ich9-uhci3'>
        <master startport='4'/>
        <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x2'/>
      </controller>
      <controller type='ide' index='0'>
        <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
      </controller>
      <controller type='virtio-serial' index='0'>
        <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
      </controller>
      <controller type='pci' index='0' model='pci-root'/>
      <interface type='bridge'>
        <mac address='52:54:00:93:bf:07'/>
        <source bridge='br0'/>
        <model type='virtio'/>
        <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
      </interface>
      <serial type='pty'>
        <target type='isa-serial' port='0'>
          <model name='isa-serial'/>
        </target>
      </serial>
      <console type='pty'>
        <target type='serial' port='0'/>
      </console>
      <channel type='unix'>
        <target type='virtio' name='org.qemu.guest_agent.0'/>
        <address type='virtio-serial' controller='0' bus='0' port='1'/>
      </channel>
      <input type='mouse' bus='ps2'/>
      <input type='keyboard' bus='ps2'/>
      <memballoon model='virtio'>
        <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
      </memballoon>
      <rng model='virtio'>
        <backend model='random'>/dev/urandom</backend>
        <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
      </rng>
    </devices>
  </domain>
</domainsnapshot>
kvm  虚拟化

查看所有快照配置文件

[root@kvm ~]# ls /var/lib/libvirt/qemu/snapshot/test/
1588485687.xml

恢复指定快照

[root@kvm ~]# virsh snapshot-revert test 1588485687

删除指定快照

[root@kvm ~]# virsh snapshot-delete test 1588485687
Domain snapshot 1588485687 deleted

4. 磁盘格式

查看虚拟磁盘格式

kvm  虚拟化
[root@kvm ~]# qemu-img info /kvm_data/test.img
image: /kvm_data/test.img
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 1.1G
cluster_size: 65536
Format specific information:
    compat: 1.1
lazy refcounts: true
kvm  虚拟化

创建 2 GB  RAW 格式磁盘

[root@kvm ~]# qemu-img create -f raw /kvm_data/test_1.img 2G
Formatting '/kvm_data/test_1.img', fmt=raw size=2147483648 

RAW格式的磁盘转换为 qcow2 格式

[root@kvm ~]# qemu-img convert -O qcow2 /kvm_data/test_1.img 
/kvm_data/test_1.qcow2

查看 test1.img 大小

kvm  虚拟化
[root@kvm ~]# ls -lh /kvm_data/test_1.img 
-rw-r--r-- 1 root root 2.0G May  3 15:11 /kvm_data/test_1.img
[root@kvm ~]# ls -lh /kvm_data/test_1.qcow2 
-rw-r--r-- 1 root root 193K May  3 15:38 /kvm_data/test_1.qcow2
//可以看到qcow2文件比较小,raw文件大小和我们指定空间大小一样是2G
//raw格式的磁盘性能比qcow2要好,但是raw格式的磁盘无法做快照
kvm  虚拟化

将 test02 转成 raw 格式

[root@kvm ~]# qemu-img convert -O raw 
/kvm_data/test02.img  /kvm_data/test02_2.raw

更改磁盘格式和文件路径,然后启动 test02 虚拟机

kvm  虚拟化
[root@kvm ~]# virsh edit test02
…………
<disk type='file' device='disk'>
      <driver name='qemu' type='qcow'/>
      <source file='/kvm_data/test02.img'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</disk>
//找到上面这部分将qcow修改为raw,/kvm_data/test02.img改为/kvm_data/test02_2.raw
<disk type='file' device='disk'>
      <driver name='qemu' type='raw'/>
      <source file='/kvm_data/test02_2.raw'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</disk>
………………
kvm  虚拟化

查看磁盘所属用户和组:

kvm  虚拟化
[root@kvm ~]# ls -l /kvm_data/
total 3310628
drwx------ 2 root root       16384 Apr 29 00:20 lost+found
-rw-r--r-- 1 root root 10737418240 May  3 16:14 test02_2.raw
-rw------- 1 root root  1133772800 May  3 16:02 test02.img
-rw-r--r-- 1 root root  2147483648 May  3 15:11 test_1.img
-rw-r--r-- 1 root root      197120 May  3 16:05 test_1.qcow2
-rw------- 1 root root 10739384832 May  3 14:14 test.img
kvm  虚拟化

启动虚拟机test02,然后再次查看磁盘所属用户和组

kvm  虚拟化
[root@kvm ~]# virsh start test02
Domain test02 started
[root@kvm ~]# ls -l /kvm_data/
total 3310628
drwx------ 2 root root       16384 Apr 29 00:20 lost+found
-rw-r--r-- 1 qemu qemu 10737418240 May  3 16:14 test02_2.raw
-rw------- 1 root root  1133772800 May  3 16:02 test02.img
-rw-r--r-- 1 root root  2147483648 May  3 15:11 test_1.img
-rw-r--r-- 1 root root      197120 May  3 16:05 test_1.qcow2
-rw------- 1 root root 10739384832 May  3 14:14 test.img
//启动后所属组变化成qemu的是test02_2.raw,证明这个磁盘正在被使用
kvm  虚拟化

5. 磁盘扩容

首先扩容RAW格式

[root@kvm ~]# qemu-img resize /kvm_data/test02_2.raw +2G
Image resized.

查看test02_2.raw信息

kvm  虚拟化
[root@kvm ~]# qemu-img info /kvm_data/test02_2.raw 
image: /kvm_data/test02_2.raw
file format: raw
virtual size: 12G (12884901888 bytes)
disk size: 1.0G
kvm  虚拟化

进入虚拟机test02,使用 fdisk -l 查看磁盘

kvm  虚拟化
[root@kvm ~]# virsh console test02
[root@localhost ~]# fdisk -l
Disk /dev/vda: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0005b865
Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048     1026047      512000   83  Linux
/dev/vda2         1026048    20971519     9972736   8e  Linux LVM

Disk /dev/mapper/centos-root: 9093 MB, 9093251072 bytes, 17760256 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/mapper/centos-swap: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
//可以看到磁盘还是10 GB
kvm  虚拟化

退出终端,关闭test02虚拟机,重新启动,然后再次进入虚拟机test02,使用 fdisk -l 查看磁盘

kvm  虚拟化
[root@kvm ~]# virsh destroy test02
Domain test02 destroyed

[root@kvm ~]# virsh start test02
Domain test02 started

[root@kvm ~]# virsh console test02
[root@localhost ~]# fdisk -l
Disk /dev/vda: 12.9 GB, 12884901888 bytes, 25165824 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0005b865
Device Boot       Start       End          Blocks   Id  System
/dev/vda1   *     2048       1026047      512000   83  Linux
/dev/vda2         1026048    20971519     9972736  8e  Linux LVM

Disk /dev/mapper/centos-root: 9093 MB, 9093251072 bytes, 17760256 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/centos-swap: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
kvm  虚拟化

可以看到已经变成12 GB了。

接下来,我们怎么使用新增加的这2 GB磁盘,那就是分区

kvm  虚拟化
[root@localhost ~]# fdisk /dev/vda
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): n
//新建分区
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p): p
Partition number (3,4, default 3):
//按Enter键 
First sector (20971520-25165823, default 20971520): 
//按Enter键 
Using default value 20971520
Last sector, +sectors or +size{K,M,G} (20971520-25165823, default 25165823):
//按Enter键
Using default value 25165823
Partition 3 of type Linux and of size 2 GiB is set
Command (m for help): p
//查看分区列表
Disk /dev/vda: 12.9 GB, 12884901888 bytes, 25165824 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0005b865

Device Boot      Start       End          Blocks   Id  System
/dev/vda1   *    2048       1026047      512000   83  Linux
/dev/vda2        1026048    20971519     9972736  8e  Linux LVM
/dev/vda3        20971520   25165823     2097152  83  Linux

Command (m for help): w
//保存退出并退出终端
kvm  虚拟化

除了对已有磁盘扩容外,还可以额外增加磁盘

[root@kvm ~]# qemu-img create -f raw /kvm_data/test02_3.raw 5G
Formatting '/kvm_data/test02_3.raw', fmt=raw size=5368709120 

使用virsh edit编辑test02虚拟机,将新磁盘增加到test02虚拟机

kvm  虚拟化
[root@kvm ~]# virsh edit test02
………………
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw'/>
      <source file='/kvm_data/test02_2.raw'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' 
function='0x0'/>
</disk>
//找到这一部分内容,在下面增加以下内容
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw'/>
      <source file='/kvm_data/test02_3.raw'/>
      <target dev='vdb' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' 
function='0x0'/>
</disk>
………………
kvm  虚拟化

关闭test02虚拟机,重新启动,然后进入该虚拟机,使用 fdisk -l 查看磁盘

kvm  虚拟化
[root@kvm ~]# virsh destroy test02
Domain test02 destroyed

[root@kvm ~]# virsh start test02
Domain test02 started
[root@kvm ~]# virsh console test02
[root@localhost ~]# fdisk -l

Disk /dev/vda: 12.9 GB, 12884901888 bytes, 25165824 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0005b865

   Device Boot      Start      End         Blocks   Id  System
/dev/vda1   *        2048     1026047     512000   83  Linux
/dev/vda2         1026048    20971519     9972736   8e  Linux LVM
/dev/vda3        20971520    25165823     2097152   83  Linux

Disk /dev/vdb: 5368 MB, 5368709120 bytes, 10485760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/centos-root: 9093 MB, 9093251072 bytes, 17760256 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/centos-swap: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
kvm  虚拟化

可以看到多了一块 5 GB 的磁盘,退出终端。

接下来,我们扩容 qcow2 格式的磁盘

[root@kvm ~]# qemu-img resize /kvm_data/test.img +2G
Image resized.
//若提示qemu-img: Can't resize an image which has snapshots,需要删除快照

查看 test.img 信息

kvm  虚拟化
[root@kvm ~]# qemu-img info /kvm_data/test.img 
image: /kvm_data/test.img
file format: qcow2
virtual size: 12G (12884901888 bytes)
disk size: 1.1G
cluster_size: 65536
Format specific information:
    compat: 1.1
lazy refcounts: true
kvm  虚拟化

关闭test虚拟机重新启动,然后再次进入虚拟机test02,使用 fdisk -l 查看磁盘

kvm  虚拟化
[root@kvm ~]# virsh destroy test
Domain test destroyed

[root@kvm ~]# virsh start test
Domain test started

[root@kvm ~]# virsh console test
[root@localhost ~]# fdisk -l
Disk /dev/vda: 12.9 GB, 12884901888 bytes, 25165824 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0005b865

Device Boot      Start      End          Blocks   Id  System
/dev/vda1   *     2048     1026047      512000   83  Linux
/dev/vda2         1026048  20971519     9972736  8e  Linux LVM

Disk /dev/mapper/centos-root: 9093 MB, 9093251072 bytes, 17760256 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/centos-swap: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
kvm  虚拟化

分区新增加的2 GB磁盘

kvm  虚拟化
[root@localhost ~]# fdisk /dev/vda
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): n
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p): p
Partition number (3,4, default 3): 
First sector (20971520-25165823, default 20971520): 
Using default value 20971520
Last sector, +sectors or +size{K,M,G} (20971520-25165823, default 25165823): 
Using default value 25165823
Partition 3 of type Linux and of size 2 GiB is set

Command (m for help): w
/保存并退出终端
kvm  虚拟化

新增一块qcow2格式的磁盘

[root@kvm ~]# qemu-img create -f qcow2 /kvm_data/test_2.img 5G
Formatting '/kvm_data/test_2.img', fmt=qcow2 size=5368709120 encryption=off cluster_size=65536 lazy_refcounts=off

使用 virsh edit 编辑test虚拟机,将新磁盘增加到test虚拟机

kvm  虚拟化
[root@kvm ~]# virsh edit test
………………
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/kvm_data/test.img'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</disk>
//找到这一部分内容,在下面增加以下内容
       <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/kvm_data/test_2.img'/>
      <target dev='vdb' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
</disk>
………………
kvm  虚拟化

关闭test虚拟机,重新启动,然后进入该虚拟机,使用 fdisk -l 查看磁盘

kvm  虚拟化
[root@kvm ~]# virsh destroy test
Domain test destroyed

[root@kvm ~]# virsh start test
Domain test started

[root@kvm ~]# virsh console test
[root@localhost ~]# fdisk -l

Disk /dev/vda: 12.9 GB, 12884901888 bytes, 25165824 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0005b865

Device Boot      Start       End          Blocks   Id  System
/dev/vda1   *    2048       1026047      512000    83  Linux
/dev/vda2        1026048    20971519     9972736   8e  Linux LVM
/dev/vda3        20971520   25165823     2097152   83  Linux

Disk /dev/vdb: 5368 MB, 5368709120 bytes, 10485760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/mapper/centos-root: 9093 MB, 9093251072 bytes, 17760256 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/mapper/centos-swap: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
退出终端
kvm  虚拟化

6. 调整CPU内存、网卡

查看虚拟机配置信息:

kvm  虚拟化
[root@kvm ~]# virsh dominfo test
Id:             8
Name:           test
UUID:           49d7cb9c-20dc-42dd-a260-01532b5132e5
OS Type:        hvm
State:          running
CPU(s):         1
CPU time:       20.8s
Max memory:     1048576 KiB
Used memory:    524288 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: none
Security DOI:   0
kvm  虚拟化

编辑虚拟机内存:

kvm  虚拟化
[root@kvm ~]# virsh edit test
…………
<memory unit='KiB'>1048576</memory>
//最大内存
  <currentMemory unit='KiB'>524288</currentMemory>
//可用内存
  <vcpu placement='static' current='1'>2</vcpu>
//最大cpu
………………
//将以上内容修改为如下内容
…………
<memory unit='KiB'>1048576</memory>  
  <currentMemory unit='KiB'>624288</currentMemory>
  <vcpu placement='static' current='1'>2</vcpu>
…………
kvm  虚拟化

关闭虚拟机,重启动虚拟机:

[root@kvm ~]# virsh destroy test
Domain test destroyed
[root@kvm ~]# virsh start test
Domain test started

查看虚拟机配置信息,看是否修改成功:

kvm  虚拟化
[root@kvm ~]# virsh dominfo test
Id:             10
Name:           test
UUID:           49d7cb9c-20dc-42dd-a260-01532b5132e5
OS Type:        hvm
State:          running
CPU(s):         1
CPU time:       21.4s
Max memory:     1048576 KiB
Used memory:    624288 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: none
Security DOI:   0
kvm  虚拟化

除了这种修改方式之外,还有一种动态修改:

[root@kvm ~]# virsh setmem test 800m
//动态修改内存
[root@kvm ~]# virsh setvcpus test 2
//动态修改cpu,只可以增加不可以减少

查看配置信息,看是否修改成功:

kvm  虚拟化
[root@kvm ~]# virsh dominfo test
Id:             10
Name:           test
UUID:           49d7cb9c-20dc-42dd-a260-01532b5132e5
OS Type:        hvm
State:          running
CPU(s):         2
CPU time:       22.8s
Max memory:     1048576 KiB
Used memory:    819200 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: none
Security DOI:   0

[root@kvm ~]# virsh dumpxml test > /etc/libvirt/qemu/test.xml
//需要把配置写入到配置文件里
kvm  虚拟化

查看网卡列表:

[root@kvm ~]# virsh domiflist test
Interface  Type       Source     Model       MAC
-------------------------------------------------------
vnet1      bridge     br0        virtio      52:54:00:93:bf:07

增加一块新的网卡,并设置为NAT网络模式(virbr0类似VMware的VMnet8),这里如果写 source br0,则网络模式为桥接

kvm  虚拟化
[root@kvm ~]# virsh attach-interface test --type bridge  --source virbr0
Interface attached successfully
[root@kvm ~]# virsh domiflist test
Interface  Type       Source     Model       MAC
-------------------------------------------------------
vnet1      bridge     br0        virtio      52:54:00:93:bf:07
vnet2      bridge     virbr0     rtl8139     52:54:00:29:ed:8b
[root@kvm ~]# virsh dumpxml test > /etc/libvirt/qemu/test.xml
kvm  虚拟化

进入test虚拟机,查看网卡信息

kvm  虚拟化
[root@kvm ~]# virsh console test
[root@localhost ~]# ifconfig
ens10: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.122.8  netmask 255.255.255.0  broadcast 192.168.122.255
        inet6 fe80::5054:ff:fe29:ed8b  prefixlen 64  scopeid 0x20<link>
        ether 52:54:00:29:ed:8b  txqueuelen 1000  (Ethernet)
        RX packets 5186  bytes 7413267 (7.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1480  bytes 84889 (82.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens11: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.16.129  netmask 255.255.255.0  broadcast 192.168.16.255
        inet6 fe80::5054:ff:fe15:abbd  prefixlen 64  scopeid 0x20<link>
        ether 52:54:00:15:ab:bd  txqueuelen 1000  (Ethernet)
        RX packets 13  bytes 1328 (1.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 16  bytes 1668 (1.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 52:54:00:93:bf:07  txqueuelen 1000  (Ethernet)
        RX packets 55  bytes 8520 (8.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
kvm  虚拟化

7. 迁移虚拟机

首先关闭虚拟机

[root@kvm ~]# virsh shutdown test
Domain test is being shutdown

查看虚拟机磁盘所在目录

kvm  虚拟化
[root@kvm ~]# virsh domblklist test
Target     Source
------------------------------------------------
vda        /kvm_data/test.img
vdb        /kvm_data/test_2.img
hda        -
[root@kvm ~]# virsh dumpxml test > /etc/libvirt/qemu/test03.xml 
//如果是远程机器,需要把该配置文件拷贝到远程机器上
[root@kvm ~]# rsync -av /kvm_data/test.img  /kvm_data/test03.img
//-bash: rsync: command not found则yum install -y rsync
//如果是迁移到远程,则需要把该磁盘文件拷贝到远程机器上
sending incremental file list
test.img
sent 10,742,006,844 bytes  received 35 bytes  60,179,310.25 bytes/sec
total size is 10,739,384,832  speedup is 1.00
kvm  虚拟化

因为是迁移到本机,配置文件用的是test子机的配置,不改会有冲突,所以需要修改该文件。如果是远程机器不用修改

kvm  虚拟化
[root@kvm ~]# vi /etc/libvirt/qemu/test03.xml 
 <name>test03</name>
//修改domname: 
//修改uuid(随便改一下数字,位数不要变)
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/kvm_data/test03.img'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </disk>
//修改磁盘路径
kvm  虚拟化

定义新虚拟机

[root@kvm ~]# virsh define /etc/libvirt/qemu/test03.xml  
Domain test03 defined from /etc/libvirt/qemu/test03.xml

查看虚拟机列表,会发现新迁移的虚拟机test03

kvm  虚拟化
[root@kvm ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 6     test02                         running
 -     test                           shut off
 -     test03                         shut off
kvm  虚拟化

 

     
上一篇:No module named torch_sparse, 及pytorch-geometric安装


下一篇:Ajax上传文件到C#Action中使用 jquery.form.js