1. 程式人生 > 其它 >KVM虛擬化使用

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

vrish常用命令

#關閉虛擬機器
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.

檢視test02_2.raw資訊

[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

進入虛擬機器test02,使用fdisk -l檢視磁碟

[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

接下來,我們擴容qcow2格式的磁碟

#若提示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
...........

分割槽新增加的2 GB磁碟

[root@localhost ~]# fdisk /dev/vda
然後輸入n、p、回車、回車、+2G、w

新增一塊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虛擬機器(想要檢視是否正確按照上面的步驟關閉然後再進然後檢視即可

[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>
………………

調整CPU記憶體、網絡卡

檢視虛擬機器配置資訊

[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