|
|
51CTO旗下网站
|
|
移动端

如何在Debian或Ubuntu上从命令行使用KVM?

如果你想让虚拟机的配置和管理实现自动化,virsh等命令行管理界面也大有用处。本教程中将演示如何在Debian或Ubuntu上使用virsh,从命令行运行KVM。

作者:布加迪编译来源:51CTO.com|2014-04-10 10:10

【51CTO精选译文】眼下有几种不同的方法可以管理在KVM虚拟机管理程序上运行的虚拟机。比如说,virt-manager就是一种广受欢迎的基于图形用户界面(GUI)的前端工具,可用来管理虚拟机。不过,如果你想在无外设服务器上使用KVM,那么基于GUI的解决方案并非理想方案。这时候,virsh就派得上用场。virsh是一种命令行工具,可用于管理来宾虚拟机(guest VM)。就其底层而言,virsh依赖libvirtd服务,该服务可以控制几种不同的虚拟机管理程序,其中包括KVM、Xen、QEMU、LXC和OpenVZ。

如果你想让虚拟机的配置和管理实现自动化,virsh等命令行管理界面也大有用处。此外,virsh支持多种虚拟机管理程序,这就意味着你可以通过同一个virsh界面,管理不同的虚拟机管理程序。

我在本教程中将演示如何在Debian或Ubuntu上使用virsh,从命令行运行KVM。

第一步:证实主机支持硬件虚拟化

作为第一步,证实主机的处理器配备硬件虚拟化扩展机制(比如英特尔VT或AMD-V),KVM需要这样的机制。下面这个命令就能证实一点。

  1. $ egrep '(vmx|svm)' --color /proc/cpuinfo 
  2. flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc up arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt aes xsave avx f16c rdrand hypervisor lahf_lm ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi ept vpid fsgsbase smep 

如果输出结果并不含有vmx或svm标记,这意味着主机的处理器没有支持硬件虚拟化的功能。因而,你就无法在主机上使用KVM。证实了主机处理器随带vmx或svm后,接下来继续安装KVM。

第二步:安装KVM

使用apt-get,安装KVM及相关的用户空间工具。

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

下一步,将你的用户ID添加到libvirt群组,那样你就能以非root普通用户的身份,管理虚拟机了。作为上面安装KVM的一部分,必须创建libvirt群组。

  1. $ sudo adduser [youruserID] libvirt 

重新装入更新后的群组成员信息,如下所示。看到要求输入密码的提示后,输入你的登录密码。

  1. $ exec su -l $USER 

这时候,你应该能够以普通用户的身份运行virsh了。为了测试一下,不妨试一试下面这个命令,它会列出可用的虚拟机(目前没有一个虚拟机)。要是你没有遇到权限错误,这意味着到目前为止,一切正常。

  1. $ virsh --connect qemu:///system list 
  2. Id    Name                           State 

第三步:配置桥接网络

想让虚拟机能够访问外部网络,一个办法就是通过在Linux主机上加以配置的Linux网桥。这种技术名为桥接网络(bridged networking)。下面介绍如何创建及配置Linux网桥br0,以便与KVM实现桥接网络。

首先,安装必要的程序包,然后从命令行创建Linux网桥。

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

下一步是,在/etc/network/interfaces中配置Linux网桥,那样一旦主机启动,该网桥就会自动配置。想使用/etc/network/interfaces,你就要禁用系统上的Network Manager(网络管理器),如果你在使用它的话。按这里给出的指示(http://xmodulo.com/2014/02/disable-network-manager-linux.html)操作,以禁用网络管理器。

禁用了网络管理器后,接下来在/etc/network/interfaces中配置Linux网桥br0,如下所示。

  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/interface中没有etho的配置。etho网桥受制于br0时,Linux网桥br0接过eth0的配置。

重启网络服务,证实Linux网桥已成功配置。如果配置成功,br0应该被赋予eth0的DHCP IP地址,eth0应该没有被赋予任何IP地址。

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

第四步:从命令行创建虚拟机

就KVM而言,虚拟机的配置存储在一个域XML文件中。因而,创建虚拟机的第一步是准备好域XML文件。

下面是虚拟机的域XML文件示例。需要的话,你可以使用并定制该域XML文件。

  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/ubuntu-13.10-server-amd64.iso"/> 
  29. <target dev="hdc" bus="ide"/> 
  30. <readonly/> 
  31. <address type="drive" controller="0" bus="1" target="0" unit="0"/> 
  32. </disk> 
  33. <controller type="ide" index="0"> 
  34. <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x1"/> 
  35. </controller> 
  36. <interface type='bridge'> 
  37. <mac address='52:54:aa:00:f0:51'/> 
  38. <source bridge='br0'/> 
  39. </interface> 
  40. <input type='mouse' bus='ps2'/> 
  41. <graphics type='vnc' port='-1' autoport="yes" listen='127.0.0.1'/> 
  42. </devices> 
  43. </domain> 

上面这个域XML文件定义了下面这个虚拟机。

  • 1GB内存、一个虚拟处理器和一只硬驱。
  • 磁盘映像:/home/dev/images/alice.img
  • 从光盘驱动器启动(/home/dev/iso/ubuntu-13.10-server-amd64.iso)。
  • 网络:通过br0实现桥接网络。

<uuid></uuid>里面的UUID字符串可以随机生成。想获得一个随机性的UUID,你可以使用uuid命令行工具。

  1. $ sudo apt-get install uuid 
  2. $ uuid 

创建域XML文件的另一个方法是,转储现有虚拟机的域信息,如下所示。

  1. $ virsh --connect qemu:///system dumpxml alice > bob.xml 

第五步:从命令行启动虚拟机

在创建虚拟机之前,你需要创建虚拟机的初始磁盘映像。为此,你可以使用qemu-img命令,之前安装的qemu-kvm程序包随带该命令。

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

使用qcow2作为一种磁盘映像格式的优点在于,磁盘映像起初并不是以最大值(5GB)的形式创建,不过随着磁盘被批量装入数据,可以慢慢变大。

现在你准备好了使用之前创建的那个域XML文件,启动虚拟机了。下面这个命令会启动虚拟机。

  1. $ virsh --connect qemu:///system create alice.xml 
  2. Domain alice created from alice.xml 

证实一个新的域已成功创建。

  1. $ virsh --connect qemu:///system list 
  2. Id    Name                           State 
  3. -------------------------------------------------------------- 
  4. 3     alice                          running 

此外,还要证实该虚拟机(比如vnet0)的虚拟接口已成功添加到之前创建的Linux网桥br0。

  1. $ sudo brctl show 

第六步:远程访问虚拟机

想远程访问运行中虚拟机的控制台,你可以使用任何VNC客户程序。

首先,找到该虚拟机的VNC端口号,如下所示。

  1. $ sudo netstat -nap | grep kvm 

在该示例中,alice虚拟机的VNC端口号是5900。

然后启动VNC客户程序,并连接到在<KVM-host-IP>:5900处运行的VNC服务器。

借助virsh管理虚拟机

下面列出了virsh命令的一些常见用法。

想创建一个新的来宾域,并启动虚拟机:

$ virsh --connect qemu:///system create alice.xml

想终止虚拟机,销毁来宾域:

  1. $ virsh --connect qemu:///system destroy alice 

想关闭虚拟机(但不销毁域):

  1. $ virsh --connect qemu:///system shutdown alice 

想暂停虚拟机:

  1. $ virsh --connect qemu:///system suspend alice 

想恢复运行暂停的虚拟机:

  1. $ virsh --connect qemu:///system resume alice 

主机一启动,就想自动启动虚拟机:

  1. $ virsh --connect qemu:///system autostart alice 

想获得虚拟机的域信息:

  1. $ virsh --connect qemu:///system dominfo alice 

你还可以从virsh会话里面管理虚拟机。想创建并进入新的virsh会话,只要运行:

  1. $ virsh --connect qemu:///system 

出现virsh提示符后,你就可以使用任何virsh命令了。

原文链接:http://xmodulo.com/2014/02/use-kvm-command-line-debian-ubuntu.html

【编辑推荐】

  1. 12款最佳Linux命令行终端工具
  2. 如何在老机器上加速运行 Ubuntu Linux?
  3. Ubuntu Server 安装部署 Cacti 服务器监控
  4. Linux 性能监控的18个命令行工具
【责任编辑:黄丹 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

活学活用 Ubuntu Server

活学活用 Ubuntu Server

实战直通车
共35章 | UbuntuServer

223人订阅学习

Java EE速成指南

Java EE速成指南

掌握Java核心
共30章 | 51CTO王波

85人订阅学习

Mysql DBA修炼之路

Mysql DBA修炼之路

MySQL入门到高阶
共24章 | 51CTO叶老师

479人订阅学习

读 书 +更多

无懈可击的Web设计

一个网站,无论视觉上多美观或者内容多丰富,如果它不能适应各种浏览情况并能面向尽可能广泛的用户群,那它就不算是真正成功的网站。本书提...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客