一、virsh常用命令
一些常用命令參數
[root@kvm-server ~]# virsh --help #查看命令幫忙
[root@kvm-server ~]# virsh list #顯示正在運行的虛擬機
[root@kvm-server ~]# virsh list --all #顯示所有的虛擬機
[root@kvm-server ~]# virsh start vm-node1 #啟動vm-node1虛擬機
[root@kvm-server ~]# virsh shutdown vm-node1 #關閉vm-node1虛擬機
[root@kvm-server ~]# virsh destroy vm-node1 #虛擬機vm-node1強制斷電
[root@kvm-server ~]# virsh suspend vm-node1 #掛起vm-node1虛擬機
[root@kvm-server ~]# virsh resume vm-node1 #恢復掛起的虛擬機
[root@kvm-server ~]# virsh undefine vm-node1 #刪除虛擬機,慎用
[root@kvm-server ~]# virsh dominfo vm-node1 #查看虛擬機的配置信息
[root@kvm-server ~]# virsh domiflist #查看網卡配置信息
[root@kvm-server ~]# virsh domblklist vm-node1 #查看該虛擬機的磁盤位置
[root@kvm-server ~]# virsh edit vm-node1 #修改vm-node1的xml配置文件
[root@kvm-server ~]# virsh dumpxml vm-node1 #查看KVM虛擬機當前配置
[root@kvm-server ~]# virsh dumpxml vm-node1 > vm-node1.bak.xml #備份vm-node1虛擬機的xml文件,原文件默認路徑/etc/libvirt/qemu/vm-node1.xml
[root@kvm-server ~]# virsh autostart vm-node1 #KVM物理機開機自啟動虛擬機,配置后會在此目錄生成配置文件/etc/libvirt/qemu/autostart/vm-node1.xml
[root@kvm-server ~]# virsh autostart --disable vm-node1 #取消開機自啟動
二、為虛擬機增加網卡
一個完整的數據包從虛擬機到物理機的路徑是:虛擬機-->QEMU虛擬機網卡-->虛擬化層-->內核網橋-->物理網卡
KVM默認情況下是由QEMU在Linux的用戶空間模擬出來的並提供給虛擬機的。
全虛擬化:即客戶機操作系統完全不需要修改就能運行於虛擬機中,客戶機看不到真正的硬件設備,與設備的交互全是由純軟件虛擬的
半虛擬化:通過對客戶機操作系統進行修改,使其意識到自己運行在虛擬機中。因此,全虛擬化和半虛擬化網卡的區別在於客戶機是否需要修改才能運行在宿主機中。
半虛擬化使用virtio技術,virtio驅動因為改造了虛擬機的操作系統,讓虛擬機可以直接和虛擬化層通信,從而大大提高了虛擬機性能。
[root@kvm-server ~]# virsh domiflist vm-node1 Interface Type Source Model MAC ------------------------------------------------------- vnet0 bridge br0 virtio 52:54:00:40:75:05 [root@kvm-server ~]# virsh attach-interface vm-node1 --type bridge --source br0 --model virtio #臨時增加網卡的方法,關機后再開機新增網卡配置丟失 Interface attached successfully [root@kvm-server ~]# virsh domiflist vm-node1 Interface Type Source Model MAC ------------------------------------------------------- vnet0 bridge br0 virtio 52:54:00:40:75:05 vnet1 bridge br0 virtio 52:54:00:5b:6c:cc
[root@kvm-server ~]# virsh edit vm-node1 #永久生效方法一:修改配置文件增加如下內容 <interface type='bridge'> #永久生效方法二:使用virt-manager管理工具進行操作 <mac address='52:54:00:11:90:7c'/> <source bridge='br0'/> <target dev='vnet1'/> <model type='virtio'/> <alias name='net1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/> </interface>
[root@kvm-server ~]# virsh domiflist vm-node1 #查找虛擬機網卡的MAC地址 Interface Type Source Model MAC ------------------------------------------------------- vnet0 bridge br0 virtio 52:54:00:40:75:05 vnet1 bridge br0 virtio 52:54:00:84:23:3d [root@kvm-server ~]# virsh detach-interface vm-node1 --type bridge --mac 52:54:00:84:23:3d --current #根據MAC地址刪除網卡,即時生效,如果需要最終生效也要使用virsh edit 來修改配置文件 Interface detached successfully [root@kvm-server ~]# virsh domiflist vm-node1 Interface Type Source Model MAC ------------------------------------------------------- vnet0 bridge br0 virtio 52:54:00:40:75:05
三、虛擬機增加磁盤
KVM虛擬機的磁盤鏡像從存儲方式上看,可以分為兩種方式,第一種方式為存儲於文件系統上,第二種方式為直接使用裸設備。裸設備的使用方式可以是直接使用裸盤,也可以是用LVM的方式。存於文件系統上的鏡像有很多格式,如raw、cloop、cow、qcow、qcow2、vmdlk、vdi等,經常使用的是raw和qcow2。
raw:是簡單的二進制鏡像文件,一次性會把分配的磁盤空間占用。raw支持稀疏文件特性,稀疏文件特性就是文件系統會把分配的空字節文件記錄在元數據中,而不會實際占用磁盤空間。
qcow2:第二代的QEMU寫時復制格式,支持很多特性,如快照、在不支持稀疏特性的文件系統上也支持精簡方式、AES加密、zlib壓縮、后備方式。
[root@kvm-server ~]# qemu-img create -f raw /Data/vm-node1-10G.raw 10G #創建raw格式並且大小為10G的磁盤 Formatting '/Data/vm-node1-10G.raw', fmt=raw size=10737418240
[root@kvm-server ~]# qemu-img info /Data/vm-node1-10G.raw image: /Data/vm-node1-10G.raw file format: raw virtual size: 10G (10737418240 bytes) disk size: 0 [root@kvm-server ~]# virsh attach-disk vm-node1 /Data/vm-node1-10G.raw vdb --cache none #臨時生效,關機再開機后失效 Disk attached successfully
[root@kvm-server ~]# virsh dumpxml vm-node1 #通過dumpxml找到下段配置文件
[root@kvm-server ~]# virsh edit vm-node1 #使用edit命令,把找到的內容加到vda磁盤后面即可 <disk type='file' device='disk'> <driver name='qemu' type='raw' cache='none'/> <source file='/Data/vm-node1-10G.raw'/> <backingStore/> <target dev='vdb' bus='virtio'/> <alias name='virtio-disk1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/> </disk>
[root@vm-node1 ~]# fdisk -l #數據盤已掛載,可以進行分區、格式化、掛載等操作 Disk /dev/vda: 42.9 GB, 42949672960 bytes, 83886080 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: 0x00009df9 Device Boot Start End Blocks Id System /dev/vda1 * 2048 83886079 41942016 83 Linux Disk /dev/vdb: 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
磁盤鏡像格式的轉換方法:
[root@kvm-server ~]# qemu-img create -f raw test.raw 5G
Formatting 'test.raw', fmt=raw size=5368709120
[root@kvm-server ~]# qemu-img convert -p -f raw -O qcow2 test.raw test.qcow2 #參數-p顯示進度,-f是指原有的鏡像格式,-O是輸出的鏡像格式,然后是輸入文件和輸出文件
(100.00/100%)
[root@kvm-server ~]# qemu-img info test.qcow2
image: test.qcow2
file format: qcow2
virtual size: 5.0G (5368709120 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
[root@kvm-server ~]# ll -sh test.*
196K -rw-r--r-- 1 root root 193K Oct 19 16:19 test.qcow2
0 -rw-r--r-- 1 root root 5.0G Oct 19 16:11 test.raw
四、克隆虛擬機
使用virt-clone克隆虛擬機的方法:
[root@kvm-server ~]# virsh shutdown CentOS-7.2-x86_64 #必須要關機才能進行克隆 Domain CentOS-7.2-x86_64 is being shutdown [root@kvm-server ~]# virsh list --all Id Name State ---------------------------------------------------- - CentOS-7.2-x86_64 shut off - vm-node1 shut off [root@kvm-server ~]# virt-clone -o CentOS-7.2-x86_64 -n vm-node2 -f /opt/vm-node2.raw #參數含義:-o被克隆虛擬機的名字、-n克隆后虛擬機的名字、-f指定磁盤存儲位置 WARNING The requested volume capacity will exceed the available pool space when the volume is fully allocated. (40960 M requested capacity > 36403 M available) Allocating 'vm-node2.raw' | 40 GB 00:01:03 Clone 'vm-node2' created successfully. [root@kvm-server ~]# virsh list --all #克隆后為關機狀態 Id Name State ---------------------------------------------------- - CentOS-7.2-x86_64 shut off - vm-node1 shut off - vm-node2 shut off
# 為虛擬機node-192.168.5.95-kubeadmin-master磁盤創建快照
# virsh snapshot-create-as --domain node-192.168.5.95-kubeadmin-master --name kubeadmin-sys-init --description '准備完成'
Domain snapshot kubeadmin-sys-init created
# 查看磁盤快照
# virsh snapshot-list node-192.168.5.95-kubeadmin-master
Name Creation Time State
------------------------------------------------------------
kubeadmin-sys-init 2020-07-31 22:05:39 +0800 running
# 恢復磁盤快照
# virsh snapshot-revert node-192.168.5.95-kubeadmin-master kubeadmin-sys-init
# 刪除磁盤快照
# virt snapshot-delete node-192.168.5.95-kubeadmin-master kubeadmin-sys-init
五、修改虛擬機的名字
[root@kvm-server ~]# virsh shutdown CentOS-7.2-x86_64 #需要先關機,然后對虛擬機進行改名 [root@kvm-server ~]# cp /etc/libvirt/qemu/vm-node2.xml /etc/libvirt/qemu/vm-test.xml #拷貝xml文件為要修改的名稱,如:vm-test [root@kvm-server ~]# grep '<name>' /etc/libvirt/qemu/vm-test.xml #修改vm-test.xml中的name字段為vm-test <name>vm-test</name> [root@kvm-server ~]# virsh undefine vm-node2 #刪除之前的虛擬機 Domain vm-node2 has been undefined [root@kvm-server ~]# virsh define /etc/libvirt/qemu/vm-test.xml #定義新的虛擬機 Domain vm-test defined from /etc/libvirt/qemu/vm-test.xml [root@kvm-server ~]# virsh list --all #已完成改名操作 Id Name State ---------------------------------------------------- - CentOS-7.2-x86_64 shut off - vm-node1 shut off - vm-test shut off
六、修改KVM虛擬機的CPU
需要先修改xml配置文件
# 查看默認的CPU和內存大小 virsh edit node-192.168.5.90-test <domain type='kvm'> <name>node-192.168.5.90-test</name> <uuid>de4fe850-2fa7-49be-b785-77642bc95713</uuid> <memory unit='KiB'>4194304</memory> <currentMemory unit='KiB'>4194304</currentMemory> <vcpu placement='static'>2</vcpu> # 修改配置 <domain type='kvm'> <name>node-192.168.5.90-test</name> <uuid>de4fe850-2fa7-49be-b785-77642bc95713</uuid> <memory unit='KiB'>8192000</memory> <currentMemory unit='KiB'>4194304</currentMemory> <vcpu placement='auto' current="1">16</vcpu> # 關閉虛擬機,再開機;注意不要重啟,重啟配置不生效。 virsh shutdown node-192.168.5.90-test virsh start node-192.168.5.90-test # 動態修改VCPU;VCPU只能熱增加,不能減少 # 查看當前邏輯CPU數量 [root@192-168-5-90 ~]# cat /proc/cpuinfo| grep "processor"| wc -l 1 # 動態增加到4個 virsh setvcpus node-192.168.5.90-test 4 --live # 再次查看CPU數量 [root@192-168-5-90 ~]# cat /proc/cpuinfo| grep "processor"| wc -l 4 # 動態修改內存(增減都可以) # virsh qemu-monitor-command node-192.168.5.90-test --hmp --cmd info balloon # 查看當前內存大小 balloon: actual=4096
# virsh qemu-monitor-command node-192.168.5.90-test --hmp --cmd balloon 8190 # 設置當前內存為8G
# virsh qemu-monitor-command node-192.168.5.90-test --hmp --cmd info balloon # 查看當前內存大小 balloon: actual=8000
# virsh qemu-monitor-command node-192.168.5.90-test --hmp --cmd balloon 6000 # 設置當前內存為6G
# virsh qemu-monitor-command node-192.168.5.90-test --hmp --cmd info balloon # 查看當前內存大小 balloon: actual=6000