使用libvirt命令行管理虛擬機
virt-install --name "centos5" --vcpus=1 --ram=512 --disk=/images/kvm/centos55.img,size=10,sparse --force --network bridge=virbr0,model=virtio --cdrom /opt/CentOS-5.5-i386-bin-DVD.iso --graphic vnc,listen=0.0.0.0,port=5900 --os-variant rhel5
可以使用vncviewer進行系統安裝,安裝後虛擬機reboot,此時會退出vncviewer。我們需要重新啟動該虛擬機,但是系統安裝完了,又不能使用上面的命令安裝,怎麽做呢?
這裏我們首先到/etc/libvirt/qemu/目錄下,會在該目錄下看到一個名為centos5.xml的文件,這就是我們之前使用virt-install創建虛擬機的配置文件。
於是,我們想要啟動該虛擬機,可以使用如下命令:
virsh create centos5.xml #根據centos5.xml創建虛擬機
[root@kvm-node1 qemu]# virsh create centos5.xml
Domain centos5 created from centos5.xml
[root@kvm-node1 qemu]# virsh list
Id Name State
----------------------------------------------------
11 centos5 running
Virsh的常用命令介紹:
virt-install: 創建虛擬機,並安裝OS;也可以創建虛擬機並導入Image文件
根據xml文件創建虛擬機:
virsh create *.xml #創建並啟動虛擬機
virsh define *.xml #創建但不啟動虛擬機
關閉domain:
virsh destroy domain_name #強制關閉domain
virsh shutdown domain_name #優雅的關閉domain
vrish reboot domain_name #重啟一個domain
刪除domain:
virsh undefine domain_name #刪除一個domain,該操作會刪除虛擬機的xml配置文件,但不會刪除虛擬磁盤文件
連接一個domain:
virsh console domain_name #連接到一個domain的管理控制臺
列出domain:
virsh list #列出domains,會列出活動中的虛擬機
virsh list -all #列出所有的domains,包含已經停止的虛擬機
附加或拆除disk:
virsh attach-disk domain_name #附加一個磁盤到一個domain中
virsh detach-disk domain_name #從一個domain中移除磁盤
註意:
centos5.x版本不支持在線調整cpu,內存等, 以下在centos6.x,7.x測試
centos6.x, 7.x平臺下,cpu core數只能在線增加,不能在線減小
應註意你想要添加的硬件是臨時生效,還是永久生效
所以這裏創建一個centos6.5的虛擬機:
virt-install --name "centos6.5" --vcpus=1 --ram=512 --disk=/images/kvm/centos6.img,size=10,bus=virtio --force --network bridge=virbr0,model=virtio --cdrom /opt/CentOS-6.5-x86_64-bin-DVD1.iso --graphic vnc,listen=0.0.0.0,port=5900 --os-variant=rhel6
確保虛擬機處於running狀態,然後使用qemu-img創建一個磁盤映像,然後使用virsh attach-disk命令添加給正在運行的虛擬機。
在宿主機出現“Disk attach successfully”後,進入客戶機操作系統查看
在客戶機中可以看到,通過attach-disk命令附加的磁盤,可以像普通磁盤一樣使用該磁盤,就不多演示了。
下面,再動態移除之前添加的磁盤,使用virsh detach-disk命令。
成功移除磁盤後,在客戶機中也沒有了磁盤文件。另外,也可以將ISO文件附件到虛擬機中,這樣就實現了掛載磁盤鏡像的問題。
註意:上面的附加磁盤操作都是臨時生效,待domain重啟後就失去掛載的磁盤。要想附加的磁盤永久生效,有兩種方法:
1)使用--persistent參數,比如:virsh attach-disk centos6.5 /images/kvm/test.img vdb --cache none --subdriver raw --persistent
--persistent 重啟生效,相當於:-config --live
2)在添加磁盤成功後,導出xml文件。其實,就是使用attach-disk附加磁盤,然後使用virsh dumpxml domain_name > domain_name.xml,然後用這個新的xml文件創建虛 擬機。
3)使用xml文件進行attach-device操作。(這裏實際上算介紹attach-device命令了)
首先,配置一個xml文件,添加需要配置的參數項,比如cache=none, io=native等。
[root@kvm-node1 ~] # cat disk.xml
<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='none' io='native'/>
<source dev='/dev/CentOS_kvm/centos02_lij_data1'/>
<target dev='vdb' bus='virtio'/>
</disk>
然後,使用virsh attach-device命令添加,
virsh attach-device centos6.5 disk.xml --persistent
說明:attach-device才是更通用的添加硬件方法,添加硬件的同時可以配置相應參數,比如我們需要添加/dev/vg01/lv01這塊新磁盤
附加或拆除網卡:
virsh attach-interface domain_name #往一個domain中添加網卡
virsh detach-interface domain_name #從一個domain中移除網卡
註意:使用attach-interface和附件磁盤是一樣的,都是暫時保存,重啟後失效,如果想永久生效,可參照上面附件磁盤的方法,不再贅述。
調整cpu:
virsh setvcpus domain_name vcpus_num --config --live #使用--config --live 使修改永久生效
例如:virsh setvcpus centos6.5 2 --config --live
註意:centos5.x不支持調整cpu、內存等,需要在centos6.x及以上版本中操作;
設置cpu數量不能超過domain的配置文件中設定的maxvcpus的值,不然會失敗。
調整內存:
virsh setmem domain_name mem_num
例如:virsh setmem centos6.5 512M #臨時設置內存為512M
virsh setmem centos6.5 786M --config --live #永久設置內存為786M
註意:能夠調整的內存最大值不超過xml文件中內存設置的值。
內存能夠在線調整的原理是利用了virtio-balloon技術。
擴展:
virtio-balloon氣球內存技術:它可以在客戶機運行時動態地調整它所占用的宿主機內存資源,而不需要關閉客戶機
該技術能夠實現:
<1>當宿主機內存緊張時,可以請求客戶機回收利用已分配給客戶機的部分內存,客戶機就會釋放部分空閑內存。若其內存空間不足,可能還會回收部分使用中的內存,可能會將部分內存換到交換分區中;
<2>當客戶機內存不足時,也可以讓客戶機的內存氣球壓縮,釋放出內存氣球中的部分內存,讓客戶機使用更多的內存。
內存調整過程:
a. KVM 發送請求給 VM 讓其歸還一定數量的內存給KVM。
b. VM 的 virtio_balloon 驅動接到該請求。
c. VM 的驅動是客戶機的內存氣球膨脹,氣球中的內存就不能被客戶機使用。
d. VM 的操作系統歸還氣球中的內存給VMM
e. KVM 可以將得到的內存分配到任何需要的地方。
f. KVM 也可以將內存返還到客戶機中。
保存狀態至磁盤文件或從磁盤文件恢復:
virsh save domain_name #保留一個正在運行的domain的RAM狀態
virsh restore domain_name #恢復一個domain
例如:virsh save --bypass-cache centos6.5 /usr/src/centos6.5_snapshot_1 --running --verbose
--bypass-cache:避免在保存的時候文件系統緩存而保存不完全
--running:設置恢復後domain的運行狀態是running
--verbose:顯示保存的進度
例如:virsh restore /usr/src/centos6.5_snapshot_1 --bypass-cache --running
--bypass-cache:避免在還原時發生文件系統緩存
--running:還原domain後進入running狀態
暫停於內存或繼續運行:
virsh suspend domain_name #掛起(暫停)一個domain
virsh resume domain_name #恢復一個domain
使用libvirt命令行管理虛擬機