歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 怎樣在 Ubuntu 和 Debian 中通過命令行管理 KVM

怎樣在 Ubuntu 和 Debian 中通過命令行管理 KVM

日期:2017/2/28 13:54:17   编辑:Linux教程

有很多不同的方式去管理運行在 KVM 管理程序上的虛擬機。例如,virt-manager 就是一個流行的基於圖形界面的前端虛擬機管理工具。然而,如果你想要在沒有圖形窗口的服務器環境下使用 KVM ,那麼基於圖形界面的解決方案顯然是行不通的。事實上,你可以單純使用包裝了 kvm 命令行腳本的命令行來管理 KVM 虛擬機。作為替代方案,你可以使用 virsh 這個容易使用的命令行程序來管理客戶虛擬機。在 virsh 中,它通過和 libvirtd 服務通信來達到控制虛擬機的目的,而 libvirtd 可以控制多個不同的虛擬機管理器,包括 KVM,Xen,QEMU,LXC 和 OpenVZ。

當你想要對虛擬機的前期准備和後期管理實現自動化操作時,像 virsh 這樣的命令行管理工具是非常有用的。同樣,virsh 支持多個管理器也就意味著你可以通過相同的 virsh 接口去管理不同的虛擬機管理器。

在這篇文章中,我會示范怎樣在 Ubuntu 和 debian 上通過使用 virsh 命令行去運行 KVM

第一步:確認你的硬件平台支持虛擬化

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

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

如果在輸出中不包含 vmx 或者 svm 標識,那麼就意味著你的 cpu 不支持硬件虛擬化。因此你不能在你的機器上使用 KVM 。確認了 cpu 支持 vmx 或者 svm 之後,接下來開始安裝 KVM。

對於 KVM 來說,它不要求運行在擁有 64 位內核系統的主機上,但是通常我們會推薦在 64 位系統的主機上面運行 KVM。

第二步:安裝KVM

使用 apt-get 安裝 KVM 和相關的用戶空間工具。

  1. $ sudoapt-get install qemu-kvm libvirt-bin

安裝期間,libvirtd 用戶組(在 debian 上是 libvirtd-qemu 用戶組)將會被創建,並且你的用戶 id 將會被自動添加到該組中。這樣做的目的是讓你可以以一個普通用戶而不是 root 用戶的身份去管理虛擬機。你可以使用 id 命令來確認這一點,下面將會告訴你怎麼去顯示你的組 id:

  1. $ id<your-userID>

如果因為某些原因,libvirt(在 debian 中是 libvirt-qemu)沒有在你的組 id 中被找到,你也可以手動將你自己添加到對應的組中,如下所示:

在 ubuntu 上:

  1. $ sudo adduser [youruserID] libvirtd

在 debian 上:

  1. $ sudo adduser [youruserID] libvirt-qemu

按照如下命令重新載入更新後的組成員關系。如果要求輸入密碼,那麼輸入你的登陸密碼即可。

  1. $ execsu-l $USER

這時,你應該可以以普通用戶的身份去執行 virsh 了。做一個如下所示的測試,這個命令將會以列表的形式列出可用的虛擬機(當前的列表是空的)。如果你沒有遇到權限問題,那意味著到目前為止一切都是正常的。

  1. $ virsh list

  1. IdNameState

第三步:配置橋接網絡

為了使 KVM 虛擬機能夠訪問外部網絡,一種方法是通過在 KVM 宿主機上創建 Linux 橋來實現。創建之後的橋能夠將虛擬機的虛擬網卡和宿主機的物理網卡連接起來,因此,虛擬機能夠發送和接收由物理網卡傳輸的數據包。這種方式叫做網絡橋接。

下面將告訴你如何創建並且配置網橋,我們創建一個網橋稱它為 br0。

首先,安裝一個必需的包,然後用命令行創建一個網橋。

  1. $ sudoapt-get install bridge-utils
  2. $ sudo brctl addbr br0

下一步就是配置已經創建好的網橋,即修改位於 /etc/network/interfaces 的配置文件。我們需要將該橋接網卡設置成開機啟動。為了修改該配置文件,你需要關閉你的操作系統上的網絡管理器(如果你在使用它的話)。跟隨操作指南的說明去關閉網絡管理器。

關閉網絡管理器之後,接下來就是通過修改配置文件來配置網橋了。

  1. #auto eth0
  2. #iface eth0 inet dhcp
  3. auto br0
  4. iface br0 inet dhcp
  5. bridge_ports eth0
  6. bridge_stp off
  7. bridge_fd 0
  8. bridge_maxwait 0

在上面的配置中,我假設 eth0 是主要網卡,它也是連接到外網的網卡,同樣,我假設 eth0 將會通過 DHCP 協議自動獲取 ip 地址。注意,之前在 /etc/network/interfaces 中還沒有對 eth0 進行任何配置。橋接網卡 br0 引用了 eth0 的配置,而 eth0 也會受到 br0 的制約。

重啟網絡服務,並確認網橋已經被成功的配置好。如果成功的話,br0 的 ip 地址將會是 eth0 自動分配的 ip 地址,而且 eth0 不會被分配任何 ip 地址。

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

如果因為某些原因,eth0 仍然保留了之前分配給了 br0 的 ip 地址,那麼你可能必須手動刪除 eth0 的 ip 地址。

第四步:用命令行創建一個虛擬機

對於虛擬機來說,它的配置信息被存儲在它對應的xml文件中。因此,創建一個虛擬機的第一步就是准備一個與虛擬機對應的 xml 文件。

下面是一個示例 xml 文件,你可以根據需要手動修改它。

  1. <domaintype='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. <bootdev='cdrom'/>
  10. </os>
  11. <features>
  12. <acpi/>
  13. </features>
  14. <clockoffset='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. <disktype="file"device="disk">
  21. <drivername="qemu"type="raw"/>
  22. <sourcefile="/home/dev/images/alice.img"/>
  23. <targetdev="vda"bus="virtio"/>
  24. <addresstype="pci"domain="0x0000"bus="0x00"slot="0x04"function="0x0"/>
  25. </disk>
  26. <disktype="file"device="cdrom">
  27. <drivername="qemu"type="raw"/>
  28. <sourcefile="/home/dev/iso/CentOS-6.5-x86_64-minimal.iso"/>
  29. <targetdev="hdc"bus="ide"/>
  30. <readonly/>
  31. <addresstype="drive"controller="0"bus="1"target="0"unit="0"/>
  32. </disk>
  33. <interfacetype='bridge'>
  34. <sourcebridge='br0'/>
  35. <macaddress="00:00:A3:B0:56:10"/>
  36. </interface>
  37. <controllertype="ide"index="0">
  38. <addresstype="pci"domain="0x0000"bus="0x00"slot="0x01"function="0x1"/>
  39. </controller>
  40. <inputtype='mouse'bus='ps2'/>
  41. <graphicstype='vnc'port='-1'autoport="yes"listen='0.0.0.0'/>
  42. <consoletype='pty'>
  43. <targetport='0'/>
  44. </console>
  45. </devices>
  46. </domain>

上面的主機xml配置文件定義了如下的虛擬機內容。

  • 1GB內存,一個虛擬cpu和一個硬件驅動

  • 磁盤鏡像:/home/dev/images/alice.img

  • 從 CD-ROM 引導(/home/dev/iso/CentOS-6.5-x86_64-minomal.iso

  • 網絡:一個橋接到 br0 的虛擬網卡

  • 通過 VNC 遠程訪問

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

  1. $ sudoapt-get install uuid
  2. $ uuid

生成一個主機 xml 配置文件的方式就是通過一個已經存在的虛擬機來導出它的 xml 配置文件。如下所示。

  1. $ virsh dumpxml alice > bob.xml

第五步:使用命令行啟動虛擬機

在啟動虛擬機之前,我們需要創建它的初始磁盤鏡像。為此,你需要使用 qemu-img 命令來生成一個 qemu-kvm 鏡像。下面的命令將會創建 10 GB 大小的空磁盤,並且它是 qcow2 格式的。

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

使用 qcow2 格式的磁盤鏡像的好處就是它在創建之初並不會給它分配全部大小磁盤容量(這裡是 10 GB),而是隨著虛擬機中文件的增加而逐漸增大。因此,它對空間的使用更加有效。

現在,你可以通過使用之前創建的 xml 配置文件啟動你的虛擬機了。下面的命令將會創建一個虛擬機,然後自動啟動它。

  1. $ virsh create alice.xml
  2. Domain alice created from alice.xml

注意: 如果你對一個已經存在的虛擬機執行了了上面的命令,那麼這個操作將會在沒有任何警告的情況下抹去那個已經存在的虛擬機的全部信息。如果你已經創建了一個虛擬機,你可能會使用下面的命令來啟動虛擬機。

  1. $ virsh start alice.xml

使用如下命令確認一個新的虛擬機已經被創建並成功的被啟動。

  1. $ virsh list
  1. IdNameState
  2. ----------------------------------------------------
  3. 3 alice running

同樣,使用如下命令確認你的虛擬機的虛擬網卡已經被成功的添加到了你先前創建的 br0 網橋中。

  1. $ sudo brctl show

遠程連接虛擬機

為了遠程訪問一個正在運行的虛擬機的控制台,你可以使用VNC客戶端。

首先,你需要使用如下命令找出用於虛擬機的VNC端口號。

  1. $ sudonetstat-nap | egrep '(kvm|qemu)'

在這個例子中,用於 alice 虛擬機的 VNC 端口號是 5900。 然後啟動一個VNC客戶端,連接到一個端口號為5900的VNC服務器。在我們的例子中,虛擬機支持由CentOS光盤文件啟動。

使用 virsh 管理虛擬機

下面列出了 virsh 命令的常規用法:

創建客戶機並且啟動虛擬機:

  1. $ virsh create alice.xml

停止虛擬機並且刪除客戶機:

  1. $ virsh destroy alice

關閉虛擬機(不用刪除它):

  1. $ virsh shutdown alice

暫停虛擬機:

  1. $ virsh suspend alice

恢復虛擬機:

  1. $ virsh resume alice

訪問正在運行的虛擬機的控制台:

  1. $ virsh console alice

設置虛擬機開機啟動:

  1. $ virsh autostart alice

查看虛擬機的詳細信息:

  1. $ virsh dominfo alice

編輯虛擬機的配置文件:

  1. $ virsh edit alice

上面的這個命令將會使用一個默認的編輯器來調用主機配置文件。該配置文件中的任何改變都將自動被libvirt驗證其正確性。

你也可以在一個virsh會話中管理虛擬機。下面的命令會創建並進入到一個virsh會話中:

  1. $ virsh

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

問題處理

  1. 我在創建虛擬機的時候遇到了一個錯誤:

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

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

    首先,檢查你的內核模塊是否丟失。

    1. $ lsmod|grep kvm

    如果內核模塊沒有加載,你必須按照如下方式加載它。

    1. $ sudomodprobe kvm_intel (forIntel processor)
    2. $ sudomodprobe kvm_amd (for AMD processor)

    第二個解決方案就是添加 --connect qemu:///system 參數到 virsh 命令中,如下所示。當你正在你的硬件平台上使用超過一個虛擬機管理器的時候就需要添加這個參數(例如,VirtualBox,VMware)。

    1. $ virsh --connect qemu:///system create alice.xml
  2. 當我試著訪問我的虛擬��的登陸控制台的時候遇到了錯誤:

    1. $ virsh console alice
    2. error: internal error: cannot find character device <null>

    這個錯誤發生的原因是你沒有在你的虛擬機配置文件中定義控制台設備。在 xml 文件中加上下面的內部設備部分即可。

    1. <consoletype='pty'>
    2. <targetport='0'/>
    3. </console>

--------------------------------------分割線 --------------------------------------

KVM中Linux虛擬機的硬盤添加方法 http://www.linuxidc.com/Linux/2013-02/80067.htm

Linux入門學習教程:虛擬機體驗之KVM篇 http://www.linuxidc.com/Linux/2015-03/114462.htm

RHEL6 KVM虛擬化創建橋接網卡-網橋 http://www.linuxidc.com/Linux/2013-08/88517.htm

RedHat Linux KVM虛擬機橋接 http://www.linuxidc.com/Linux/2013-02/79934.htm

CentOS 5.6下KVM的安裝/橋接設置/虛擬機創建及運行 http://www.linuxidc.com/Linux/2012-12/76883.htm

Ubuntu下用libvirt安裝KVM虛擬機時找不到/bin/qemu-kvm問題解決 http://www.linuxidc.com/Linux/2013-08/88985.htm

RedHat6.5下安裝配置KVM虛擬機 http://www.linuxidc.com/Linux/2014-10/107972.htm

KVM虛擬化之嵌套虛擬化nested http://www.linuxidc.com/Linux/2015-05/117026.htm

--------------------------------------分割線 --------------------------------------


via: http://xmodulo.com/use-kvm-command-line-debian-ubuntu.html

作者:Dan Nanni 譯者:kylepeng93 校對:Ezio

本文由 LCTT 原創編譯,Linux中國 榮譽推出

Copyright © Linux教程網 All Rights Reserved