一、概念介绍

1、libvirt是Linux上的虚拟化库,是长期稳定的C语言API,支持KVM/QEMU、Xen、LXC等主流虚拟化方案。virsh是libvirt对应的shell命令。

         2、kvm,即Kernel-basedVirtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM目前已成为学术界的主流VMM之一。KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。而Xen早期则是基于软件模拟的Para-Virtualization。

3、vnc既远程访问软件,用于访问创建好的虚拟机。

 

二、配置环境

1、linux debian8.8

2、安装kvm/qemu

$ apt-get install kvm qemu

3、安装libvirt

$ apt-get install libvirt-bin libvirt-dev

4、网桥管理工具

$ apt-get install bridge-utils

5、安装vnc viewer

安装vnc viewer(有win/linux/android)版本,本人是安装在windows下的。

6、查看是否支持虚拟化

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

KVM 是基于 x86 虚拟化扩展(Intel VT 或者 AMD-V) 技术的虚拟机软件,所以查看 CPU 是否支持 VT 技术,就可以判断是否支持KVM。有返回结果,如果结果中有vmx(Intel)或svm(AMD)字样,就说明CPU的支持的。

7、加载kvm 内核

$modprobe kvm

$modprobe kvm-intel

$lsmod | grep kvm#查看内核

 

三、创建虚拟机

 

1、找1个合适的winxp安装镜像(iso)

为何这一步单独拿出讲, 是有原因的。

kvm 的虚拟硬盘的模式是virtio,virtio的性能和稳定性上佳, 但是windows安装盘是找不到virtio模式的虚拟硬盘的, 必须要在安装前先加载virtio的磁盘驱动。

网上也有加载驱动的教程,但是相对麻烦,建议直接下载整合了virtio驱动的windows安装镜像。

2、准备虚拟硬盘文件。

$qemu-img create -f raw /data/my_kvm.raw10G

3、配置虚拟网卡

这里本人的br_eth0信息如下:

HWaddr 20:25:64:80:61:94 

inet addr:10.12.13.20 

Bcast:10.12.255.255 

Mask:255.255.0.0

4、准备和编写1个虚拟机配置文件。(备份,以后可以重用/迁移)

1)        虚拟机cpu数量(非必要,默认是2)

2)        虚拟机内存大小(非必要,默认是2G)

3)        虚拟硬盘文件位置。

4)        winxp安装镜像的位置。

5)        虚拟网络实例的名字( 非必要, /etc/network/interfaces 里新加的br0 如果你用了别的名字的话)

6)        vnc 端口(默认5900,除非你这个端口被占用否则不要改

 

下面定义一个my_kvm.xml用于配置虚拟机:

<domaintype='kvm'>  //如果是Xen,则type=‘xen’

  <name>my_kvm</name> //虚拟机名称,同一物理机唯一

 <uuid>fd3535db-2558-43e9-b067-314f48211343</uuid>  //同一物理机唯一,可用uuidgen生成

  <memory>2048000</memory>

 <currentMemory>2048000</currentMemory>  //memory这两个值最好设成一样

  <vcpu>2</vcpu>            //虚拟机可使用的cpu个数,查看物理机可用CPU个数:cat /proc/cpuinfo |grep processor | wc-l

  <os>

   <type arch='x86_64' machine='pc-1.3'>hvm</type>//arch指出系统架构类型,machine 则是机器类型,查看机器类型:qemu-system-x86_64 -M ?

   <boot dev='cdrom'/>  //启动介质,第一次需要装系统可以选择cdrom光盘启动

   <bootmenu enable='yes'/>  //表示启动按F12进入启动菜单

  </os>

  <features>

   <acpi/>  //Advanced Configuration and Power Interface,高级配置与电源接口

   <apic/>  //Advanced Programmable Interrupt Controller,高级可编程中断控制器

   <pae/>   //Physical Address Extension,物理地址扩展

  </features>

  <clock offset='localtime'/>  //虚拟机时钟设置,这里表示本地本机时间

 <on_poweroff>destroy</on_poweroff>  //突发事件动作

  <on_reboot>restart</on_reboot>

  <on_crash>restart</on_crash>

  <devices>   //设备配置/

  <emulator>/usr/bin/kvm</emulator> //如果是Xen则是/usr/lib/xen/binqemu-dm

   <disk type='file' device='disk'> //硬盘

      <driver name='qemu' type='raw'/>

      <source file='/data/my_kvm.raw'/>

      <target dev='hda' bus='ide'/>  // if windows must ide   else virtio

 

   </disk>

   <disk type='file' device='cdrom'>

      <driver name='qemu' type='raw'/>

      <source file='/data/iso/win_xp.iso'/>

      <target dev='hdc' bus='ide'/>

<readonly/>

   </disk>

  

   /* 利用Linux网桥连接网络 */

   <interface type='bridge'>

      <sourcebridge="br_eth0"/>//配置的网桥网卡名称

      <macaddress="52:54:42:73:b7:94"/>

      <model type="rtl8139"/>

   </interface>

 

  <graphics type='vnc' port='-1'autoport='yes'>  //配置vnc,windows下可以使用vncviewer登录,获取vnc端口号:virsh dumpxml my_kvm | grep “vnc”

   <listen type='address'address='0.0.0.0'/>

  </graphics>

  </devices>

</domain>

5、基于这个配置文件创建1个虚拟机

    1)创建虚拟机

$virsh create my_kvm.xml

2)查看是否运行

$virsh list

6、安装winxp到虚拟机

在vnc viewer输入网址+端口打开,这时你已经见到winxp的安装界面了。之后安装也就是几个下一步的事情,安装完成后,设置ip,这里要与宿主机设置在同一个网段,这样就可以通过桥接访问外网,

7、维护这个虚拟机.(start/shutdown/update..)

马上检查ip是否同一网段, 如果是, 则开启远程桌面服务。以后就可以通过远程桌面访问了, 丢下不好用的vnc viewer。

 

四、制作模板

 

模板虚拟机安装好之后,停止该虚拟机,复制制作过程如下:(以本人second.xml为例)

下面的目录都是根据个人习惯,使用者也可以根据自己的习惯设计目录结构。

 

1、新建/data/xml目录下second.xml:

<domaintype='kvm'> 

  <name>second</name>

  <uuid>fd3535db-2558-43e9-b067-314f48311345</uuid>//uuid要做相应的修改 <memory>2048000</memory>

 <currentMemory>2048000</currentMemory>

  <vcpu>2</vcpu>

  <os>

   <type arch='x86_64'machine='pc-1.3'>hvm</type>

   <boot dev='cdrom'/>    

<bootmenuenable='yes'/> 

 </os>

  <features>

   <acpi/>   

<apic/>  

<pae/>  

  </features>

  <clock offset='localtime'/> 

<on_poweroff>destroy</on_poweroff>

  <on_reboot>restart</on_reboot>

  <on_crash>restart</on_crash>

  <devices> 

  <emulator>/usr/bin/kvm</emulator>

   <disk type='file' device='disk'>

      <driver name='qemu' type='qcow2'/>

      <source file='/data/moudles/my_kvm.qcow2'/>

      <target dev='hda' bus='ide'/>

   </disk>

    <interfacetype='bridge'>

      <sourcebridge="br_eth0"/>

      <mac address="52:54:42:73:b7:96"/>

      <model type="rtl8139"/>

   </interface>

 

  <graphics type='vnc' port='-1'autoport='yes'>

   <listen type='address'address='0.0.0.0'/>

  </graphics>

  </devices>

</domain>

2、复制镜像文件,再存放做好的镜像的目录下,本人的是data,克隆镜像,克隆出来的文件非常小只有几MB,这里为了管理方便,将镜像和xml配置文件分开存放。在这里已经制作出了新的模板my_kvm.raw,拷贝到/data/modules下:

    cp my_kvm.raw moudles/my_kvm.img

进入/data/moudles目录下,制作模板快照(注意:这里制作镜像需要qcow2格式):

qemu-img create -f qcow2 my_kvm.qcow2-o backing_file=my_kvm.img

3、创建虚拟机  

进入到/data/xml目录下

virsh create second.xml

 

五、总结

 

         通过此次kvm虚拟机的创建工作,我了解到如何在linux安装windows虚拟机,而不是之前在windows Vmware中安装linux虚拟机的按键式操作。利用xml配置文件简化了kvm虚拟机的创建,但是需要了解网络的配置、端口、mac地址等概念的实际运用。利用virsh操作虚拟机更加方便快捷。

理论和实践相结合,首先了解虚拟机的原理,然后了解虚拟软件,然后了解虚拟机管理软件,然后就更上层的虚拟机调度;总的来说kvm和qemu就是虚拟软件,负责创建和运行虚拟机,但是却不能很方便的管理多个虚拟机的实例,为了更加方便的管理虚拟机,所有出现了libvirt和virsh等函数库和相应的命令行工具。 

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐