kvm總結(3) : 導入虛擬機


前文中,我們創建了兩個虛擬機,kvm1和kvm2,kvm1是通過圖形化界面創建的,kvm2是通過純命令行的方式創建的,在創建kvm2時,我們只指定了必要參數,並且提到,這樣創建出的虛擬機,性能比較一般,那么怎樣創建虛擬機,性能會比較強勁一點呢?現在咱們就來聊聊。

上一篇文章中創建虛擬機的命令如下

virt-install --name=kvm2 --vcpus=2 --memory=2048 --location=/data/iso/CentOS-7-x86_64-DVD-2009.iso --disk path=/var/lib/libvirt/images/kvm2.qcow2 --network network=default --graphics none --extra-args='console=ttyS0'

上述命令只使用了必要參數創建了虛擬機,這種情況下,默認是使用”全虛擬化”的方式創建的虛擬硬件,”全虛擬化”是以純軟件的方式來模擬硬件設備的,如果虛擬機系統(客戶機)支持virtio驅動,則可以使用”半虛擬化”的方式創建虛擬機硬件,virtio的”半虛擬化”省去了”全虛擬化”中異常捕獲的環節,可以理解為操作路徑更短了,所以在IO性能上有所提升,但是使用的前提是客戶機支持virtio驅動。

centos7是默認集成了virtio驅動的(RHEL4.8以后自帶virtio驅動),在虛擬機中使用如下命令進行確認,查看是否包含virtio模塊。

lsmod | grep virtio

所以,當虛擬機是centos7時,不用額外安裝任何驅動,如果想要創建windows虛擬機,則需要下載virtio-win驅動,並安裝到windows虛擬機中以后,才能將驅動模式改為virtio,否則無法使用virtio模式啟動虛擬機。

查看kvm2虛擬機的配置文件,可以看到硬盤和網卡的配置如下(省略了其他信息)

...
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/var/lib/libvirt/images/kvm2.qcow2'/>
<target dev='hda' bus='ide'/>
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>
...
<interface type='network'>
<mac address='52:54:00:52:83:75'/>
<source network='default'/>
<model type='rtl8139'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
...

如上例所示,硬盤的bus總線類型為ide,網卡的類型為rtl8139,這些都是使用全虛擬化驅動默認創建出的硬件類型,我們現在就來把它改成virtio半虛擬化驅動,先來看看圖形化的操作,我已經將kvm2停機了,點擊下圖中的open按鈕,

然后點擊下圖中的“燈泡”按鈕,查看kvm2的詳細配置,
點擊IDE Disk1,這個就是默認創建的網卡,點開下圖中的advanced options,即可看到,硬盤的bus類型是IDE,點開下拉框,選擇VirtIO,選擇后,點擊右下角的Apply按鈕確定應用。

硬盤修改完並確定應用后,可以看到,硬盤已經從IDE Disk變成了Virtio Disk,點擊網卡配置,將默認的硬件模式從rtl8139改成virtio,修改完成后,點擊apply保存應用

完成上述操作后,就已經將硬盤和網卡的驅動模式改為virtio了,此時查看對應的配置文件,也是一樣修改為virtio的,正如之前所說,使用圖形化修改虛擬機配置,和使用virsh edit命令修改配置文件在本質上是一樣的。

如果使用命令安裝虛擬機時就想指定使用virtio模式的驅動,也可以在命令中指定磁盤的bus和網卡的model,示例如下:

virt-install --name=kvm2 --vcpus=2 --memory=2048 --location=/data/iso/CentOS-7-x86_64-DVD-2009.iso --disk path=/var/lib/libvirt/images/kvm2.qcow2,bus=virtio --network network=default,model=virtio --graphics none --extra-args='console=ttyS0'

到目前為止,我們已經學會了創建、查詢、修改虛擬機,但是我們還沒有刪除過虛擬機,現在就來試試通過命令刪除虛擬機。
查看當前的虛擬機,我已經停止了kvm2,如下

[root@cos7 ~]# virsh list --all
Id Name State
----------------------------------------------------
- kvm1 shut off
- kvm2 shut off

使用virsh undefine命令,即可刪除對應的虛擬機,如下

[root@cos7 ~]# virsh undefine kvm2
Domain kvm2 has been undefined
 
[root@cos7 ~]# virsh list --all
Id Name State
----------------------------------------------------
- kvm1 shut off

刪除后,通過virsh list命令就看不到對應的虛擬機了,查看/etc/libvirt/qemu目錄,會發現kvm2.xml文件已經沒有了,但是,查看/var/lib/libvirt/images/目錄,還可以看到對應kvm2.qcow2文件,如下

[root@cos7 ~]# ls /etc/libvirt/qemu
autostart kvm1.xml networks
[root@cos7 ~]# ls /var/lib/libvirt/images/
kvm1.qcow2 kvm2.qcow2

也就是說,kvm2的虛擬機鏡像文件還是存在的,我們可以手動刪除這個文件,就相當於徹底刪除了kvm2虛擬機(如果想要同時刪除配置文件和對應的磁盤,可以在undefine命令中加入–remove-all-storage參數,但是這樣操作風險較大,不推薦使用),只刪除xml配置文件的情況下,磁盤鏡像可以留作備份,等待需要的時候,再次導入,當然,這個文件也可以在其他kvm宿主機上導入(相當於遷移),導入命令如下

virt-install --import --name kvm2import --ram 4096 --vcpus=4 --cpu host-model --disk path=/var/lib/libvirt/images/kvm2.qcow2,bus=virtio --network network=default,model=virtio --nographics

沒錯,仍然還是使用virt-install命令導入鏡像,–import選項表明是導入操作,上述命令中的虛擬機的名稱、內存和cpu設置、網絡、硬盤、驅動都可以在導入時根據情況進行設定,換句話說就是,即使創建kvm2時設置了2G內存,如果在導入鏡像時,想要分配4G內存,那么只要在導入時指定–ram 4096就行了,並不一定要和原配置保持一致,我在導入時就指定使用了virtio模式驅動,這是因為我確認虛擬機使用的是centos7.9的系統,不用額外安裝任何驅動。
由於我們在創建kvm2虛擬機時配置了虛擬終端(使用了–extra-args=’console=ttyS0’參數),所以在導入虛擬機時我指定了–nographics選項,–nographics選項表示使用非圖形化的console連入虛擬機(但是前提是我們確定已經為虛擬機配置好了終端),如果你在服務器的桌面環境(圖形化環境)中執行上述命令,或者配置好了x11forward,可以省略–nographics選項,默認情況下會為我們分配一個virt-view圖形化控制台,我們也可以通過這個圖形化控制台連入導入的虛擬機。
如果我們使用的是純遠程的ssh客戶端,並且不支持xwindow(x11forward)的轉發,在執行上述命令時也無法使用–nographics選項,那么在導入時可能會卡在如下圖中的位置

在這種情況下,去服務器中查看對應的虛擬機,很有可能是已經導入成功的,可以先關閉這個遠程窗口,然后通過宿主機的圖形化或者命令行窗口連入虛擬機。

如果我們壓根就不想在導入虛擬機時連入控制台,則可以直接使用–noautoconsole選項,表示不會自動連入到虛擬機的控制台,示例如下

virt-install --import --name kvm2import --ram 4096 --vcpus=4 --cpu host-model --disk path=/var/lib/libvirt/images/kvm2.qcow2,bus=virtio --network network=default,model=virtio --noautoconsole

當導入成功以后,可以看到對應的虛擬機名稱,而且kvm自動生成了對應的配置文件,也就是kvm2import.xml

[root@cos7 ~]# virsh list --all
Id Name State
----------------------------------------------------
2 kvm2import running
- kvm1 shut off
 
[root@cos7 ~]# ls /etc/libvirt/qemu
autostart kvm1.xml kvm2import.xml networks

查看配置文件,或者使用如下命令,可以看到,kvm2import虛擬機使用的磁盤鏡像就是 /var/lib/libvirt/images/kvm2.qcow2,導入成功了

[root@cos7 qemu]# virsh domblklist kvm2import
Target Source
------------------------------------------------
vda /var/lib/libvirt/images/kvm2.qcow2

如果你和我一樣,有點強迫症,覺得虛擬機名字和對應的磁盤文件名不一樣,心里不爽。
可以先停止kvm2虛擬機,然后通過virsh domrename命令重命名kvm2import虛擬機,如下

[root@cos7 qemu]# virsh domrename kvm2import kvm2
Domain successfully renamed
 
[root@cos7 qemu]# virsh list --all
Id Name State
----------------------------------------------------
- kvm1 shut off
- kvm2 shut off
 
[root@cos7 qemu]# ls
autostart kvm1.xml kvm2.xml networks

如上所示,重命名完成后,虛擬機名稱已經變成kvm2,並且對應的配置文件名也從kvm2import.xml變成了kvm2.xml

其實,如果已經有對應的xml配置文件,並且有對應的鏡像文件,那么我們也可以直接通過define命令導入,為了方便示例,我先備份一下xml配置文件,操作如下

[root@cos7 qemu]# pwd
/etc/libvirt/qemu
[root@cos7 qemu]# ls
autostart kvm1.xml kvm2.xml networks
[root@cos7 qemu]# cp kvm2.xml{,.backup}
[root@cos7 qemu]# ls
autostart kvm1.xml kvm2.xml kvm2.xml.backup networks

我備份了kvm2.xml的配置文件,現在使用undefine命令刪除kvm2虛擬機的定義

[root@cos7 qemu]# virsh list --all
Id Name State
----------------------------------------------------
- kvm1 shut off
- kvm2 shut off
 
[root@cos7 qemu]# virsh undefine kvm2
Domain kvm2 has been undefined
 
[root@cos7 qemu]# ls
autostart kvm1.xml kvm2.xml.backup networks
[root@cos7 qemu]# ls /var/lib/libvirt/images/
kvm1.qcow2 kvm2.qcow2
[root@cos7 qemu]# virsh list --all
Id Name State
----------------------------------------------------
- kvm1 shut off

如上所示,執行undefine命令以后,列表中已經看不到kvm2虛擬機了,現在我們將備份的xml文件名還原,然后通過define命令和配置文件,重新定義kvm2主機,讓kvm2主機重新出現在列表中,操作如下

[root@cos7 qemu]# pwd
/etc/libvirt/qemu
[root@cos7 qemu]# ls
autostart kvm1.xml kvm2.xml.backup networks
[root@cos7 qemu]# mv kvm2.xml.backup kvm2.xml
[root@cos7 qemu]# ls
autostart kvm1.xml kvm2.xml networks
[root@cos7 qemu]# virsh define /etc/libvirt/qemu/kvm2.xml
Domain kvm2 defined from /etc/libvirt/qemu/kvm2.xml
 
[root@cos7 qemu]# virsh list --all
Id Name State
----------------------------------------------------
- kvm1 shut off
- kvm2 shut off

到目前為止,虛擬機的‘增刪改查’我們都已經初步的接觸到了,剩下的操作,我們之后再慢慢聊吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM