一、概念介绍

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等函数库和相应的命令行工具。