kvm - virsh常用命令大全
技術標籤:linux_shell_ansiblekvm-openstack虛擬化linuxkvm
一、virsh常用命令
一些常用命令引數
[[email protected] ~]# virsh --help #檢視命令幫忙
[[email protected] ~]# virsh list #顯示正在執行的虛擬機器
[[email protected] ~]# virsh list --all #顯示所有的虛擬機器
[[email protected]
[[email protected] ~]# virsh shutdown vm-node1 #關閉vm-node1虛擬機器
[[email protected] ~]# virsh destroy vm-node1 #虛擬機器vm-node1強制斷電
[[email protected] ~]# virsh suspend vm-node1 #掛起vm-node1虛擬機器
[[email protected]
[[email protected] ~]# virsh undefine vm-node1 #刪除虛擬機器,慎用
[[email protected] ~]# virsh dominfo vm-node1 #檢視虛擬機器的配置資訊
[[email protected] ~]# virsh domiflist #檢視網絡卡配置資訊
[[email protected] ~]# virshdomblklist vm-node1 #檢視該虛擬機器的磁碟位置
[[email protected] ~]# virsh edit vm-node1 #修改vm-node1的xml配置檔案
[[email protected] ~]# virsh dumpxml vm-node1 #檢視KVM虛擬機器當前配置
[[email protected] ~]# virsh dumpxml vm-node1 > vm-node1.bak.xml #備份vm-node1虛擬機器的xml檔案,原檔案預設路徑/etc/libvirt/qemu/vm-node1.xml
[[email protected] ~]# virsh autostart vm-node1 #KVM物理機開機自啟動虛擬機器,配置後會在此目錄生成配置檔案/etc/libvirt/qemu/autostart/vm-node1.xml
[[email protected] ~]# virsh autostart --disable vm-node1 #取消開機自啟動
進入容器
yum install tigervnc-server vnc # 如果沒有安裝就安裝一下
virsh vncdisplay rhel7.3 # 檢視vnc埠號
vncviewer 127.0.0.1:3
yum -y install virt-manager #習慣用這個 呼叫xshell manager管理
virt-manager
二、為虛擬機器增加網絡卡
一個完整的資料包從虛擬機器到物理機的路徑是:虛擬機器-->QEMU虛擬機器網絡卡-->虛擬化層-->核心網橋-->物理網絡卡
KVM預設情況下是由QEMU在Linux的使用者空間模擬出來的並提供給虛擬機器的。
全虛擬化:即客戶機作業系統完全不需要修改就能運行於虛擬機器中,客戶機看不到真正的硬體裝置,與裝置的互動全是由純軟體虛擬的
半虛擬化:通過對客戶機作業系統進行修改,使其意識到自己執行在虛擬機器中。因此,全虛擬化和半虛擬化網絡卡的區別在於客戶機是否需要修改才能執行在宿主機中。
半虛擬化使用virtio技術,virtio驅動因為改造了虛擬機器的作業系統,讓虛擬機器可以直接和虛擬化層通訊,從而大大提高了虛擬機器效能。
[[email protected] ~]# virsh domiflist vm-node1
Interface Type Source Model MAC
-------------------------------------------------------
vnet0 bridge br0 virtio 52:54:00:40:75:05
[[email protected] ~]# virsh attach-interface vm-node1 --type bridge --source br0 --model virtio #臨時增加網絡卡的方法,關機後再開機新增網絡卡配置丟失
Interface attached successfully
[[email protected] ~]# 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
[[email protected] ~]# 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>
[[email protected] ~]# 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
[[email protected] ~]# virsh detach-interface vm-node1 --type bridge --mac 52:54:00:84:23:3d --current #根據MAC地址刪除網絡卡,即時生效,如果需要最終生效也要使用virsh edit 來修改配置檔案
Interface detached successfully
[[email protected] ~]# 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壓縮、後備方式。
[[email protected] ~]# qemu-img create -f raw /Data/vm-node1-10G.raw 10G #建立raw格式並且大小為10G的磁碟
Formatting '/Data/vm-node1-10G.raw', fmt=raw size=10737418240
[[email protected] ~]# 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
[[email protected] ~]# virsh attach-disk vm-node1 /Data/vm-node1-10G.raw vdb --cache none #臨時生效,關機再開機後失效
Disk attached successfully
[[email protected] ~]# virsh dumpxml vm-node1 #通過dumpxml找到下段配置檔案
[[email protected] ~]# 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>
[[email protected] ~]# 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
磁碟映象格式的轉換方法:
[[email protected] ~]# qemu-img create -f raw test.raw 5G
Formatting 'test.raw', fmt=raw size=5368709120
[[email protected] ~]# qemu-img convert -p -f raw -O qcow2 test.raw test.qcow2 #引數-p顯示進度,-f是指原有的映象格式,-O是輸出的映象格式,然後是輸入檔案和輸出檔案
(100.00/100%)
[[email protected] ~]# 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
[[email protected] ~]# 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克隆虛擬機器的方法:
[[email protected] ~]# virsh shutdown CentOS-7.2-x86_64 #必須要關機才能進行克隆
Domain CentOS-7.2-x86_64 is being shutdown
[[email protected] ~]# virsh list --all
Id Name State
----------------------------------------------------
- CentOS-7.2-x86_64 shut off
- vm-node1 shut off
[[email protected] ~]# 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.
[[email protected] ~]# 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
五、修改虛擬機器的名字
[[email protected] ~]# virsh shutdown CentOS-7.2-x86_64 #需要先關機,然後對虛擬機器進行改名
[[email protected] ~]# cp /etc/libvirt/qemu/vm-node2.xml /etc/libvirt/qemu/vm-test.xml #拷貝xml檔案為要修改的名稱,如:vm-test
[[email protected] ~]# grep '<name>' /etc/libvirt/qemu/vm-test.xml #修改vm-test.xml中的name欄位為vm-test
<name>vm-test</name>
[[email protected] ~]# virsh undefine vm-node2 #刪除之前的虛擬機器
Domain vm-node2 has been undefined
[[email protected] ~]# virsh define /etc/libvirt/qemu/vm-test.xml #定義新的虛擬機器
Domain vm-test defined from /etc/libvirt/qemu/vm-test.xml
[[email protected] ~]# 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數量
[[email protected] ~]# cat /proc/cpuinfo| grep "processor"| wc -l
1
# 動態增加到4個
virsh setvcpus node-192.168.5.90-test 4 --live
# 再次檢視CPU數量
[[email protected] ~]# 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