主頁(yè) > 知識(shí)庫(kù) > 在Ubuntu的命令行終端里管理KVM虛擬機(jī)的教程

在Ubuntu的命令行終端里管理KVM虛擬機(jī)的教程

熱門(mén)標(biāo)簽:湖北防封外呼系統(tǒng)運(yùn)營(yíng)商 地圖標(biāo)注百度百科 玉林防封電銷(xiāo)卡 硅基智能電話(huà)外呼系統(tǒng) 預(yù)覽式外呼系統(tǒng)有什么用 i電銷(xiāo)機(jī)器人 去電tm智能電話(huà)機(jī)器人 慧營(yíng)銷(xiāo)外呼系統(tǒng)下載 鶴壁點(diǎn)撥外呼系統(tǒng)好用嗎

有很多不同的方式去管理運(yùn)行在 KVM 管理程序上的虛擬機(jī)。例如,virt-manager 就是一個(gè)流行的基于圖形界面的前端虛擬機(jī)管理工具。然而,如果你想要在沒(méi)有圖形窗口的服務(wù)器環(huán)境下使用 KVM ,那么基于圖形界面的解決方案顯然是行不通的。事實(shí)上,你可以單純使用包裝了 kvm 命令行腳本的命令行來(lái)管理 KVM 虛擬機(jī)。作為替代方案,你可以使用 virsh 這個(gè)容易使用的命令行程序來(lái)管理客戶(hù)虛擬機(jī)。在 virsh 中,它通過(guò)和 libvirtd 服務(wù)通信來(lái)達(dá)到控制虛擬機(jī)的目的,而 libvirtd 可以控制多個(gè)不同的虛擬機(jī)管理器,包括 KVM,Xen,QEMU,LXC 和 OpenVZ。
當(dāng)你想要對(duì)虛擬機(jī)的前期準(zhǔn)備和后期管理實(shí)現(xiàn)自動(dòng)化操作時(shí),像 virsh 這樣的命令行管理工具是非常有用的。同樣,virsh 支持多個(gè)管理器也就意味著你可以通過(guò)相同的 virsh 接口去管理不同的虛擬機(jī)管理器。

在這篇文章中,我會(huì)示范怎樣在 ubuntu 和 debian 上通過(guò)使用 virsh 命令行去運(yùn)行 KVM。

第一步:確認(rèn)你的硬件平臺(tái)支持虛擬化

第一步,首先要確認(rèn)你的 CPU 支持硬件虛擬化擴(kuò)展(e.g.,Intel VT 或者 AMD-V),這是 KVM 對(duì)硬件的要求。下面的命令可以檢查硬件是否支持虛擬化。

復(fù)制代碼
代碼如下:

$ egrep '(vmx|svm)' --color /proc/cpuinfo

如果在輸出中不包含 vmx 或者 svm 標(biāo)識(shí),那么就意味著你的 cpu 不支持硬件虛擬化。因此你不能在你的機(jī)器上使用 KVM 。確認(rèn)了 cpu 支持 vmx 或者 svm 之后,接下來(lái)開(kāi)始安裝 KVM。

對(duì)于 KVM 來(lái)說(shuō),它不要求運(yùn)行在擁有 64 位內(nèi)核系統(tǒng)的主機(jī)上,但是通常我們會(huì)推薦在 64 位系統(tǒng)的主機(jī)上面運(yùn)行 KVM。

第二步:安裝KVM

使用 apt-get 安裝 KVM 和相關(guān)的用戶(hù)空間工具。

復(fù)制代碼
代碼如下:

$ sudo apt-get install qemu-kvm libvirt-bin

安裝期間,libvirtd 用戶(hù)組(在 debian 上是 libvirtd-qemu 用戶(hù)組)將會(huì)被創(chuàng)建,并且你的用戶(hù) id 將會(huì)被自動(dòng)添加到該組中。這樣做的目的是讓你可以以一個(gè)普通用戶(hù)而不是 root 用戶(hù)的身份去管理虛擬機(jī)。你可以使用 id 命令來(lái)確認(rèn)這一點(diǎn),下面將會(huì)告訴你怎么去顯示你的組 id:

復(fù)制代碼
代碼如下:

$ id your-userID>

如果因?yàn)槟承┰颍琹ibvirt(在 debian 中是 libvirt-qemu)沒(méi)有在你的組 id 中被找到,你也可以手動(dòng)將你自己添加到對(duì)應(yīng)的組中,如下所示:

在 ubuntu 上:

復(fù)制代碼
代碼如下:

$ sudo adduser [youruserID] libvirtd

在 debian 上:

復(fù)制代碼
代碼如下:

$ sudo adduser [youruserID] libvirt-qemu

按照如下命令重新載入更新后的組成員關(guān)系。如果要求輸入密碼,那么輸入你的登陸密碼即可。

復(fù)制代碼
代碼如下:

$ exec su -l $USER

這時(shí),你應(yīng)該可以以普通用戶(hù)的身份去執(zhí)行 virsh 了。做一個(gè)如下所示的測(cè)試,這個(gè)命令將會(huì)以列表的形式列出可用的虛擬機(jī)(當(dāng)前的列表是空的)。如果你沒(méi)有遇到權(quán)限問(wèn)題,那意味著到目前為止一切都是正常的。

復(fù)制代碼
代碼如下:

$ virsh list

 Id    Name                           State
第三步:配置橋接網(wǎng)絡(luò)

為了使 KVM 虛擬機(jī)能夠訪(fǎng)問(wèn)外部網(wǎng)絡(luò),一種方法是通過(guò)在 KVM 宿主機(jī)上創(chuàng)建 Linux 橋來(lái)實(shí)現(xiàn)。創(chuàng)建之后的橋能夠?qū)⑻摂M機(jī)的虛擬網(wǎng)卡和宿主機(jī)的物理網(wǎng)卡連接起來(lái),因此,虛擬機(jī)能夠發(fā)送和接收由物理網(wǎng)卡傳輸?shù)臄?shù)據(jù)包。這種方式叫做網(wǎng)絡(luò)橋接。

下面將告訴你如何創(chuàng)建并且配置網(wǎng)橋,我們創(chuàng)建一個(gè)網(wǎng)橋稱(chēng)它為 br0。

首先,安裝一個(gè)必需的包,然后用命令行創(chuàng)建一個(gè)網(wǎng)橋。

復(fù)制代碼
代碼如下:

$ sudo apt-get install bridge-utils
$ sudo brctl addbr br0

下一步就是配置已經(jīng)創(chuàng)建好的網(wǎng)橋,即修改位于 /etc/network/interfaces 的配置文件。我們需要將該橋接網(wǎng)卡設(shè)置成開(kāi)機(jī)啟動(dòng)。為了修改該配置文件,你需要關(guān)閉你的操作系統(tǒng)上的網(wǎng)絡(luò)管理器(如果你在使用它的話(huà))。跟隨操作指南的說(shuō)明去關(guān)閉網(wǎng)絡(luò)管理器。

關(guān)閉網(wǎng)絡(luò)管理器之后,接下來(lái)就是通過(guò)修改配置文件來(lái)配置網(wǎng)橋了。

復(fù)制代碼
代碼如下:

#auto eth0
#iface eth0 inet dhcp
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0

在上面的配置中,我假設(shè) eth0 是主要網(wǎng)卡,它也是連接到外網(wǎng)的網(wǎng)卡,同樣,我假設(shè) eth0 將會(huì)通過(guò) DHCP 協(xié)議自動(dòng)獲取 ip 地址。注意,之前在 /etc/network/interfaces 中還沒(méi)有對(duì) eth0 進(jìn)行任何配置。橋接網(wǎng)卡 br0 引用了 eth0 的配置,而 eth0 也會(huì)受到 br0 的制約。

重啟網(wǎng)絡(luò)服務(wù),并確認(rèn)網(wǎng)橋已經(jīng)被成功的配置好。如果成功的話(huà),br0 的 ip 地址將會(huì)是 eth0 自動(dòng)分配的 ip 地址,而且 eth0 不會(huì)被分配任何 ip 地址。

復(fù)制代碼
代碼如下:

$ sudo /etc/init.d/networking restart
$ ifconfig

如果因?yàn)槟承┰?,eth0 仍然保留了之前分配給了 br0 的 ip 地址,那么你可能必須手動(dòng)刪除 eth0 的 ip 地址。

第四步:用命令行創(chuàng)建一個(gè)虛擬機(jī)

對(duì)于虛擬機(jī)來(lái)說(shuō),它的配置信息被存儲(chǔ)在它對(duì)應(yīng)的xml文件中。因此,創(chuàng)建一個(gè)虛擬機(jī)的第一步就是準(zhǔn)備一個(gè)與虛擬機(jī)對(duì)應(yīng)的 xml 文件。

下面是一個(gè)示例 xml 文件,你可以根據(jù)需要手動(dòng)修改它。

XML/HTML Code復(fù)制內(nèi)容到剪貼板
  1. domain type='kvm'>  
  2.      name>alice/name>  
  3.      uuid>f5b8c05b-9c7a-3211-49b9-2bd635f7e2aa/uuid>  
  4.      memory>1048576/memory>  
  5.      currentMemory>1048576/currentMemory>  
  6.      vcpu>1/vcpu>  
  7.      os>  
  8.        type>hvm/type>  
  9.        boot dev='cdrom'/>  
  10.      /os>  
  11.      features>  
  12.        acpi/>  
  13.      /features>  
  14.      clock offset='utc'/>  
  15.      on_poweroff>destroy/on_poweroff>  
  16.      on_reboot>restart/on_reboot>  
  17.      on_crash>destroy/on_crash>  
  18.      devices>  
  19.        emulator>/usr/bin/kvm/emulator>  
  20.        disk type="file" device="disk">  
  21.          driver name="qemu" type="raw"/>  
  22.          source file="/home/dev/images/alice.img"/>  
  23.          target dev="vda" bus="virtio"/>  
  24.          address type="pci" domain="0x0000" bus="0x00" slot="0x04" function="0x0"/>  
  25.        /disk>  
  26.        disk type="file" device="cdrom">  
  27.          driver name="qemu" type="raw"/>  
  28.          source file="/home/dev/iso/CentOS-6.5-x86_64-minimal.iso"/>  
  29.          target dev="hdc" bus="ide"/>  
  30.          readonly/>  
  31.          address type="drive" controller="0" bus="1" target="0" unit="0"/>  
  32.        /disk>  
  33.        interface type='bridge'>  
  34.          source bridge='br0'/>  
  35.          mac address="00:00:A3:B0:56:10"/>  
  36.        /interface>  
  37.        controller type="ide" index="0">  
  38.          address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x1"/>  
  39.        /controller>  
  40.        input type='mouse' bus='ps2'/>  
  41.        graphics type='vnc' port='-1' autoport="yes" listen='0.0.0.0'/>  
  42.        console type='pty'>  
  43.          target port='0'/>  
  44.        /console>  
  45.      /devices>  
  46.    /domain>  

上面的主機(jī)xml配置文件定義了如下的虛擬機(jī)內(nèi)容。

1GB內(nèi)存,一個(gè)虛擬cpu和一個(gè)硬件驅(qū)動(dòng)

磁盤(pán)鏡像:/home/dev/images/alice.img

從 CD-ROM 引導(dǎo)(/home/dev/iso/CentOS-6.5-x86_64-minomal.iso)

網(wǎng)絡(luò):一個(gè)橋接到 br0 的虛擬網(wǎng)卡

通過(guò) VNC 遠(yuǎn)程訪(fǎng)問(wèn)

uuid>/uuid> 中的 UUID 字符串可以隨機(jī)生成。為了得到一個(gè)隨機(jī)的 uuid 字符串,你可能需要使用 uuid 命令行工具。

復(fù)制代碼
代碼如下:

$ sudo apt-get install uuid
$ uuid

生成一個(gè)主機(jī) xml 配置文件的方式就是通過(guò)一個(gè)已經(jīng)存在的虛擬機(jī)來(lái)導(dǎo)出它的 xml 配置文件。如下所示。

復(fù)制代碼
代碼如下:

$ virsh dumpxml alice > bob.xml

第五步:使用命令行啟動(dòng)虛擬機(jī)

在啟動(dòng)虛擬機(jī)之前,我們需要?jiǎng)?chuàng)建它的初始磁盤(pán)鏡像。為此,你需要使用 qemu-img 命令來(lái)生成一個(gè) qemu-kvm 鏡像。下面的命令將會(huì)創(chuàng)建 10 GB 大小的空磁盤(pán),并且它是 qcow2 格式的。

復(fù)制代碼
代碼如下:

$ qemu-img create -f qcow2 /home/dev/images/alice.img 10G

使用 qcow2 格式的磁盤(pán)鏡像的好處就是它在創(chuàng)建之初并不會(huì)給它分配全部大小磁盤(pán)容量(這里是 10 GB),而是隨著虛擬機(jī)中文件的增加而逐漸增大。因此,它對(duì)空間的使用更加有效。

現(xiàn)在,你可以通過(guò)使用之前創(chuàng)建的 xml 配置文件啟動(dòng)你的虛擬機(jī)了。下面的命令將會(huì)創(chuàng)建一個(gè)虛擬機(jī),然后自動(dòng)啟動(dòng)它。

復(fù)制代碼
代碼如下:

$ virsh create alice.xml

Domain alice created from alice.xml
注意: 如果你對(duì)一個(gè)已經(jīng)存在的虛擬機(jī)執(zhí)行了了上面的命令,那么這個(gè)操作將會(huì)在沒(méi)有任何警告的情況下抹去那個(gè)已經(jīng)存在的虛擬機(jī)的全部信息。如果你已經(jīng)創(chuàng)建了一個(gè)虛擬機(jī),你可能會(huì)使用下面的命令來(lái)啟動(dòng)虛擬機(jī)。

復(fù)制代碼
代碼如下:

$ virsh start alice.xml

使用如下命令確認(rèn)一個(gè)新的虛擬機(jī)已經(jīng)被創(chuàng)建并成功的被啟動(dòng)。

復(fù)制代碼
代碼如下:

$ virsh list

 Id    Name                           State
----------------------------------------------------
 3     alice                          running
同樣,使用如下命令確認(rèn)你的虛擬機(jī)的虛擬網(wǎng)卡已經(jīng)被成功的添加到了你先前創(chuàng)建的 br0 網(wǎng)橋中。

復(fù)制代碼
代碼如下:

$ sudo brctl show

遠(yuǎn)程連接虛擬機(jī)

為了遠(yuǎn)程訪(fǎng)問(wèn)一個(gè)正在運(yùn)行的虛擬機(jī)的控制臺(tái),你可以使用VNC客戶(hù)端。

首先,你需要使用如下命令找出用于虛擬機(jī)的VNC端口號(hào)。

復(fù)制代碼
代碼如下:

$ sudo netstat -nap | egrep '(kvm|qemu)'

在這個(gè)例子中,用于 alice 虛擬機(jī)的 VNC 端口號(hào)是 5900。 然后啟動(dòng)一個(gè)VNC客戶(hù)端,連接到一個(gè)端口號(hào)為5900的VNC服務(wù)器。在我們的例子中,虛擬機(jī)支持由CentOS光盤(pán)文件啟動(dòng)。

使用 virsh 管理虛擬機(jī)

下面列出了 virsh 命令的常規(guī)用法:

創(chuàng)建客戶(hù)機(jī)并且啟動(dòng)虛擬機(jī):

復(fù)制代碼
代碼如下:

$ virsh create alice.xml

停止虛擬機(jī)并且刪除客戶(hù)機(jī):

復(fù)制代碼
代碼如下:

$ virsh destroy alice

關(guān)閉虛擬機(jī)(不用刪除它):

復(fù)制代碼
代碼如下:

$ virsh shutdown alice

暫停虛擬機(jī):

復(fù)制代碼
代碼如下:

$ virsh suspend alice

恢復(fù)虛擬機(jī):

復(fù)制代碼
代碼如下:

$ virsh resume alice

訪(fǎng)問(wèn)正在運(yùn)行的虛擬機(jī)的控制臺(tái):

復(fù)制代碼
代碼如下:

$ virsh console alice

設(shè)置虛擬機(jī)開(kāi)機(jī)啟動(dòng):

復(fù)制代碼
代碼如下:

$ virsh autostart alice

查看虛擬機(jī)的詳細(xì)信息:

復(fù)制代碼
代碼如下:

$ virsh dominfo alice

編輯虛擬機(jī)的配置文件:

復(fù)制代碼
代碼如下:

$ virsh edit alice

上面的這個(gè)命令將會(huì)使用一個(gè)默認(rèn)的編輯器來(lái)調(diào)用主機(jī)配置文件。該配置文件中的任何改變都將自動(dòng)被libvirt驗(yàn)證其正確性。

你也可以在一個(gè)virsh會(huì)話(huà)中管理虛擬機(jī)。下面的命令會(huì)創(chuàng)建并進(jìn)入到一個(gè)virsh會(huì)話(huà)中:

復(fù)制代碼
代碼如下:

$ virsh

在 virsh 提示中,你可以使用任何 virsh 命令。

問(wèn)題處理

我在創(chuàng)建虛擬機(jī)的時(shí)候遇到了一個(gè)錯(cuò)誤:

error: internal error: no supported architecture for os type 'hvm'

如果你的硬件不支持虛擬化的話(huà)你可能就會(huì)遇到這個(gè)錯(cuò)誤。(例如,Intel VT或者AMD-V),這是運(yùn)行KVM所必需的。如果你遇到了這個(gè)錯(cuò)誤,而你的cpu支持虛擬化,那么這里可以給你一些可用的解決方案:

首先,檢查你的內(nèi)核模塊是否丟失。

復(fù)制代碼
代碼如下:

$ lsmod | grep kvm

如果內(nèi)核模塊沒(méi)有加載,你必須按照如下方式加載它。

復(fù)制代碼
代碼如下:

$ sudo modprobe kvm_intel (for Intel processor)
$ sudo modprobe kvm_amd (for AMD processor)

第二個(gè)解決方案就是添加 --connect qemu:///system 參數(shù)到 virsh 命令中,如下所示。當(dāng)你正在你的硬件平臺(tái)上使用超過(guò)一個(gè)虛擬機(jī)管理器的時(shí)候就需要添加這個(gè)參數(shù)(例如,VirtualBox,VMware)。

$ virsh --connect qemu:///system create alice.xml
當(dāng)我試著訪(fǎng)問(wèn)我的虛擬機(jī)的登陸控制臺(tái)的時(shí)候遇到了錯(cuò)誤:

復(fù)制代碼
代碼如下:

$ virsh console alice

 error: internal error: cannot find character device null>
這個(gè)錯(cuò)誤發(fā)生的原因是你沒(méi)有在你的虛擬機(jī)配置文件中定義控制臺(tái)設(shè)備。在 xml 文件中加上下面的內(nèi)部設(shè)備部分即可。

XML/HTML Code復(fù)制內(nèi)容到剪貼板
  1. console type='pty'>  
  2.   target port='0'/>  
  3. /console>  

標(biāo)簽:期貨 江蘇 廈門(mén) 商丘 安陽(yáng) 吳忠 達(dá)州 臨沂

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《在Ubuntu的命令行終端里管理KVM虛擬機(jī)的教程》,本文關(guān)鍵詞  在,Ubuntu,的,命令行,終端,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《在Ubuntu的命令行終端里管理KVM虛擬機(jī)的教程》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于在Ubuntu的命令行終端里管理KVM虛擬機(jī)的教程的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章