KVM虚拟化使用
查看虚拟机列表
#查看虚拟机列表,只能看到正在运行的虚拟机
[root@kvm ~]# virsh list
Id Name State
----------------------------------------------------
2 test running
#查看虚拟机列表,包括未运行的虚拟机
[root@kvm ~]# virsh list --all
Id Name State
----------------------------------------------------
2 test running
[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:
若发生以下报错信息
#报错信息
[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
#关闭虚拟机
virsh shutdown test
#开启虚拟机
virsh start test
#类似stop,强制停止
virsh destroy test
#彻底销毁虚拟机,会删除虚拟机配置文件,virsh list --all就看不到
virsh undefine test
#宿主机开机该虚拟机也开机
virsh autostart test
#解除开机启动
virsh autostart --disable test
#挂起
virsh suspend test
#恢复
virsh resume test
克隆虚拟机之前,要先关闭虚拟机,不然会提示这种错误
#关闭虚拟机
[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.
命令解释: --original:指定克隆源虚拟机。 --name:指定克隆后的虚拟机名字。 --file:指定目标虚拟机的虚拟磁盘文件
查看虚拟机配置文件/etc/libvirt/qemu/,看是否增加test02.xml文件
[root@kvm ~]# ls /etc/libvirt/qemu/
networks test02.xml test.xml
启动刚刚克隆的虚拟机test02,首先查看虚拟机列表,然后启动克隆的虚拟机test02
#查看虚拟机列表
[root@kvm ~]# virsh list --all
Id Name State
----------------------------------------------------
- test shut off
- test02 shut off
#进入test02
[root@kvm ~]# virsh start test02
Domain test02 started
[root@kvm ~]# virsh snapshot-create test
Domain snapshot 1588485687 created
查看test.img信息,同时会查看到快照列表
[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
[root@kvm ~]# virsh snapshot-list test
Name Creation Time State
------------------------------------------------------------
1588485687 2020-05-03 14:01:27 +0800 shutoff
[root@kvm ~]# virsh snapshot-current test
......
[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
查看虚拟磁盘格式
[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
创建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
查看test1.img大小
##可以看到qcow2文件比较小,raw文件大小和我们指定空间大小一样是2G
##raw格式的磁盘性能比qcow2要好,但是raw格式的磁盘无法做快照
[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
将test02转成raw格式
[root@kvm ~]# qemu-img convert -O raw
/kvm_data/test02.img /kvm_data/test02_2.raw
更改磁盘格式和文件路径,然后启动test02虚拟机
[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>
............
查看磁盘所属用户和组
[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
启动虚拟机test02,然后再次查看磁盘所属用户和组
[root@kvm ~]# virsh start test02
Domain test02 started
#启动后所属组变化成qemu的是test02_2.raw,证明这个磁盘正在被使用
[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
在这里磁盘一共有两种格式,一种是RAW格式,一种是qcow2格式
首先扩容RAW格式
[root@kvm ~]# qemu-img resize /kvm_data/test02_2.raw +2G
Image resized.
[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
[root@kvm ~]# virsh console test02
#可以看到磁盘还是10G
[root@localhost ~]# fdisk -l
Disk /dev/vda: 10.7 GB, 10737418240 bytes, 20971520 sectors
......
退出终端,关闭test02虚拟机,重新启动,然后再次进入虚拟机test02,使用fdisk -l查看磁盘
[root@kvm ~]# virsh destroy test02
Domain test02 destroyed
[root@kvm ~]# virsh start test02
Domain test02 started
#可以看到现在已经12G了
[root@kvm ~]# virsh console test02
[root@localhost ~]# fdisk -l
Disk /dev/vda: 12.9 GB, 12884901888 bytes, 25165824 sectors
除了对已有磁盘扩容外,还可以额外增加磁盘
[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虚拟机
[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>
………………
关闭test02虚拟机,重新启动,然后进入该虚拟机,使用fdisk -l查看磁盘
[root@kvm ~]# virsh destroy test02
Domain test02 destroyed
[root@kvm ~]# virsh start test02
Domain test02 started
[root@kvm ~]# virsh console test02
#可以看到多了一块5 GB的磁盘
[root@localhost ~]# fdisk -l
......
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
#若提示qemu-img: Can't resize an image which has snapshots,需要删除快照
[root@kvm ~]# qemu-img resize /kvm_data/test.img +2G
Image resized.
查看test.img信息
[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
关闭test虚拟机,重新启动,然后再次进入虚拟机test02,使用fdisk -l查看磁盘
[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
...........
[root@localhost ~]# fdisk /dev/vda
然后输入n、p、回车、回车、+2G、w
[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虚拟机(想要查看是否正确按照上面的步骤关闭然后再进然后查看即可
[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>
………………
[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
[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>
…………
关闭虚拟机,重启动虚拟机
[root@kvm ~]# virsh destroy test
Domain test destroyed
[root@kvm ~]# virsh start test
Domain test started
#查看是否修改成功
[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
还可以动态修改内存
#动态修改内存
[root@kvm ~]# virsh setmem test 800m
#动态修改cpu,只可以增加不可以减少
[root@kvm ~]# virsh setvcpus test 2
[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,则网络模式为桥接
[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
进入test虚拟机,查看网卡信息
[root@kvm ~]# virsh console test
[root@localhost ~]# ip add
首先关闭虚拟机
[root@kvm ~]# virsh shutdown test
Domain test is being shutdown
[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
因为是迁移到本机,配置文件用的是test子机的配置,不改会有冲突,所以需要修改该文件。如果是远程机器不用修改
[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>
//修改磁盘路径
查看虚拟机列表,会发现新迁移的虚拟机test03
[root@kvm ~]# virsh list --all
Id Name State
----------------------------------------------------
6 test02 running
- test shut off
- test03 shut off