1. 程式人生 > >使用libvirt命令行管理虛擬機

使用libvirt命令行管理虛擬機

附加 entos roo 在線 關閉 clas sparse AR num

本文主要介紹虛擬機的啟動、停止、重啟、掛起等基礎操作,不過在進行這些操作之前,我們得先有一臺kvm虛擬機,根據之前的文章,先創建一臺虛擬機。

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