1. 程式人生 > >KVM管理虛擬機

KVM管理虛擬機

KVM 虛擬化 CentOS7 虛擬機

筆記內容:KVM管理虛擬機
筆記日期:2018-03-08

  • 28.9 克隆虛擬機
  • 28.10 快照管理
  • 28.11 磁盤格式
  • 28.12 磁盤擴容(raw)
  • 28.13 磁盤擴容(qcow2)
  • 28.14 調整cpu內存和網卡
  • 28.15 遷移虛擬機

在上一篇中,我們介紹了如何在 CentOS7上安裝並配置KVM,以及通過KVM安裝CentOS系統。本篇則是介紹在KVM裏安裝完虛擬機後,如何使用KVM來管理虛擬機。

克隆虛擬機

克隆虛擬機是虛擬機軟件必須得有的功能,這樣能省去我們安裝系統及環境的時間,如果使用過VMware、VirtualBox等虛擬機軟件的話,都知道有這個功能,KVM也不例外,只不過我們沒有用圖形化界面,是命令行形式的而已。

要克隆某個虛擬機,首先這個虛擬機需要為關閉狀態:

[root@localhost ~]# virsh list
 Id    Name                           State
----------------------------------------------------
 1     study01                        running

You have new mail in /var/spool/mail/root
[root@localhost ~]# virsh shutdown study01
Domain study01 is being shutdown
[root@localhost ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     study01                        shut off

[root@localhost ~]# 

然後執行以下命令進行克隆:

[root@localhost ~]# virt-clone  --original study01 --name study02 --file /kvm_data/study02.img
Allocating ‘study02.img‘                                                                          |  10 GB  00:00:42     

Clone ‘study02‘ created successfully.  # 克隆成功
[root@localhost ~]# ls /kvm_data/
lost+found  study01.img  study02.img
[root@localhost ~]# ls /etc/libvirt/qemu/
networks  study01.xml  study02.xml
[root@localhost ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     study01                        shut off
 -     study02                        shut off

[root@localhost ~]# virsh start study02
Domain study02 started

[root@localhost ~]#

命令說明:

  • --original指定克隆源虛擬機,也就是克隆哪一個虛擬機
  • --name指定克隆後的虛擬機的名稱
  • --file指定克隆後的虛擬機的虛擬磁盤文件所存放的目錄及名稱

快照管理

同樣的創建快照也是虛擬機軟件的一個很重要的功能,快照能夠很方便的幫我們把虛擬機恢復到一個正常的狀態下。我們來看看命令行下如何使用KVM創建虛擬機的快照:

[root@localhost ~]# virsh snapshot-create study01  # 創建study01的快照
Domain snapshot 1520519047 created 
[root@localhost ~]#

註:raw格式的虛擬磁盤不支持做快照,qcow2則支持

查看study01.img的信息,同時會查看到快照列表:

[root@localhost ~]# qemu-img info /kvm_data/study01.img 
image: /kvm_data/study01.img
file format: qcow2  # qcow2是一種虛擬磁盤的格式
virtual size: 10G (10737418240 bytes)  # 虛擬磁盤的總大小
disk size: 1.1G  # 虛擬磁盤目前所占用的物理磁盤大小
cluster_size: 65536
Snapshot list:  # 快照列表
ID        TAG                 VM SIZE                DATE       VM CLOCK
1         1520519047                0 2018-03-08 22:24:07   00:00:00.000
Format specific information:
    compat: 1.1
    lazy refcounts: true
[root@localhost ~]# 

使用以下命令可以列出某個虛擬機下的所有快照:

[root@localhost ~]# virsh snapshot-list study01
 Name                 Creation Time             State
------------------------------------------------------------
 1520519047           2018-03-08 22:24:07 +0800 shutoff

[root@localhost ~]# 

查看某個虛擬機當前快照版本的詳細信息,也就是最近的一個快照版本的信息:

[root@localhost ~]# virsh snapshot-current study01
<domainsnapshot>
  <name>1520519047</name>
  <state>shutoff</state>
  <creationTime>1520519047</creationTime>
  <memory snapshot=‘no‘/>
  <disks>
    <disk name=‘vda‘ snapshot=‘internal‘/>
    <disk name=‘hda‘ snapshot=‘no‘/>
  </disks>
  <domain type=‘kvm‘>
    <name>study01</name>
    <uuid>eeedcd47-1546-4e5f-ab2a-f62deb0838cf</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‘>Haswell-noTSX</model>
    </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/study01.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:65:d3:3f‘/>
        <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‘/>
      </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=‘tablet‘ bus=‘usb‘>
        <address type=‘usb‘ bus=‘0‘ port=‘1‘/>
      </input>
      <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>
    </devices>
  </domain>
</domainsnapshot>

[root@localhost ~]# 

查看所有快照的配置文件:

[root@localhost ~]# virsh snapshot-create study01
Domain snapshot 1520520513 created
[root@localhost ~]# ls /var/lib/libvirt/qemu/snapshot/study01/ # 快照的配置文件都存放在這個目錄下
1520519047.xml  1520520513.xml
[root@localhost ~]# 

通過快照的TAG,將虛擬機恢復到指定快照:

[root@localhost ~]# virsh snapshot-revert study01 1520519047

刪除某個虛擬機下的某個快照:

[root@localhost ~]# virsh snapshot-delete study01 1520519047
Domain snapshot 1520519047 deleted

[root@localhost ~]# 

磁盤格式

虛擬磁盤常用格式有raw和qcow2,以上我們也提到了raw格式的虛擬磁盤不支持創建快照,qcow2格式的虛擬磁盤才支持創建快照。

查看虛擬磁盤格式的命令:

[root@localhost ~]# qemu-img info /kvm_data/study01.img 
image: /kvm_data/study01.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
2         1520520513                0 2018-03-08 22:48:33   00:00:00.000
Format specific information:
    compat: 1.1
    lazy refcounts: true
[root@localhost ~]# 

創建一個2G大小的raw格式的虛擬磁盤,-f選項用於指定虛擬磁盤的格式:

[root@localhost ~]# qemu-img create -f raw /kvm_data/study01_2.img 2G
Formatting ‘/kvm_data/study01_2.img‘, fmt=raw size=2147483648 
[root@localhost ~]# qemu-img info /kvm_data/study01_2.img 
image: /kvm_data/study01_2.img
file format: raw
virtual size: 2.0G (2147483648 bytes)
disk size: 0
[root@localhost ~]# 

我們可以把raw格式的磁盤轉換為qcow2格式,-O選項指定轉換的目標格式:

[root@localhost ~]# qemu-img convert -O qcow2 /kvm_data/study01_2.img /kvm_data/study01_2.qcow2
[root@localhost ~]# ls /kvm_data/study01_2*
/kvm_data/study01_2.img  /kvm_data/study01_2.qcow2
[root@localhost ~]# qemu-img info /kvm_data/study01_2.qcow2 
image: /kvm_data/study01_2.qcow2
file format: qcow2
virtual size: 2.0G (2147483648 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
[root@localhost ~]# 

如上,與其說是轉換,不如說是從raw格式的磁盤復制了一份格式為qcow2磁盤出來,因為原本的磁盤並不會發生任何的變化,而是從這個raw格式磁盤的基礎上復制出來了一個新的qcow2格式的磁盤。

轉換後用ls -lh查看磁盤文件的大小,可以看到qcow2格式的磁盤文件比較小,raw格式的磁盤文件大小和我們指定空間大小一樣是2G:

[root@localhost ~]# cd /kvm_data/
[root@localhost /kvm_data]# ls -lh
total 2.3G
drwx------ 2 root root  16K Mar  7 20:56 lost+found
-rw-r--r-- 1 root root 2.0G Mar  8 23:02 study01_2.img
-rw-r--r-- 1 root root 193K Mar  8 23:05 study01_2.qcow2
-rw------- 1 root root  11G Mar  8 22:51 study01.img
-rw------- 1 qemu qemu 1.2G Mar  8 23:11 study02.img
[root@localhost /kvm_data]# 

註:raw格式的磁盤性能比qcow2要好,但是raw格式的磁盤無法制作快照。

使用du -sh命令查看則不一樣了,raw格式的磁盤文件大小是0,而qcow2格式的磁盤文件大小則是和我們使用ls -lh查看的一樣:

[root@localhost /kvm_data]# du -sh *
16K lost+found
0   study01_2.img
196K    study01_2.qcow2
1.2G    study01.img
1.2G    study02.img
[root@localhost /kvm_data]# 

這就是raw格式的虛擬磁盤文件和qcow2格式的虛擬磁盤文件在物理磁盤存儲上的區別。

下面我們來將study02虛擬機的虛擬磁盤轉換成raw格式的虛擬磁盤,並進行啟動:

[root@localhost /kvm_data]# virsh list
 Id    Name                           State
----------------------------------------------------
 2     study02                        running

[root@localhost /kvm_data]# virsh shutdown study02
Domain study02 is being shutdown

[root@localhost /kvm_data]# qemu-img convert -O raw /kvm_data/study02.img /kvm_data/study02_3.raw
[root@localhost /kvm_data]# ls -l
total 3531020
drwx------ 2 root root       16384 Mar  7 20:56 lost+found
-rw-r--r-- 1 root root  2147483648 Mar  8 23:02 study01_2.img
-rw-r--r-- 1 root root      197120 Mar  8 23:05 study01_2.qcow2
-rw------- 1 root root 10739515904 Mar  8 22:51 study01.img
-rw-r--r-- 1 root root 10737418240 Mar  8 23:45 study02_3.raw  # 此時的屬組屬主為root
-rw------- 1 root root  1209008128 Mar  8 23:38 study02.img
[root@localhost /kvm_data]# virsh edit study02  # 更改格式和文件路徑,修改如下內容即可
<driver name=‘qemu‘ type=‘raw‘/>
<source file=‘/kvm_data/study02_3.raw‘/>
[root@localhost /kvm_data]# virsh start study02
Domain study02 started

[root@localhost /kvm_data]# ls -l  # 可以發現啟動狀態的虛擬機的磁盤文件的屬組屬主會發生改變
total 3531020
drwx------ 2 root root       16384 Mar  7 20:56 lost+found
-rw-r--r-- 1 root root  2147483648 Mar  8 23:02 study01_2.img
-rw-r--r-- 1 root root      197120 Mar  8 23:05 study01_2.qcow2
-rw------- 1 root root 10739515904 Mar  8 22:51 study01.img
-rw-r--r-- 1 qemu qemu 10737418240 Mar  8 23:45 study02_3.raw   # 此時的屬組屬主為qemu
-rw------- 1 root root  1209008128 Mar  8 23:38 study02.img
[root@localhost /kvm_data]# 

此時如果要給study02制作快照就會報如下錯誤:

[root@localhost /kvm_data]# virsh snapshot-create study02
error: unsupported configuration: internal snapshot for disk vda unsupported for storage type raw

[root@localhost /kvm_data]# 

磁盤擴容(raw)

以上介紹了虛擬磁盤格式的,以及如何轉換虛擬磁盤格式,下面我們來看看如何進行磁盤擴容:

[root@localhost ~]# ls -lh /kvm_data/study02_3.raw 
-rw-r--r-- 1 qemu qemu 10G Mar  9 01:00 /kvm_data/study02_3.raw
[root@localhost ~]# qemu-img resize /kvm_data/study02_3.raw +2G
Image resized.
[root@localhost ~]# ls -lh /kvm_data/study02_3.raw 
-rw-r--r-- 1 qemu qemu 12G Mar  9 01:00 /kvm_data/study02_3.raw
[root@localhost ~]# 

如上可以看到,原本的10G變成12G了,但是此時進入虛擬機中會發現磁盤依舊是10G:

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

磁盤 /dev/vda:10.7 GB, 10737418240 字節,20971520 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標簽類型:dos
磁盤標識符:0x00003436

   設備 Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048     1026047      512000   83  Linux
/dev/vda2         1026048     3123199     1048576   82  Linux swap / Solaris
/dev/vda3         3123200    20971519     8924160   83  Linux
[root@localhost ~]# 

這是因為還沒有生效,需要重啟虛擬機才能生效,但是註意這個重啟要在宿主機上使用virsh命令進行重啟,如下:

[root@localhost ~]# virsh destroy study02
Domain study02 destroyed

[root@localhost ~]# virsh start study02
Domain study02 started

[root@localhost ~]# 

重啟完成之後再查看就生效了:

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

磁盤 /dev/vda:12.9 GB, 12884901888 字節,25165824 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標簽類型:dos
磁盤標識符:0x00003436

   設備 Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048     1026047      512000   83  Linux
/dev/vda2         1026048     3123199     1048576   82  Linux swap / Solaris
/dev/vda3         3123200    20971519     8924160   83  Linux
[root@localhost ~]# 

然後還需要把這2G的空間分區才可以使用,因為我們安裝這個系統的時候選擇的是標準分區,所以無法像LVM分區那樣直接擴容邏輯卷:

[root@localhost ~]# fdisk /dev/vda
歡迎使用 fdisk (util-linux 2.23.2)。

更改將停留在內存中,直到您決定將更改寫入磁盤。
使用寫入命令前請三思。

命令(輸入 m 獲取幫助):n  # 新建分區
Partition type:
   p   primary (3 primary, 0 extended, 1 free)
   e   extended
Select (default e): p  # 選擇新建主分區
已選擇分區 4
起始 扇區 (20971520-25165823,默認為 20971520):  # 默認即可,直接按回車
將使用默認值 20971520
Last 扇區, +扇區 or +size{K,M,G} (20971520-25165823,默認為 25165823): # 默認即可,直接按回車
將使用默認值 25165823
分區 4 已設置為 Linux 類型,大小設為 2 GiB

命令(輸入 m 獲取幫助):p  # 再次查看磁盤信息

磁盤 /dev/vda:12.9 GB, 12884901888 字節,25165824 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標簽類型:dos
磁盤標識符:0x00003436

   設備 Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048     1026047      512000   83  Linux
/dev/vda2         1026048     3123199     1048576   82  Linux swap / Solaris
/dev/vda3         3123200    20971519     8924160   83  Linux
/dev/vda4        20971520    25165823     2097152   83  Linux  # 可以看到多了一個/dev/vda4分區

命令(輸入 m 獲取幫助):w  # 保存退出

除了對已有磁盤擴容外,還可以額外增加磁盤,宿主機下執行以下命令:

[root@localhost ~]# qemu-img create -f raw /kvm_data/study02_2.raw 5G
Formatting ‘/kvm_data/study02_2.raw‘, fmt=raw size=5368709120 
[root@localhost ~]# qemu-img info /kvm_data/study02_2.raw
image: /kvm_data/study02_2.raw
file format: raw
virtual size: 5.0G (5368709120 bytes)
disk size: 0
[root@localhost ~]# virsh edit study02  # 在原本的<disk>標簽下增加以下內容
    <disk type=‘file‘ device=‘disk‘>
      <driver name=‘qemu‘ type=‘raw‘/>
      <source file=‘/kvm_data/study02_2.raw‘/>
      <target dev=‘vdb‘ bus=‘virtio‘/>
      <address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x08‘ function=‘0x0‘/>
    </disk>
[root@localhost ~]# virsh destroy study02
Domain study02 destroyed

[root@localhost ~]# virsh start study02
Domain study02 started

[root@localhost ~]# 

重啟完成後進入虛擬機,查看新增的虛擬磁盤是否生效了:

[root@localhost ~]# fdisk -l

磁盤 /dev/vda:12.9 GB, 12884901888 字節,25165824 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標簽類型:dos
磁盤標識符:0x00003436

   設備 Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048     1026047      512000   83  Linux
/dev/vda2         1026048     3123199     1048576   82  Linux swap / Solaris
/dev/vda3         3123200    20971519     8924160   83  Linux

磁盤 /dev/vdb:5368 MB, 5368709120 字節,10485760 個扇區  # 新增的虛擬磁盤
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節

[root@localhost ~]# 

如上,可以看到新增了一塊5G的虛擬磁盤,這時我們只需要對該磁盤進行分區、格式化、掛載後就可以使用了。


磁盤擴容(qcow2)

qcow2格式的虛擬磁盤的擴容方式和raw格式的是一樣的,只不過需要註意的是,如果虛擬磁盤保存了快照,則無法擴容會報錯,如下:

[root@localhost ~]# qemu-img info /kvm_data/study01.img
image: /kvm_data/study01.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
2         1520520513                0 2018-03-08 22:48:33   00:00:00.000
Format specific information:
    compat: 1.1
    lazy refcounts: true
[root@localhost ~]# qemu-img resize /kvm_data/study01.img +2G  # 會報如下錯誤
qemu-img: Can‘t resize an image which has snapshots
qemu-img: This image does not support resize
[root@localhost ~]# 

需要把快照刪除後才能進行擴容:

[root@localhost ~]# virsh snapshot-delete study01 1520520513
Domain snapshot 1520520513 deleted

[root@localhost ~]# qemu-img resize /kvm_data/study01.img +2G
Image resized.
[root@localhost ~]# 

剩下的操作和上面演示的raw是一樣的,這裏就不再演示了。

如果不希望刪除快照的話,就只能是創建一塊新的虛擬磁盤,操作方式也是和raw一樣的。

建議不管是raw格式的還是qcow2格式的虛擬磁盤需要擴容,最好是使用新增硬盤的方式進行擴容,而不是在原有的磁盤上進行擴容,因為新增磁盤相對獨立與已有的磁盤,誤操作時也不容易對已有的磁盤造成影響。


調整cpu內存和網卡

介紹完了如何擴容磁盤,我們再來看看如何調整cpu、內存以及網卡,首先查看虛擬機的配置:

[root@localhost ~]# virsh dominfo study01
Id:             -
Name:           study01
UUID:           eeedcd47-1546-4e5f-ab2a-f62deb0838cf
OS Type:        hvm
State:          shut off
CPU(s):         1
Max memory:     1048576 KiB
Used memory:    524288 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: none
Security DOI:   0

[root@localhost ~]# 

例如我現在要對該虛擬機的內存以及CPU進行調整,編輯該虛擬機的配置文件即可:

[root@localhost ~]# virsh edit study01  # 更改以下標簽的值即可
<memory unit=‘KiB‘>2048576</memory>  # 內存的最大大小
<currentMemory unit=‘KiB‘>624288</currentMemory>  # 目前使用的內存大小
<vcpu placement=‘static‘ current=‘2‘>4</vcpu>  # CPU的核心數量,current的值為當前使用的核心數量,標簽的值則為最大可使用的核心數量

更改完配置文件之後,如果虛擬機是開機狀態的話需要重啟,關機狀態的話則直接啟動即可生效:

[root@localhost ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 5     study02                        running
 -     study01                        shut off

[root@localhost ~]# virsh start study01
Domain study01 started

[root@localhost ~]# 

此時再查看study01虛擬機的配置,會發現Max memory、Used memory以及CPU(s)參數的值發生了改變:

[root@localhost ~]# virsh dominfo study01
Id:             6
Name:           study01
UUID:           eeedcd47-1546-4e5f-ab2a-f62deb0838cf
OS Type:        hvm
State:          running
CPU(s):         2
CPU time:       26.7s
Max memory:     2049024 KiB
Used memory:    624288 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: none
Security DOI:   0

[root@localhost ~]# 

這樣就完成了內存和CPU的調整,以上我們是通過編輯配置文件來對內存和CPU的資源進行調整,需要重啟虛擬機之後才能生效。不過好在KVM是支持動態調整的,但前提是有設置最大的資源大小,例如以上的例子中,我們將內存的最大大小設置了兩個G左右,那麽我們就可以在這兩個G以內動態的調整內存的大小,CPU也是同理。如下示例:

[root@localhost ~]# virsh setmem study01 800m  # 動態調整內存大小為800M

[root@localhost ~]# virsh setvcpus study01 3  # 動態調整CPU核心數量為3核

[root@localhost ~]# virsh dominfo study01  # 可以看到無需重啟也生效了
Id:             6
Name:           study01
UUID:           eeedcd47-1546-4e5f-ab2a-f62deb0838cf
OS Type:        hvm
State:          running
CPU(s):         3
CPU time:       31.2s
Max memory:     2049024 KiB
Used memory:    819200 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: none
Security DOI:   0

# 想要動態調整的配置永久生效,則需要把當前配置寫入到配置文件裏去
[root@localhost ~]# virsh dumpxml study01 > /etc/libvirt/qemu/study01.xml  

註:內存資源可以動態的調大調小,而CPU資源只能動態地調大不能調小。

以上介紹了如何調整內存以及CPU資源,下面我們來看看如何增加網卡,首先查看一下網卡:

[root@localhost ~]# virsh domiflist study01
Interface  Type       Source     Model       MAC
-------------------------------------------------------
vnet1      bridge     br0        virtio      52:54:00:65:d3:3f

[root@localhost ~]# 

如上,可以看到目前該虛擬機只有一個網卡。

然後我們來增加一塊新的網卡,將該網卡設置為NAT網絡模式(因為virbr0類似vmware的vmnet8):

[root@localhost ~]# virsh attach-interface study01 --type bridge  --source virbr0
Interface attached successfully

[root@localhost ~]# virsh domiflist study01
Interface  Type       Source     Model       MAC
-------------------------------------------------------
vnet1      bridge     br0        virtio      52:54:00:65:d3:3f
vnet2      bridge     virbr0     rtl8139     52:54:00:a4:60:b0

[root@localhost ~]# 

這條命令末尾如果寫的是 --source br0 ,則是設置網絡模式為橋接,和VMware裏的橋接模式一樣。--source是用於指定橋接到哪一塊網卡上。例如我們也可以橋接到br0上:

[root@localhost ~]# virsh attach-interface study01 --type bridge  --source br0
Interface attached successfully

[root@localhost ~]# virsh domiflist study01
Interface  Type       Source     Model       MAC
-------------------------------------------------------
vnet1      bridge     br0        virtio      52:54:00:65:d3:3f
vnet2      bridge     virbr0     rtl8139     52:54:00:a4:60:b0
vnet3      bridge     br0        rtl8139     52:54:00:e0:6c:da

# 同樣的想要動態調整的配置永久生效,則需要把當前配置寫入到配置文件裏去
[root@localhost ~]# virsh dumpxml study01 > /etc/libvirt/qemu/study01.xml  

遷移虛擬機

以上我們介紹完了如何調整資源的大小,下面我們來看看如何遷移虛擬機。遷移虛擬機就是把當前宿主機裏的虛擬機遷移到另一臺宿主機上去。

首先關閉需要遷移的虛擬機:

[root@localhost ~]# virsh list
 Id    Name                           State
----------------------------------------------------
 5     study02                        running
 6     study01                        running

[root@localhost ~]# virsh shutdown study01
Domain study01 is being shutdown

[root@localhost ~]# 

然後通過rsync命令將配置文件拷貝到另一臺機器上:

[root@localhost ~]# rsync -av /etc/libvirt/qemu/study01.xml 192.168.77.128:/etc/libvirt/qemu/study01.xml 

接著將虛擬機的磁盤文件也拷貝到另一臺機器上:

[root@localhost ~]# virsh domblklist study01  # 查看虛擬機的磁盤文件路徑
Target     Source
------------------------------------------------
vda        /kvm_data/study01.img
hda        -

[root@localhost ~]# rsync -av /kvm_data/study01.img  192.168.77.128:/kvm_data/study01.img

最後就是在另一臺機器上根據實際情況修改虛擬機的配置文件,例如虛擬機的名稱要對得上,虛擬磁盤文件路徑要對得上等等,因為我這裏兩臺機器的環境都是一樣的,所以就不需要修改配置文件了,直接定義新虛擬機即可。以下這條命令在另一臺機器上執行:

[[email protected] ~]# virsh define /etc/libvirt/qemu/study01.xml

此時就可以看到新遷移的虛擬機了:

[[email protected] ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     study01                        shut off

[root@localhost ~]# 

KVM管理虛擬機