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管理虛擬機