1、前言

目前正在涉足云计算IaaS工作,虚拟化是IaaS的重要部分,因此这段时间对各个虚拟机化技术和工具进行研究,研究的目的不仅仅是为了会使用这个工具,而是通过研究了解技术的实现机制和原理,即知其然也要知其所以然,本文主要算是本人进入这个技术领域的入门的开始,在记录自己的进展的同时,希望对有类似追求的同仁有所帮助。为了更明晰各个步骤,安装步骤不采用图形方式。

KVM(不是键盘、显示器、鼠标)是一个基于Linux内核的虚拟化工具,具体的原理正在研究。

闲话少说,言归正传:

2、试验环境

硬件:Dell PowerEdge 2CPU 8G MEM

操作系统:Centos 5.5

hypervisor:kvm(Kenerl-based virtulization machine)

3、安装步骤

3.1 操作系统安装

这个步骤就不多说了,需要注意的是在安装过程中,选择定制功能,在Virtualization下选择kvm,因为在centos5.5下,虚拟化默认支持xen,安装完成后,建立虚拟化所需要的包如kvm、kvm-qemu、libvirt、Python等,会自动安装。

安装完成后,可以使用virsh命令检查一下虚拟化环境是否正常,具体命令如下:

virsh -c qemu:///system list

如果显示一个空列表,说明运行正常。

注:virsh命令是libvirt库提供的一个命令行工具,可以用来管理虚拟机。libvirt是什么?呵呵,这个可是个重要的东东,我将专门用一篇文章进行说明。

3.2 网络配置

操作系统安装完成支持虚拟化相关包后,会自动建立一个名称为virbr0的虚拟网桥,在多网卡情况下,此网桥默认与eth1网卡绑定。为了向虚拟机提供联网功能,KVM使用virbr0作为默认网络设备,因此在实际应用中,需要将virbr0与连接到实际网络的网卡绑定,例如我的是eth0。

具体方法是修改/etc/sysconfig/network-scripts目录下的网卡配置文件,如绑定etho,则修改ifcfg-eth0 和ifcfg-virbr0

修改后的配置文件内容如下:

1)ifcfg-eth0

DEVICE=eth0
      ONBOOT=yes
      BRIDGE=virbr0
      BOOTPROTO=dhcp
      TYPE=Ethernet

2)ifcfg-virbr0
      
      DEVICE=virbr0
      TYPE=Bridge 
      ONBOOT=yes
      DELAY=0
      BOOTPROTO=none
      IPADDR=10.100.0.3
      NETMASK=255.255.255.0
      GATEWAY=10.100.0.254

修改完成后,重新启动网络服务:service network restart
   默认的virbr0设置保存在/etc/libvirt/qemu/networks目录下,里面有一个default.xml文件,里面是virbr0的默认配置。

注:虚拟网桥由bridge-utils包中的brctl工具建立,这个包在安装虚拟化相关的包后自动安装, 使用brctl addbr 网桥名称可以增加网桥,使用brctl show显示已有网桥

3.3 建立虚拟机使用的文件

服务器上建立虚拟机的机制与在PC机上使用VMware Workstation、VirtualBox建立虚拟机类似,每个虚拟机均使用一个物理文件保存其安装的系统,模拟成磁盘,用来安装guest 操作系统,此文件可以先建好并格式化为一个专门的虚拟化文件格式(如qcow2),也可以在建立虚拟机的过程中指定,由虚拟机构建程序自动生成。

虚拟机使用的文件可以先以qemu-img命令先建好,也可以在通过使用virt-manager 、 virt-install建立虚拟机时建立,下面是使用qemu-img的语法:

qemu-img create -f qcow2 win7.img 20G     <---建立一个格式为qcow2、大小为20G的文件 
   
   建立完成后,显示:Formatting 'win7.img', fmt=qcow2, size=20971520 kB

   可以使用下面的命令检查文件格式:
   
A、file win7.img
Win7.img: x86 boot sector; partition 1: ID=0x7, active, starthead 32, startsector 2048, 204800 sectors; partition 2: ID=0x7, starthead 223, startsector 206848, 40751104 sectors
B、qemu-img info win7.img
      image: VM-Win7-1.img
      file format: raw
      virtual size: 20G (20971520000 bytes)
      disk size: 20G
备注:虚拟文件的格式有许多种,将在独立的文章中说明和分析。

3.4 建立虚拟机

完成上述的准备后,可以建立虚拟机了,这里使用virt-install命令完成本项工作。命令如下:

virt-install --name VM-Win7-2 \
                --hvm      \
                --ram 512  \
                --vcpus 2        \
                --disk path=/opt/images/win7.img,size=20 \
                --network network:default --accelerate \
                --vnc --vncport=5911 \
                --os-variant rhel5.4 \
                --cdrom /opt/ISO/windows7.iso -d
   
各个参数的意义如下 :
    
    --name   虚拟机名称
    --hvm     使用全虚拟化(与para-irtualization向对),如果在一个主机上para和full virtulization均可用,连接到没有硬件虚拟化支持的机器的xen hypervisor,这个 参数无效,这个参数意味着连接到基于qemu的hypervisor
    --ram     虚拟机内存大小
    --vcpus   虚拟机虚拟CPU个数
    --disk    虚拟机使用的磁盘(文件)的路径,本例中使用第3步中建立的文件,文件放置在/opt/images目录下
    --network 网络设置,使用默认设置即可,默认设置为使用第1步中说明的virbr0网桥
    --vnc     设置连接桌面环境的vnc端口,本例是5911
    --os-variant  指示为一个特定的操作系统变体(或版本)进一步优化客户机(guest)配置
    --cdrom   设置光驱获取虚拟光驱文件的路径 -d 指示从光驱启动( -c 指示从硬盘启动)

上面命令执行后,显示一连串提示,主要是建立虚拟机的进度和根据命令参数形成的虚拟机配置,虚拟机配置文件用xml文件存储,通过查看这个过程,能够对建立虚拟机过程有个比较直观的了解,下面是上述命令的的输出:

Thu, 17 Nov 2011 18:19:49 DEBUG    Requesting libvirt URI default              说明:请求连接默认URI,基于kvm hypervisor URI为 qemu:///system
Thu, 17 Nov 2011 18:19:49 DEBUG    Received libvirt URI 'qemu:///system'
Thu, 17 Nov 2011 18:19:49 DEBUG    Requesting virt method 'hvm' 说明:使用full虚拟化
Thu, 17 Nov 2011 18:19:49 DEBUG    Received virt method 'hvm'
Thu, 17 Nov 2011 18:19:49 DEBUG    Hypervisor name is 'kvm'
Thu, 17 Nov 2011 18:19:49 DEBUG    parse_disk: returning ('/opt/images/win7.img', None, None, 'disk', None, False, False, 20.0, True, None)
Thu, 17 Nov 2011 18:19:49 DEBUG    Setting os type to 'linux' for variant 'rhel5.4' 说明:设置基于rhel linux变体进行优化
Thu, 17 Nov 2011 18:19:49 DEBUG    DistroInstaller location is a local file/path: /opt/ISO/windows7.iso
Thu, 17 Nov 2011 18:19:49 DEBUG    Setting size for existing storage to '2.38835525513'
Thu, 17 Nov 2011 18:19:49 DEBUG    Detected storage as type 'file'     
     
Starting install...
Thu, 17 Nov 2011 18:19:49 DEBUG    Setting size for existing storage to '2.38835525513'
Thu, 17 Nov 2011 18:19:49 DEBUG    Detected storage as type 'file'
Creating storage file...                                                                                                                        |  20 GB     00:00    
    Thu, 17 Nov 2011 18:19:49 DEBUG    Creating guest from:
  
      <domain type='kvm'>                --说明:以下是虚拟机的配置文件,术语“domain”指虚拟机
        <name>VM-Win7-2</name>
        <currentMemory>524288</currentMemory>
        <memory>524288</memory>
        <uuid>8da64796-97aa-a6ae-5ecb-30a312139c19</uuid>
        <os>
          <type arch='x86_64'>hvm</type>
          <boot dev='cdrom'/>
        </os>
        <features>
          <acpi/><apic/><pae/>
        </features>
        <clock offset="utc"/>
        <on_poweroff>destroy</on_poweroff>
        <on_reboot>destroy</on_reboot>
        <on_crash>destroy</on_crash>
        <vcpu>2</vcpu>
        <devices>
          <emulator>/usr/libexec/qemu-kvm</emulator>
          <console type='pty'/>
          <disk type='file' device='disk'>
            <driver name='qemu' cache='none'/>
            <source file='/opt/images/win7.img'/>
            <target dev='vda' bus='virtio'/>
          </disk>
          <disk type='file' device='cdrom'>
            <source file='/opt/ISO/windows7.iso'/>
            <target dev='hdc' bus='ide'/>
            <readonly/>
          </disk>
          <interface type='network'>
            <source network='default'/>
            <mac address='54:52:00:1b:bc:d0'/>
            <model type='virtio'/>
          </interface>
          <input type='mouse' bus='ps2'/>
          <graphics type='vnc' port='5911' keymap='en-us'/>
        </devices>
      </domain>
     
      Creating domain...                                                                                                                              |    0 B     00:01    
      Thu, 17 Nov 2011 18:19:50 DEBUG    Created guest, looking to see if it is running 说明:建立完成guest,查看其是否正在运行
      Thu, 17 Nov 2011 18:19:50 DEBUG    Launching console callback
      Thu, 17 Nov 2011 18:19:50 DEBUG    Saving XML boot config:
      <domain type='kvm'>
        <name>VM-Win7-2</name>
        <currentMemory>524288</currentMemory>
        <memory>524288</memory>
        <uuid>8da64796-97aa-a6ae-5ecb-30a312139c19</uuid>
        <os>
          <type arch='x86_64'>hvm</type>
          <boot dev='hd'/>
        </os>
        <features>
          <acpi/><apic/><pae/>
        </features>
        <clock offset="utc"/>
        <on_poweroff>destroy</on_poweroff>
        <on_reboot>restart</on_reboot>
        <on_crash>restart</on_crash>
        <vcpu>2</vcpu>
        <devices>
          <emulator>/usr/libexec/qemu-kvm</emulator>
          <console type='pty'/>
          <disk type='file' device='disk'>
            <driver name='qemu' cache='none'/>
            <source file='/opt/images/win7.img'/>
            <target dev='vda' bus='virtio'/>
          </disk>
          <disk type='file' device='cdrom'>
            <target dev='hdc' bus='ide'/>
            <readonly/>
          </disk>
          <interface type='network'>
            <source network='default'/>
            <mac address='54:52:00:1b:bc:d0'/>
            <model type='virtio'/>
          </interface>
          <input type='mouse' bus='ps2'/>
          <graphics type='vnc' port='5911' keymap='en-us'/>
        </devices>
      </domain>
     
     
      (virt-viewer:10164): Gtk-WARNING **: cannot open display: 
      Thu, 17 Nov 2011 18:19:53 DEBUG    Domain state after install: 1
      Domain installation still in progress. You can reconnect to
      the console to complete the installation process.      

后面的错误指示virt-viewer 不能通过 5911连接vnc,这与vnc的设置有关,但是这不影响虚拟机继续安装操作系统和运行,通过这个错误可以看到virt-install在生产虚拟机的最后调用virt-viewer打开虚拟机图形界面,进行操作系统的安装,可以通过vnc或者virt-manager打开虚拟机图形界面,继续完成guest操作系统的安装即可,vnc可以安装realVNC。

通过vnc客户端或者virt-manager连接到新建立的虚拟机,继续进行虚拟机内操作系统的安装,安装过程与在物理机上安装相同,不在赘述。安装完操作系统后,就像拥有了另一台机器一样,通过VNC远程连接(如果装的是Windows操作系统,也可以使用RDP进行连接,就windows那个远程桌面连接)可以进行相关操作了。

4、总结

在配置虚拟机的过程中

1)上述工作,在virt-manager中可以通过图形向导界面也可以完成,virt-manager可以通过在终端中输入virt-manager或者从菜单应用程序->系统工具中打开

2)使用qemu-kvm 命令也可以建立虚拟机【libvirt api中应该也提供了类似的函数,openstack、eucalyptus之类的虚拟机管理(也称为云计算管理)工具调用这个函数建立虚拟机】

命令如下:
        qemu-kvm -m 1024 -localtime -M pc -smp 1 -drive file=/opt/images/Win7.img,cache=writeback,boot=on -net nic,macaddr=52:54:00:12:34:80 -net tap -cdrom /opt/ISO/Windows7.iso -boot d -name win7,process=kvm-win7 -vnc :2 -usb -usbdevice tablet

参数说明如下:
              -m 1024  设置虚拟系统内存1024MB
              -localtime  使虚拟系统与宿主系统时间一致
              -M pc  虚拟系统类型为pc
              -smp 1  1个CPU
              -drive file=Windows7_x86.img,cache=writeback,boot=on
                     硬盘选项,虚拟磁盘是Windows7_x86.img,cache方式为writeback,可引导型磁盘。
              -net nic,macaddr=52:54:00:12:34:80  网卡选项,手工指定mac地址。
              -net tap  tap类型网络,相当于“桥模式”
              -cdrom Windows7.iso  光驱
              -boot d  启动顺序。d代表光驱。
              -name kvm-win7,process=kvm-win7  为虚拟机取名,便于识别
              -vnc :2  这里是通过vnc连接控制窗口,这里是在5902端口。
              -usb -usbdevice tablet  启用usb设备中的tablet功能。开启该功能可使虚拟机内外的鼠标同步

参数与virt-install基本相同。
 
        在安装了磁盘和网卡的半虚拟化驱动后,可以在-drive中加入if=virtio使用磁盘半虚拟化,在-net nic中加入model=virtio使用网卡半虚拟化驱动。virio在kenerl 2.6.24以上版本才能更好的发挥效用。

3)其实无论用哪种方法建立的基于kvm的虚拟机,都由qemu-kvm进行启动和管理,下面是查看liunx进程显示的一个虚拟机进程:

qemu-kvm -S -M rhel5.4.0 -m 1024 -smp 2 -name VM-win7 -uuid 71c4020b-ca54-20f2-780c-ec9fa070aa84 -no-kvm-pit-reinjection -monitor pty -pidfile /var/run/libvirt/qemu//VM-ubuntu-1104.pid -boot c -drive file=/opt/images/ubuntu-11.04-desktp.img,if=virtio,index=0,boot=on,cache=none -drive file=,if=ide,media=cdrom,index=2 -net nic,macaddr=54:52:00:0a:55:05,vlan=0,model=virtio -net tap,fd=17,script=,vlan=0,ifname=vnet0 -serial pty -parallel none -usb -vnc 0.0.0.0:11 -k en-us

一个虚拟机占用一个进程,可以通过进程管理和控制虚拟机。

4)虚拟机个相关配置保存在一个配置文件中,因此可以手工可以编写一个配置文件,然后通过virsh命令行构建虚拟机,已建好的虚拟机,配置文件更改后,需要用virsh define重新定义后才能生效。

5)基于KVM建立的虚拟机相关文件默认存放位置
         kvm虚拟机配置文件位置/etc/libvirt/qemu/      <---都是xml文件
         kvm虚拟机文件位置:var/lib/libvirt/images/   <---可以在建立虚拟机时指定

6)建立的虚拟机在运行时相关文件及存放位置
        在虚拟机运行时,会在/var/run/libvirt/qemu目录下存放虚拟机的pid文件和配置文件,配置文件与/etc/libvirt/qemu目录下对应的虚拟机文件相同,pid文件保存有此虚拟机进程号。虚拟机的日志文件存放在/var/log/libvirt/qemu目录下,每个虚拟机一个,文件名称为:虚拟机名称(或UUID)+“.log”

7)qemu不使用linux下的vncserver提供vnc服务,因此在此服务没有启动的情况下,也能通过vnc客户端连接到虚拟机。

通过上面的配置验证,说明在服务器上的虚拟化与桌面上的虚拟化在原来上基本相同,都是通过相关配置构建一个虚拟机,这个虚拟机的各类外设如磁盘、内存、CPU、网卡等通过都是对物理资源虚拟而获得,形成一个逻辑上的计算机,并通过一个文件进行保存。区别是桌面上的虚拟化采用的是软件模拟,服务器上则实现机制很多,由不依赖与操作系统(bare metal)的VMware ESX、Microsoft Hyper-V,也有与操作系统集成的kvm,还有同时提供bare metal机制,又需要一个操作系统对虚拟机进行管理的xen等,这些东西都称之为hypervisor。其实对于用户来说都是透明的,他们不需要知道其使用的虚拟机是采用何种方式实现的。

http://blog.csdn.net/starshine/article/details/6990599

基于KVM建立虚拟机的步骤及总结说明的更多相关文章

  1. 基于KVM的虚拟机创建

    KVM基本介绍:   KVM是Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中,KVM目前 ...

  2. 基于KVM的虚拟化研究及应用

    引言 虚拟化技术是IBM在20世纪70年代首先应用在IBM/370大型机上,这项技术极大地提高了大型机资源利用率.随着软硬件技术的迅速发展,这项属于大型机及专利的技术开始在普通X86计算机上应用并成为 ...

  3. 基于KVM、Xen、OpenVZ等虚拟化技术的WEB在线管理工具

    1.Proxmox proxmox是一个开源的虚拟化管理平台,支持集群管理和HA.在存储方面,proxmox除了支持常用的lvm,nfs,iscsi,还支持集群存储glusterfs和ceph,这也是 ...

  4. kvm libvirt 虚拟机管理

    http://www.2cto.com/os/201203/123128.html kvm虚拟机管理一.环境role         hostname    ip                  O ...

  5. .NET Core微服务之基于IdentityServer建立授权与验证服务

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.IdentityServer的预备知识 要学习IdentityServer,事先得了解一下基于Token的验证体系,这是一个庞大的主题 ...

  6. VM 操作系统实例化(基于 KVM 的虚拟化研究及应用--崔泽永(2011))的论文笔记

    一.VM操作系统实例化 1.建立虚拟磁盘镜像 虚拟磁盘镜像在逻辑上是提供给虚拟机使用的硬盘, 在物理上可以是 L inux系 统内一普通镜像文件, 也可以是真实的物理磁盘或分区. 本方案设计中将虚拟机 ...

  7. 1-安装kvm及虚拟机

    安装KVM及虚拟机 1.       创建lvm 2.       安装kvm相关的包 需要安装的包 安装好后,进入系统,发现没有eth0 然后重启网络 然后就看到了eth0,以及ip 挂载光盘 ' ...

  8. .NET Core微服务之基于IdentityServer建立授权与验证服务(续)

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 上一篇我们基于IdentityServer4建立了一个AuthorizationServer,并且继承了QuickStartUI,能够成功 ...

  9. [qemu][kvm] 在kvm嵌套kvm的虚拟机里启动kvm加速

    常规情况下,如果在kvm的虚拟机里,又想使用kvm的虚拟机,会报如下的错误信息: [root@host0 nlb]# Could not access KVM kernel module: No su ...

随机推荐

  1. log4j异常问题

    log4j:WARN No appenders could be found for logger   转自:最爱NBA 直接写我的解决办法:在src下面新建file名为log4j.propertie ...

  2. 浅谈C中的指针和数组(二)

    原文转载地址:http://see.xidian.edu.cn/cpp/html/475.html 在原文的基础上增加自己的想法作为修改 很多初学者弄不清指针和数组到底有什么样的关系.我现在就告诉你: ...

  3. Linux学习之nfs实例

    在对exports文件进行了正确的配置后,就可以启动NFS服务器了. 1.启动NFS服务器 为了使NFS服务器能正常工作,需要启动portmap和nfs两个服务,并且portmap一定要先于nfs启动 ...

  4. 关于wireshark的两个抓包过滤显示的基本语法

    关于wireshark的两个基本语法 关于wireshark的两个基本语法 1. Capture Filters 语法:<Protocol name><Direction>&l ...

  5. javaTemplates-学习笔记四

    应用的调用顺序理解 这个地方很薄弱,浏览器 http://localhost:9000/index.html  ->  conf/routes  ->  app/controllers/A ...

  6. struts2笔记03-ActionContext

    1.概念 ActionContext是action的上下文,它包括action执行所需要的对象.struts2对每一个action都会创建一个新的ActionContext实例,同Action一样,是 ...

  7. 使用verilog实现4选1数据选择器的几种方法

    第一种方法module mux( d1, d2, d3, d4, se1, se2, dout ); input d1; input d2; input d3; input d4; input se1 ...

  8. html中上标、下标、删除字、小号字等

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. cad实时平移快捷键

    1.按住鼠标滚轮,光标变成小手工具,可拖动画布 2.键盘按 p,光标变成小手工具

  10. Get Intellisense for .axml files in Visual Studio

    原文Get Intellisense for .axml files in Visual Studio So in order to get some intellisense support for ...