特殊事件处理篇

利用 Xen 进行虚拟机的制作

Xen 为一种在一部主机上面虚拟出多部机器的软件

最近更新时间: 2008/09/09

我们常常讲,最好将不同的服务器架设在不同的主机硬件上面,也就是说,每部主机所负责的任务越简单越好, 如此一来不但可以减少主机 debug 的时程,也能够简化安装与设计主机的架构。但是, 每个服务一部主机对于小企业或者是个体户来说,光是放置主机的空间、电源、以及后续的管理问题, 就会导致一堆困扰的产生。这个时候,虚拟机就非常有用啦。

所谓的『虚拟机』就是在一部实体主机上面虚拟出多部实体主机的环境,且每部实体主机都是独立的, 除了原本的那部原主机外,其他的主机都可以独立开、关机,由于个人电脑的能力在近年来突飞猛进, 速度与性能都非常棒,所以用一部实体主机来进行虚拟机的架设,并适当的分配不同的服务在上头, 将有助于能源的节约、管理的简化以及服务追踪的简化哩!

前言

这个章节主要是在介绍 Xen 这个虚拟机,那,什么是虚拟机?他有什么用途? 目前有哪些常见的虚拟机软件 (Virtual Machine) ?底下我们先来说一说。

什么是虚拟机

虚拟机 (Virtual Machine) 与 Apache 的虚拟主机 (Virtual host) (注1) 不一样, 虚拟机的目的是希望能够在一部实体主机上面『同时运作多个操作系统』的一项功能。 为什么我们需要在一部主机上面同时运作多个操作系统呢?可能原因有几个:

  • 让一部强效型主机负责多种业务时:
    由于电脑工业技术的发达,近年来的个人电脑不但越来越便宜,而且功能还越来越强大! 就在前几个礼拜 (2007/09/xx) ,鸟哥也才收到两部『四内核的、配备 2GB 主内存』的个人电脑! 这在台湾政府的中信标案里面也已经有提供了,可见个人电脑实在是便宜又好用。

    那么好用的一部电脑如果拿来当网络服务器,妳会觉得很浪费!怎么说呢? 以鸟哥的鸟站 (http://vbird.cn/) 来说,一部 AMD AthlonXP 2000+ (1.6GHz 的 CPU 速度) 就跑得非常的顺畅, 运作至今应该也没有发生突发性大流量导致服务中断的情况,观察这部主机的平均运作情况, 使用 sar 这个指令来察看一下,唔!每日平均 CPU 负载都在 10% 以下而已。 所以说,这部四内核的电脑拿来当鸟站的主机,根本就是浪费了他的才能。

    如果能够将多种服务集中在这部主机上面来跑,岂不甚好!才不好哩! 如果妳看过基础篇 (注2) 与服务器篇 (注3) 的介绍后, 肯定会认为主机的服务越单纯越好,这样在服务软件调试以及主机环境的单纯化上面比较好。 所以说,一部好的主机如果仅用于一个特定的用途,实在很浪费。但如果每个服务都需要一部主机, 又觉得很讨厌,因为包括主机的硬件维护、电费、软件安装、网络设置等等,都很麻烦,尤其又贵!

    因为上述的问题,所以目前有很多项目都在开发『在一部实体主机上面仿真出另一部机器』的功能, 也就是说:『我们希望能够在一部主机上面 "同时" 跑多个操作系统』的意思。如果能达到这样的功能,实际的硬件可以省略掉很多问题, 同时又可以充分的应用实体主机的资源,实在很不错啊!

  • 同时豁弄多种不同的操作系统:
    时间拉回到四、五年前,当时的主机能力仅是还可以,还不算很够力,而且价格不斐。 但是当时多种操作系统都很吸引人,包括 Windows/Linux/Mac/DOS... ,大家都希望能够尝试一下这些操作系统, 然而又不想花钱去购买一部新的主机来玩,这个时候多重开机 (注4) 就成了很重要的一环, 因为他可以让我们在开机的过程当中选择所想要运行的操作系统来操作说。

    不过多重开机有个讨厌的缺点,那就是『我每次开机只能够单玩一种操作系统』, 所以如果妳想要在多个操作系统之间切换时,光是开、关机就会让妳火气大起来。 这个时候就有些公司开始开发能够在一个操作系统上面『仿真出另外一个可运行的操作系统』环境, 所以此时就能够在同时间操作两种操作系统了。当时最流行的是 VMWare 这一套软件啦!

    虽然早期就已经有数种虚拟机的软件可以玩,不过当时毕竟是使用软件来仿真的, 硬件并不直接支持这种虚拟机的环境,所以性能上面非常的糟糕!不过拜 Intel/AMD 大力开发强效型 CPU 之功, 目前的主机硬件大部分都有支持虚拟机的能力,如此一来我们就能够使用快速的虚拟机的环境啰!

  • 有哪些常见的虚拟机软件

    那么目前有哪些常见的虚拟机软件呢?他们又各有何特色?底下就来说一说:

  • 老牌子的 VMWare (http://www.vmware.com/)
  • 早期的玩家大概都有玩过这一套虚拟机的软件,这套软件早期仅在 Windows 上面运行, 最大的优点就是可以让用户在 Windows 环境下同时仿真出一套 Linux 的环境,同时运行两个操作系统。 鸟哥之前使用这套软件的目的是用来捉 Linux 的安装画面!在这个功能上面 VMWare 实在很不错。

    不过早期的 VMWare 性能不太好,加上当时的主机性能也不佳,而且 VMWare 仿真的硬件不会与原本的主机相同, 因此鸟哥很不建议大家使用 VMWare 来学习 Linux 。然而随着时代的进步,目前 VMWare 已经发展的相当不错, 同时也提供 Open source 的版本给 Unix-Like 平台的 OS 使用,算是很不错的。他也是目前虚拟机市场的龙头老大!

  • 已渐趋成熟的 Xen (http://www.xensource.com/)
  • Xen 是以 GNU 的 GPL 授权发布的自由软件,目的在于提供性能佳、可支持不同操作系统的同时运作、 且让同时运作的操作系统彼此互相独立的系统环境。Xen 是基于 X86 硬件所开发出来的虚拟机监督器 (Virtual Machine Hypervisor) ,鸟哥觉得他最大的优点就是性能佳!鸟哥曾在一部 Celoron 366 MHz, 内存 192MB 的笔记本电脑上面仿真出一个 Xen 机器给上课的同学们豁弄,同时连接 50 个同学到该部仿真的 Xen 机器上还不会觉得有延迟的问题,性能真的是很不错。我们在下一节会详细的介绍 Xen 这个好东西。

  • 后起之秀 KVM (Kernel based Virtual Machine, http://kvm.qumranet.com/kvmwiki)
  • 让 Linux 发明者 Linus Torvarlds 喜好并且将之加入内核功能的虚拟机就是这个 KVM 的技术! KVM 已经于 Linux 2.6.20 版的内核中加入此项功能,KVM 不但提供完整的 Intel/AMD CPU 的虚拟技术支持, 而且提供完整的虚拟环境。虽然目前这个技术还不算很成熟,不过未来应该也可以发展的很不错呢! 因为 Linux 内核本身就有支持啊! ^_^!更多的 KVM 可以参考: http://en.wikipedia.org/wiki/Kernel-based_Virtual_Machine

  • 酷!炫!有劲的 VirtualBox (http://www.virtualbox.org/)
  • 还有一套自由软件的虚拟机可以用,那就是同样架构在 x86 上面的 VirtualBox 这套软件啦! 这套软件提供完整的虚拟环境,且可支持目前市面上的主流操作系统。 鸟哥曾经看过网中人前辈在他的笔记本电脑上面玩过这套东西,非常的炫丽,而且提供图形化接口, 性能方面看起来也相当的优秀。不过,好像集成度方面的问题,偶而仿真的作业环境会当掉, 但是不会影响到原操作系统就是了。想要在 Linux 台式机上玩玩虚拟环境的朋友,鸟哥觉得这套东西最适合您!

    其实每套虚拟机的软件都有其存在的价值,因为他们的功能与目的都不一样。举例来说,鸟哥认为 VirtualBox 很适合于想在 Linux 台式机上面玩 Windows 的朋友,虽然他不够稳定。至于 Xen 则很适合在一部高性能主机上面同时运作多个同版本的 Linux 系统,因为稳定度相当高,且性能优秀, 可让用户轻松的在一部机器上面运作多个独立的操作系统来分别处理不同的网络服务呢!

    Tips 鸟哥 这一章底下的数据牵涉到很多硬件的观念以及 Linux 操作系统最底层内核的架构说明, 如果您不想要了解这些基础概念,可以直接看 CentOS 5.x 的实例说明即可。

    初探 Xen

    Xen 的性能为什么能够这么好? Xen 在使用上面有什么样的限制?我的一部主机最多可以支持几个 Xen 的仿真环境? Xen 的仿真环境有几种类型? 这些疑问我们都得要先知道一下才好! 当然,最好能够有个简单的小例子来处理 Xen 的仿真环境啰。

    Xen 的虚拟类型与特色

    Xen 这套自由软件在虚拟机的仿真类型方面主要分为半虚拟化 (Para-virtualization) 及全虚拟化 (Full virtualization) 两种,其中半虚拟化主要是通过修改 Linux 内核来达成的虚拟技术。 半虚拟化技术所产生的虚拟机需要与原本的操作系统相同较佳。使用半虚拟化的环境所具备的特色有: (注5)
    • 虚拟机的运作效率与实体机器的性能相当;
    • 最多可支持到具有 32 颗以上 CPU 的主机环境;
    • 支持 x86/32, x86/32 含 PAE 技术, 及 x86/64 的硬件平台环境;
    • 良好的硬件驱动程序支持,几乎支持所有的 Linux 设备之驱动程序;
    Xen 的半虚拟化技术主要是用在相同版本的 Linux 上面,也就是说,如果妳想要使用半虚拟化的方式启动多个虚拟机, 那么那些虚拟机全部都必须是相同的操作系统,甚至要求相同版本与相同内核的 Linux distribution 喔。

    如果妳想要安装不同版本的 Linux 或者是其他的 OS (例如 Windows XP) 时,就得要使用全虚拟化技术了。 但是全虚拟化技术是有其限制的,当你的硬件满足下列需求时,全虚拟化技术才能够动作:
    • 你的硬件支持 Intel 的 VT 技术 (Virtualization Technology, Intel-VT);
    • 你的硬件支持 AMD 的 SVM 技术 (Secure Virtual Machine, AMD-SVM or, AMD-V)。
    此外,上面提到的 PAE 指的是 Intel 的实体地址延伸技术 (Physical Addressing Extensions, PAE), 这项技术可让原本仅支持到 4GB 物理内存的 32 比特硬件平台,可支持到最大 64GB 的内存喔! 而且, Xen 几乎可以在所有的 P-II 以上等级的硬件平台上面跑半虚拟化任务,如果不跑全虚拟化的话,其实性能确实是 OK 的啦!

    近来由于虚拟机软件的流行,加上 x86 电脑性能与 CPU 运算内核单元的增加,两大 x86 CPU 制造商 Intel/AMD 都发表了新的集成到 CPU 的虚拟技术,分别是 Intel 的 Vanderpool 虚拟技术以及 AMD 的 Pacifica 技术。 这些技术有的也支持 Xen ,这让 Xen 的性能增进不少呢! ^_^

    Xen 的运作环境解释

    基础学习篇里面我们曾经谈过硬件、内核与应用程序的关系, 所有的应用程序都是在内核层之上来完成的 (注6)。 然后通过内核功能去调用与使用硬件组件的命令。好了, 现在来仔细想一想,既然我有多个虚拟机,每个虚拟机的环境各别有自己的操作系统内核, 也就是有多个操作系统同时存在。如果所有的操作系统都能够完整的控制硬件的话, 那么硬件到底该接受谁的指令来运作?那个系统的指令会先被运行?这是很重要的问题, 因为如果这边搞不定,那么妳的硬件系统就只有当机一途。

    为了解决这个问题,Xen 也分成多个层级 (layer) 来运行。他将 Linux 的内核修改过后, 再使用这个修改过后的内核开机,而开机后先加载 Xen 的监督器 (Hypervisor) , 并且启动第一个在上头的操作系统,我们称他为 domain-0。 (在 Xen 上面所谓的一个 domain 就是一个虚拟机啰!)

    Domain-0 之所以要先被加载是因为 Domain-0 含有其他虚拟机启动所必须的控制指令, 并且 domain-0 也是控制虚拟设备的重要主控系统。 在 domain-0 上头最重要的就是一个 xend 的常驻程序,其他的 domain 都是由这个 xend 来管理的。 至于命名方面,除了 domain-0 之外的其他虚拟机就依序被称为 domain-1, domain-2 等等, 我们通称为 domain-U 啰。这些咚咚的相关性有点像这样:

    Xen Hypersvisor 的功能示意图
    图 2-1、Xen Hypersvisor 的功能示意图(注7)

    由上图我们知道 domain-0 真的是很重要的,因为他直接控制 Xen 的监督器 (Hypervisor),而且掌握了实际的 Linux 驱动程序 (drivers)。而其他的虚拟机 (domain-U) 则是通过 Xen 监督器来与实际的硬件以及 domain-0 达成沟通。而为了让 domain-0 能够与 Xen 结合,我们必须要修改 domain-0 的内核才能够顺利运作。并且需要使用 domain-0 的内核来开机才可以。 domain-0 是所有虚拟机的来源,所以他可以尽量简单一点,其他的个别服务则可以放置到不同的 domain 当中了。

    那个 xend 也是很重要的咚咚,他可以管理 domain-0 与其他 domain 之间的启动与沟通, 可以提供一个终端机 (console) 接口来让 domain-0 登录其他的 domain ,所以我们也必须要启动这玩意儿才行。

    早期 Xen 尚未被各 distribution 集成到各自的版本中时,用户必须要由 Xen 的官方网站下载原代码, 然后自行重新编译内核以及编译 Xen 软件才行。说实在的,玩个 Xen 这么麻烦,倒不如不要玩!^_^。 然而在 RHEL 5 (CentOS 5) 以后, Xen 已经包含在原始发布的套件中了,所以我们直接用 yum 就能够安装妥当! 所以要搞定一部 Xen 的 domain-0 已经不再是不可能的任务啰!^_^

    对于 Xen 的基本原理有一些认识之后,接下来就让我们开始在 CentOS 5 上面进行一个小小的实验吧!

    确定你的硬件是否支持 Xen 的运作

    虽然说目前的硬件都很新了,不过有的朋友使用的是旧的主机来安装 Linux ,所以我们必须要留意你的硬件是否支持 xen 的运作。而我们知道 Xen 支持半虚拟化与全虚拟化两种模式,两种模式的需求为:

  • 半虚拟化 (Para-virtualization) 硬件需求:
  • 只要是 64 比特的 x86 主机 (x86_64) 都能够支持半虚拟化的环境。如果是 32 比特的主机 (x86) 时, 该主机必须要支持的实体地址延伸技术 (PAE) 才能够使用 xen 喔!那如何确认呢?很简单,检查 CPU 的参数即可:
    [root@linux ~]# cat /proc/cpuinfo | grep flags
    flags  : fpu tsc msr pae mce cx8 mtrr mca cmov pat pse36 mmx fxsr sse up
    
    嘿嘿!这一部主机是鸟哥的 P-III 800 主机,看吧!确实有支持 PAE 喔!所以当然可以玩 Xen 啰。

  • 全虚拟化 (Fully-virtualization) 硬件需求:
  • 如果妳需要全虚拟化的技术支持时,此时需要硬件有支持虚拟化技术才行。 目前在 x86 的主机当中, Intel 提供 VT 技术, AMD 则提供 SVM 技术。 这两种技术在 CPU 的旗标分别是: Intel (vmx) 与 AMD (svm) 。 鸟哥在 Core Duo 主机上面的测试可以发现:
    在 Intel Core 2 Duo 的 CPU 主机上面测试 CPU 旗标:
    [root@linux ~]# cat /proc/cpuinfo | grep flags
    flags   : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts 
              acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc up pni 
              monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm
    # 瞧!是有那个 vmx 的支持啦!
    
    至于 AMD 的主机旗标则是:(下表感谢donyingle兄的提供!)
    在 AMD Athlon(tm) 64 X2 的 CPU 主机上面测试 CPU 旗标:
    [root@linux ~]# cat /proc/cpuinfo | grep flags
    flags   : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov 
              pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt 
              rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic 
              cr8legacy 3dnowprefetch ts fid vid ttp tm stc 100mhzsteps 
    # 瞧!是有那个 svm 的支持啦!
    
    如果确定你的 CPU 有支持上述的条件后,嘿嘿!那我们就可以开始底下的游戏啦!如果没有支持呢? 那很抱歉,底下的数据看看就好!

    所需要的 Xen 套件与内核

    注意: 在开始安装之前,请先参考前一小节以确定你的硬件已经支持 Xen 的半虚拟化功能了!

    约略谈了一下 Xen 的原理、特色之后,在开始玩弄 Xen 之前,我们得了解运作 Xen 所需要的各项套件,并且顺利安装后,才能够使用的啊! ^_^。如同前一小节提到的, 要使用 Xen 半虚拟化 (Para-virtualization) 必须要修改内核才能够顺利的运作。 在以前的版本妳需要重新编译内核,不过,在新的版本,例如 CentOS 5.x 底下,就已经将 Xen 的内核帮妳编译好了!妳可以直接安装即可。所以,妳需要安装的套件主要有:
    • kernel-xen:修改的 Linux 内核,使可以跑 Xen 的环境;
    • xen:主要的 xen 套件,包括设置档、启动脚本、所需的基本函数库等;
    • xen-libs:Xen 所需要的函数库等;
    • python-virtinst:提供终端机安装的软件;
    • virt-manager:为一个图形用户接口软件,可在图形接口管理 xen 喔!
    在 CentOS 5.x 的环境下,妳可以使用 yum 直接来安装这几个套件。安装完毕后请务必使用新的内核开机! 以鸟哥的例子来说,我安装了数个内核,包括 kernel-2.6.18-8.1.14.el5 及 kernel-xen-2.6.18-8.14.el5 , 所以在 grub 的设置档当中会像这样:
    [root@linux ~]# vi /boot/grub/menu.lst
    default=0
    timeout=5
    splashimage=(hd0,0)/boot/grub/splash.xpm.gz
    hiddenmenu
    title CentOS (2.6.18-8.1.14.el5xen)
            root (hd0,0)
            kernel /boot/xen.gz-2.6.18-8.1.14.el5
            module /boot/vmlinuz-2.6.18-8.1.14.el5xen ro root=/dev/hda1 rhgb quiet
            module /boot/initrd-2.6.18-8.1.14.el5xen.img
    title CentOS (2.6.18-8.1.14.el5)
            root (hd0,0)
            kernel /boot/vmlinuz-2.6.18-8.1.14.el5 ro root=/dev/hda1 rhgb quiet
            initrd /boot/initrd-2.6.18-8.1.14.el5.img
    
    妳必须要注意到,鸟哥使用的开机菜单为第0个,亦即是 2.6.18-8.1.14.el5xen 那一个! 然后重新启动这部 Linux 主机喔!启动完成后,应该再次的确认一下是否为 xen 的内核才行!
    [root@linux ~]# uname -r
    2.6.18-8.1.14.el5xen
    # 仔细看,鸟哥的内核为新的 xen 的内核喔!
    
    [root@linux ~]# chkconfig --list | grep xen
    xend        0:off  1:off  2:on   3:on  4:on  5:on  6:off
    xendomains  0:off  1:off  2:off  3:on  4:on  5:on  6:off
    # Runlevel 3/5 的 xen 相关服务是有启动的才行!
    
    [root@linux ~]# pstree -p | grep xen
            |            |-xenbus(10)
            |            `-xenwatch(9)
            |-xenconsoled(2348)---{xenconsoled}(2349)
            |-xenstored(2340)
    # 这样看来,应该确实是有启动的样子喔!继续最后一个确认!
    
    [root@linux ~]# xm list
    Name                  ID Mem(MiB) VCPUs State   Time(s)
    Domain-0               0      462     1 r-----     49.2
    # xm 为 Xen 的重要指令,list 为列出已经在跑的 xen 系统,缺省有 domain-0 存在!
    
    通过上面的测试,我们会知道 xen 确实已经顺利的启动,而且也启动前面谈到的那个重要的 domain-0 啰! 接下来我们再来聊一聊那 xen 的设置档在哪里?

  • xen 的套件结构
    我们前面谈到过, Xen 在 domain-0 是由一个 xend 的服务所管理的,他可以用来启动、关闭与链接到其他的 domain-U 当中。此外, Xen 亦提供许多的指令来让系统管理员管理他们的 domain-U 啊!这些重要的启动运行档为:
    • /usr/sbin/xend:就是 xend 的启动脚本,使用 python 编程语言写成的;
    • /usr/sbin/xm:重要的管理 xen 的指令,可输入 xm help 查找用法。
    至于与 xen 有关的设置档,包括一些仿真组件的启动脚本都在 /etc/xen 底下,在这个目录下的许多数据为:
    • /etc/xen/xend-config.sxp:这个重要!是 xend 的设置档!内容包括 domain-0 的类型、网络的链接方式、 domain-0 的内存与CPU等资源配置、是否使用 vnc 作为 domain-U 的连接方式等等。 不过,鸟哥觉得,这个文件不太需要更动,使用默认值就很够用了。

    • /etc/xen/:里面含有数个 domain-U 的设置档范本,包括:xmexample1, xmexample.hvm。 其中,那个 xmexample.hvm 可作为完整仿真的参考范本喔!

    • /etc/xen/auto:如果妳想要在系统开机时就自动启动某个 domain-U 的话,可以将该设置档指定链接到这个目录中。 举例来说,如果妳要在开机后立即使用 /etc/xen/xmexample.hvm 设置档来启动某个 domain-U , 那可以这样做:
      [root@linux ~]# cd /etc/xen/auto
      [root@linux auto]# ln -s ../xmexample.hvm .
      # 这只是个范例,妳可不要跟着做!因为 xmexample.hvm 还需要修改才能运作!
      
    • /etc/xen/scripts:这目录有趣了!包括虚拟设备的启动、虚拟网络的启动、 虚拟桥接器的启动等等,都是通过这目录底下的所有文件来达成的!
    在妳安装完毕,并且使用新内核启动后,接下来让我们开始来处理一个小案例吧!

  • 第一个泛用实例

    就如同图 2-1 的样子,在主机上的所有 Linux OS 都需要自己能够开机, 而开机流程通常是这样的:(注8)
    • step 1: 按下电源,主机开始读取 BIOS 数据;
    • step 2: 取得开机的设备顺序,并由 MBR 取得开机菜单与开机管理程序;
    • step 3: 由开机管理程序加载 Linux kernel 及虚拟磁盘 (initrd);
    • step 4: Kernel 侦测硬件加载适当的驱动程序,并挂载根目录以读取内核模块;
    • step 5: 开始由 /sbin/init 程序设置主机的环境。
    由上述的动作,我们可以知道 Linux 开机的重点在于 1. 内核 2. 虚拟磁盘 (initrd) 及 3. 根目录 (/) 了。 虽然内核与虚拟磁盘我们的 CentOS 5 已经提供了,但是缺省的虚拟磁盘好像并未主动的加入 Xen 的某些驱动程序, 因此我们得需要针对虚拟磁盘进行设置才好。此外,每个 Xen domain 的根目录也很伤脑筋的!因为根目录需要很多数据,而且还需要挂载类似 /sys, /proc, /dev, /selinux 等特殊的文件系统哩! 那该如何处理根目录呢?底下就让我们来处理处理:

  • 硬件支持性
  • 就如同前面几个小节谈到的,如果我们的硬件并不支持 xen 所必须要的功能,那么妳是无法创建好你的 domain-U 的! 在这个泛用案例当中我们的重点是测试半虚拟化,因此妳只要具有 PAE 的支持即可。 鸟哥以较低级的 P-III 800 来进行测试,硬件检查的结果是这样的:
    [root@linux ~]# cat /proc/cpuinfo | grep flags
    flags  : fpu tsc msr pae mce cx8 mtrr mca cmov pat pse36 mmx fxsr sse up
    
    妳可以发现确实存在那个 pae 的关键字,因此我们这个系统是可以玩 Xen 的半虚拟化技术的! 所以让我们继续进行工作吧!

  • 根目录所需磁盘槽
  • 根目录所需磁盘槽的来源可以有两个,一个是实体硬盘,一个是利用 dd 创建一个大文件来使用。 鸟哥比较倾向利用 dd 来处理你的根目录喔!妳可以这样做:
    范例:创建一个 5GB 的大文件
    [root@linux ~]# mkdir -p /disk2/xen
    # 因为鸟哥的 /disk2 为一颗额外的硬盘,所以容量比较大啦!
    
    [root@linux ~]# cd /disk2/xen
    [root@linux xen]# dd if=/dev/zero of=xen.img bs=1M count=5000
    5000+0 records in
    5000+0 records out
    5242880000 bytes (5.2 GB) copied,178.482 秒,29.4 MB/s
    # 这个时候会开始创造一个 5GB 左右的文件,由于硬盘速度快慢的关系,
    # 这个动作可能会消耗数分钟到数十分钟不等。
    
    [root@linux xen]# ll /disk2/xen
    -rw-r--r-- 1 root root 5242880000 Oct 10 00:30 xen.img
    
    文件是创建起来了,不过如果你的 Linux 有启动 SELinux 的话,还需要一些类型的改变才可以! 其实动作也不难,这样做就对了!
    [root@linux xen]# chcon -t xen_image_t -R /disk2/xen
    [root@linux xen]# ll -aZ /disk2
    drwxr-xr-x  root root user_u:object_r:xen_image_t      .
    drwxr-xr-x  root root system_u:object_r:file_t         ..
    -rw-r--r--  root root user_u:object_r:xen_image_t      xen.img
    # 如果妳有启动 SELinux 才需要这么做,否则就略过。
    # 反正你要记得 Xen 的文件必须要是 xen_image_t 的安全内容类型。
    
    文件创建起来后,就需要进行格式化啰~格式化的方法为:
    范例:将刚刚创建的大文件格式化为 ext3 的文件格式
    [root@linux xen]# mke2fs -j /disk2/xen/xen.img
    mke2fs 1.39 (29-May-2006)
    /disk2/xen/xen.img is not a block special device.
    Proceed anyway? (y,n) y
    Filesystem label=
    OS type: Linux
    Block size=4096 (log=2)
    ....底下省略....
    
    由于这是文件不是磁盘分区,所以会有上述的警告消息,妳按下『y』就对啦!

  • 拷贝或安装根目录
  • 由于 domain-U 与 domain-0 其实是一样的系统,因为是半虚拟化嘛!所以,最简单的根目录制作方法, 就是将原本的 domain-0 的根目录拷贝到新的分区内就对了! 以鸟哥的例子来说,妳可以简单的这样做:
    [root@linux ~]# mount -o loop /disk2/xen/xen.img /mnt
    # 先将刚刚制作出来的数据给他挂载起来,这是特殊挂载法喔!
    
    [root@linux ~]# cp -ax /{root,dev,var,etc,usr,bin,sbin,lib} /mnt
    # 这几个目录的数据是一定需要拷贝的!粉重要!。
    
    [root@linux ~]# mkdir /mnt/{proc,sys,home,tmp,selinux}
    # 这几个目录与虚拟文件系统有关,包括进程、内核数据等目录,所以要先创建
    
    [root@linux ~]# vi /mnt/etc/fstab
    /dev/sda1  /         ext3    defaults        1 1
    devpts     /dev/pts  devpts  gid=5,mode=620  0 0
    tmpfs      /dev/shm  tmpfs   defaults        0 0
    proc       /proc     proc    defaults        0 0
    sysfs      /sys      sysfs   defaults        0 0
    # 我这里假设我的根目录所在磁盘槽为 SATA 硬盘的第一个分区,
    # 所以是 /dev/sda1 。此外,其他的文件系统如 proc, sysfs 都必须要写入!
    # 至于原本在 domain-0 的其他设备,就给他拿掉吧!
    
    [root@linux ~]# vi /mnt/etc/sysconfig/network
    NETWORKING=yes
    NETWORKING_IPV6=no
    HOSTNAME=xen.test.hostname
    # 这里设置一下妳的主机名称啦!
    
    [root@linux ~]# vi /mnt/etc/sysconfig/network-scripts/ifcfg-eth0
    DEVICE=eth0
    BOOTPROTO=none
    IPADDR=192.168.0.123
    NETMASK=255.255.255.0
    ONBOOT=yes
    # 建议将 IP 也设好。但是要注意那个 HWADDR 最好能够拿掉不设置!
    
    [root@linux ~]# umount /mnt
    # 记得将挂载的数据给他卸载掉
    
    基本上,根目录的设置到这里就算结束了!不过,妳会发现由于 domain-U 的数据都是由 domain-0 来的, 而不同的主机其实设置不会相同,所以使用上述的作法妳会发现有几个小问题:
    • 妳必须要手动处理一些小设置,包括主机名称, /etc/fstab, IP 参数等等;
    • 即使手动处理过上述的数据,还是很可能会无法成功的启动 domain-U ;
    • 由于 domain-0 可能会安装比较多的套件,这些数据又在 domain-U 当中用不着,徒然造成硬盘容量的浪费。
    所以,虽然这个方法最简单,不过通常鸟哥不是很建议您使用啦! ^_^

  • 设置虚拟磁盘镜像档以及终端机接口
  • 由于缺省的 CentOS 虚拟磁盘 (Initial Ram Disk) 并不包含一些 Xen 的相关驱动程序, 因此搞了老半天也是无法驱动 Xen 的 domain-U ,给他气死! 所以,我们得先就 initrd 来进行一些额外的设置才行。 这个地方非常的重要!因为鸟哥卡在这里好几天~最后才发现原来是 initrd 的问题啊~
    [root@linux ~]# mount -o loop /disk2/xen/xen.img /mnt
    [root@linux ~]# cd /boot
    [root@linux boot]#  mkinitrd -v -f --fstab /mnt/etc/fstab --with xenblk \
    > --with xennet --preload xenblk --preload xennet \
    > initrd-2.6.18-8.1.14.el5xen.vbird.img `uname -r`
    [root@linux boot]# umount /mnt
    # 详细的各项参数请 man mkinitrd ,上述的范例仅是利用 /etc/fstab 的设备来设置,
    # 并且加上一些 xen 相关的驱动程序而已。这个过程非常的重要!
    # 最终会制作出一个 initrd-2.6.18-8.1.14.el5xen.vbird.img 文件
    
    除了这个虚拟磁盘之外,为了要方便我们登录 domain-U 的环境,我们需要产生一个终端机接口才行。 因为每个 domain-U 会使用到终端接口,然而我们知道 tty1 ~ tty7 缺省给 domain-0 使用掉了。 为此,我们必须得要制作出一个虚拟的终端接口,那就是 xvc0 这个终端接口啰。如何产生呢? 简单的流程是这样:
    [root@linux ~]# vi /etc/inittab
    # 大约在第 51 行的地方加入底下特殊字体的部分:
    5:2345:respawn:/sbin/mingetty tty5
    6:2345:respawn:/sbin/mingetty tty6
    co:2345:respawn:/sbin/agetty xvc0 9600 vt100-nav
    # 意思是使用 agetty 创建 xvc0
    
    [root@linux ~]# init q
    # init q 这个指令可以让 /etc/inittab  的设置立刻生效而不需要重新开机!
    
    [root@linux ~]# ln -s /dev/console /dev/xvc0
    # 如果 xvc0 没有主动创建的话,我们需要手动来创建链接才可以喔!
    
    做完这一步之后,接下来就是可怕的设置档啰~

  • 编辑 xen 虚拟数据的设置档
  • 接下来就是重头戏啦!因为我们必须要指定 domain-U 的相关虚拟设置值,包括使用几颗 CPU 、使用多少内存容量, 以及所使用的内核与根目录的所在等等。如前所述,这些设置档主要都在 /etc/xen 底下, 尤其里面的 xmexample1, xmexample2 等文件就是很好的说明文档档,很有参考价值。 鸟哥先说一下我的设置是这样的:
    [root@linux ~]# vi /etc/xen/centos5
    # 这个文件的文件名可以随便你取,不过设置档最好是在 /etc/xen 这个目录下才好!
    name    = "centos5"
    kernel  = "/boot/vmlinuz-2.6.18-8.1.14.el5xen"
    ramdisk = "/boot/initrd-2.6.18-8.1.14.el5xen.vbird.img"
    memory  = "128"
    vcpus   = 1
    vif     = [ '' ]
    disk    = [ 'tap:aio:/disk2/xen/xen.img,sda1,w' ]
    root    = "/dev/sda1 ro "
    # name:		只是一个显示的名称,一般建议与文件名相同即可;
    # kernel:	在 domain-0 上面的文件,用来进行 domain-U 的开机!非常重要!
    # ramdisk:	就是 initrd 那个文件啰~刚刚我们才做出来的文件名
    # memory:	分配给这个 domain-U 的内存有多少?如果没有图形,96 MB 也可以!
    # vcpus:	使用多少颗 CPU 的意思;
    # vif:		是否需要网络卡,如果需要网络卡,至少要有设置!但内容可用缺省!
    # disk:		用来作为根目录的是那个磁盘,这个最重要啦!语法为:
    #	tap:aio:/完整/路径/文件名,设计为domain-U的磁盘代号,可否写入
    #		以我们这个例子来说,我将之前创建的大文件仿真成为 domain-U 的
    #		/dev/sda1 ,并且该 partition 为可写入 (w)。
    
    特别特别留意的是,上面的设置档当中的 kernel, ramdisk 以及 disk 都是以原本的主机 (domain-0) 的角度来思考的, 也就是说,实际上我们是以 domain-0 的内核文件来进行 domain-U 的开机,因此妳会发现在 domain-U 当中并不存在 /boot 这个目录喔!因为实际上用来开机的是 domain-0 的文件嘛!

    至于另一个重点就是那个 disk 参数。我们可以使用仿真的方式也可以使用实际的 partition 来给予设置。 如果是『用文件来仿真成为 partition』时,使用两个逗号 (,) 隔开成为三个字段,分别为:

    tap:aio:/完整路径/文件的名称,设备代号名称,写入与否
    • [tap:aio:]:为较新的文件处理模式,旧的方式为使用:[file:]
    • [设备代号名称]:就是仿真的设备,请与 domain-U 内的 fstab 对应起来喔!
    • [w]:就是设置可否写入,若唯读则为[r]
    如果使用实体 partition 来仿真的话,那么开头的部分会以『phy:』来取代。举例来说,如果我们以 /dev/hda5 来作为 domain-U 的 /dev/sda1 的话,那就会变成:
      disk = [ 'phy:/dev/hda5,sda1,w' ]
    如果一切都搞定之后,接下来让我们来启动 Xen 的 domain-U 吧!

  • 利用 xm 指令启动与管理 domain-1
  • 在 domain-0 可以使用 xm 这个指令来启动、关闭、删除某个 domain-U , xm 的指令用法是这样的:
    [root@linux ~]# xm [动作] [设置文件名] [-c]
    参数:
    [动作]:要某个设置档内的 domain-U 作何动作之意,常见的动作有:
       create   :启动这个 domain-U 的意思,例如启动 centos5 这个设置档时,使用:
                  xm create centos5
       destroy  :立即由内存中,将这个 domain-U 给删除,常用于 domain-U 出问题时
       list     :将目前已经启动的 domain 都列出来之意;
       console  :若有已创建的 domain-U 时,可用 console 来取得 domain-U 的终端接口
       shutdown :关闭某个已启动的 domain。如果想要关闭全部的 domain-U ,可用
                  xm shutdown -a
    [设置文件名]:亦即在 /etc/xen/ 目录下的文件名啰;
    -c :同时创建到该设置档的终端接口 (console)
    
    如果想要启动我们刚刚创建的 centos5 这个设置档内的 domain 时,妳可以使用『xm create -c centos5 』即可。 那个 -c 的作用是可以让妳直接取得 domain-U 的终端机接口。鸟哥在 pietty 上面连接到 domain-0 , 然后启动 centos5 这个 domain 的情况如下所示:

    启动 xen domain-U 的示意图
    图 2-2、启动 xen domain-U 的示意图

    在图 2-2 当中,输入指令后 domain-U 的开机流程就会依序的显示在妳的终端机上, 感觉上就好像坐在电脑前面看 Linux 主机开机一样!实在是很不赖!最后如果开机顺利成功的话, 结果会像下图所示这样:

    启动 xen domain-U 的示意图
    图 2-3、启动 xen domain-U 的示意图

    在图 2-3 当中,最上方圈起来的开机消息是错误消息。由于我们是拷贝 domain-0 的所有数据, 因此连同原本写在 /etc/rc.d/rc.local 文件内的运行过程也会被运行。但是 domain-U 的状况与 domain-0 并非完全相同,所以就会如上所述出现一些错误消息啦!这也是我们需要额外处理的部分喔。

    当你以 root 的身份登录后 (这个真的是终端机,并非是 ssh 的画面喔!),会发现多了一个 xvc0 的终端接口, 这个接口得先在 /etc/inittab 里面设置好才行!如果一切都 OK 了!恭喜您,你已经登录 domain-U 啰! 接下来请妳自行根据妳的需要来设置好妳的 domain-U 吧!让这两个 domain 并行呢!

    好了,现在我如何注销 centos5 这个 domain-U 呢?妳可以这样做的:
    • 直接在 domain-U 的环境中按下 [ctrl]-] 这个组合键来回到 domain-0 的环境;
    • 直接关闭 pietty 等连接的软件;
    • 利用其他 bash 来结束 (kill) 掉使用 xm 所创建的连接进程
    有趣的是,即使妳使用上述的方法来离开 domain-U 时, 也不会影响到 domain-U 的继续运作!而且 root 也不会注销,等到妳下次再以『 xm console centos5 』时, 会继续取得 root 的动作继续处理刚刚未完成的工作呢!很神奇吧~

    现在,请跳回 domain-0 的地方,或者是利用另外一条 pietty 的连接连入 domain-0 ,我们使用 xm list 来察看一下各个 domain 的状况吧!
    [root@linux ~]# xm list
    Name             ID Mem(MiB) VCPUs State   Time(s)
    Domain-0          0      366     1 r-----    735.2
    centos5          42      127     1 ------     52.4
    # 妳会发现多了一个 domain 出现!名称为 centos5 啦!
    # 妳也会发现有个 State 吧!那个 State 的意义是这样的:
    # r :该 domain 正在使用 CPU 资源在运作中;
    # b :这个 domain 目前被悬置(blockded),很可能由于这个 domain 在等待较长时间
    #     的输入输出 (I/O) 之故。
    # p :该 domain 处于暂停的状态,通常由于管理员使用 xm pause 之故。
    #     当 domain 在此状态时, Xen 的监督器将不会处理该 domain 的动作;
    # s :这个 domain 正在关机当中
    # c :这个 domain 已经 crash 了,但是却没有自动的关掉。通常是因为没有设置
    #     on_crash 的相关动作所致。
    # d :该 domain 正在死亡中...因为该 domain 无法正确的 shutdown/crashed 之故。 
    
    很简单吧!这样就完成你的 Xen domain 啰~开始将妳所想要的网络服务分门别类的放到不同的 domain-U 中吧! 加油!

    例题:关于如何登录 domain-U
      我在启动 domain-U 的时候,使用指令为『 xm create domain-U 』导致我使用 xm list 可以看到新的 domain-U 在运作,但我还是在 domain-0 。请问此时我该如何登录 domain-U 呢?
    答:
      有两种方式,如果想要取得 domain-U 的终端机模式,请使用:

        xm console domain-U

      如果妳知道 domain-U 的 IP,并且 domain-U 有启动类似 ssh/telnet 的服务时,可使用网络服务登录。举例来说 domain-U 的 IP 为 192.168.100.100,且有启动 ssh ,则妳可以使用:

        ssh username@192.168.100.100

    例题:关于如何关闭 domain-U
      我使用 xm list 时,发现 domain-U 已经启动了,我该如何关闭这个 domain 呢?
    答:
      如果妳在 domain-0 上头的话,可以使用:

        xm shutdown domain-U

      来关闭这个 domain-U , 如果极端一点,妳想要关闭所有的 domain-U (除了 domain-0 之外),则可以下达:

        xm shutdown -a

      那如果妳是在 domain-U 里面呢?想关闭该 domain 就直接给他:

        shutdowm -h now

      即可,就好像一般正常进程关机一样喔! 那如果万一 domain-U 无法顺利关机,则妳可以在 domain-0 上面直接下达删除的指令:

        xm destroy domain-U

    例题:关于重复登录的问题
      我利用 xm create -c domain-U 的方式取得终端机来登录 domain-U 了,结果另外一个用户使用『xm console domain-U』也来登录该 domain,此时会发生什么问题?该如何解决?
    答:
      由于缺省情况下,一个 domain-U 仅有一个终端机,因此第二个登录者将不会询问帐号密码, 而是直接以第一个登录者的身份取得该终端接口,亦即两者将具有相同的终端接口与所有资源。 但如此一来会导致控制权的争夺效应,最终结果两者都无法控制该终端接口。此时建议两者均离开该终端接口, 然后让单一用户以 xm console 登录,另一用户则使用类似 ssh 的方式网络登录即可。

  • 常见错误分析
  • Xen 的启动其实是颇不容易的,常常会有一些错误情况发生。底下我们来看看一些常见的错误情况, 让您了解到,您无法启动 Xen 的可能原因为何?

  • 没有启动 Xen 的 xend daemon
  • [root@linux ~]# xm create -c centos5
    Using config file "./centos5".
    Error: Unable to connect to xend: Connection refused. Is xend running?
    
    如上所述,肯定你没有启动 xend 这个 daemon 的啦!直接启动他即可:『/etc/init.d/xend start』

  • 使用到错误的内核或者 domain-0 未以新 xen 内核开机
  • [root@linux ~]# xm create -c centos5
    Using config file "./centos5".
    Error: (22, 'Invalid argument')
    
    然后请到注册表内看看,亦即是 /var/log/xen/xend.log 档内,如果出现如下的错误:
    [root@linux ~]# cat /var/log/xen/xend.log
    [2007-10-17 13:18:48 xend.XendDomainInfo 31254] ERROR 
    (XendDomainInfo:203) Domain construction failed
    
    很有可能就是你的内核文件用错。此时请检查一下你的设置档,看看『kernel』的项目是否设置正确? 我们务必要使用 xen 相关的内核来开机才行啊!

  • SELinux 或者是文件权限的问题
  • [root@linux ~]# xm create -c centos5
    Using config file "/etc/xen/centos5".
    Error: Kernel image does not exist: /boot/vmlinuz-2.6.18-8.1.14.el5xen
    
    但我看过 /boot/vmlinuz-2.6.18-8.1.14.el5xen 确实是存在的,可能原因为何?一般来说,这种问题应该是 SELinux 的影响所致。确定方法可以用『setenforce 0』然后再重新『xm create -c centos5』测试看看, 如果确定可以登录,那表示您的 /boot/vmlinuz-2.6.18-8.1.14.el5xen SELinux 安全格式内容不对。 正确的内核开机类型应该是:
    [root@linux ~]# ll -Z /boot
    -rw-r--r--  root root system_u:object_r:boot_t         config-2.6.18-8.1.14.el5xen
    -rw-------  root root user_u:object_r:boot_t           initrd-2.6.18-8.1.14.el5xen.vbird.img
    -rw-r--r--  root root system_u:object_r:boot_t         symvers-2.6.18-8.1.14.el5xen.gz
    -rw-r--r--  root root system_u:object_r:system_map_t   System.map-2.6.18-8.1.14.el5xen
    -rw-r--r--  root root system_u:object_r:boot_t         vmlinuz-2.6.18-8.1.14.el5xen 
    
    请自行使用 chcon 指令来处理 SELinux 的错误吧!
  • Kernel panic 的问题
  • 如果出现如下的可怕画面时:
    ....前面省略....
    Loading ext3.ko module
    Creating root device.
    Mounting root filesystem.
    mount: could not find filesystem '/dev/root'
    Setting up other filesystems.
    Setting up new root fs
    setuproot: moving /dev failed: No such file or directory
    no fstab.sys, mounting internal defaults
    setuproot: error mounting /proc: No such file or directory
    setuproot: error mounting /sys: No such file or directory
    Switching to new root and running init.
    unmounting old /dev
    unmounting old /proc
    unmounting old /sys
    switchroot: mount failed: No such file or directory
    Kernel panic - not syncing: Attempted to kill init!
    
    出现这个『Kernel panic』的问题非常的多且复杂,其实主要的原因就是无法挂载根目录。 因为你内核文件已经进行侦测,并且虚拟磁盘文件 (initrd) 也已经加载啰! 那什么情况下会无法挂载根目录呢?妳应该要这样查阅:

  • 1. 用来作为根目录的文件 SELinux 类型不对:

    首先,请先到 /var/log/messages 里面察看一下,如果出现如下画面:
    Oct 17 12:04:17 xen-test kernel: audit(1192593857.395:259): avc:  
    denied  { search } for  pid=29687 comm="tapdisk" name="/" dev=hdc1 
    ino=2 scontext=system_u:system_r:xend_t:s0 
    tcontext=system_u:object_r:default_t:s0 tclass=dir
    # 上面是同一行,意思是说,该文件读取被拒绝了,因为进程的格式为:
    # scontext=system_u:system_r:xend_t:s0 ,但是你的文件格式为特殊字体部分,亦即:
    # tcontext=system_u:object_r:default_t:s0
    # 所以这个文件的读取就被『deny』了!
    
    这表示妳用来作为根目录的文件 SELinux 类型不对,正确的文件类型是这样的:
    -rw-r--r--  root root user_u:object_r:xen_image_t      xen.img
    
    所以妳可以使用类似底下的方式来处理:
    [root@linux ~]# chcon -t xen_image_t -R /disk2
    
    似乎连同最顶层的 /disk2 都需要修改 SELinux 安全内容才行!所以妳可以加 -R 来让子目录生效!

  • 2. initrd 虚拟磁盘没有加载正确的模块

    另一个可能原因就是虚拟磁盘并没有加载 domain-U 需要的模块,所以妳必须要仔细看上面的输出消息有没有这个项目:
    Creating block device nodes.
    Loading xenblk.ko module
    XENBUS: Timeout connecting to device: device/vbd/2049 (state 3)
    Loading xennet.ko module
    netfront: Initialising virtual ethernet driver.
    netfront: device eth0 has flipping receive path.
    Loading uhci-hcd.ko module
    
    这表示已经加载了 xen 的相关模块,如果你的画面没有这个消息时,请参考前一小节关于虚拟磁盘的说明。并且更新你的 domain-U 设置档吧!

  • 3. 设置档内容写错

    很多时候我们都会打错字~实在很麻烦~所以如果上述两点妳都确认过了,接下来请检查一下你的打字有没有问题。 假设我的 xen 文件是放置到 /disk2/xen/xen.img 里头,那么两个地方要注意:
    [root@linux ~]# vi /etc/xen/centos5
    name    = "centos5"
    kernel  = "/boot/vmlinuz-2.6.18-8.1.14.el5xen"
    ramdisk = "/boot/initrd-2.6.18-8.1.14.el5xen.vbird.img"
    memory  = "128"
    vcpus   = 1
    vif     = [ '' ]
    disk    = [ 'tap:aio:/disk2/xen/xen.img,sda1,w' ]
    root    = "/dev/sda1 ro"
    
    仿真的设备 (disk 项目内) 以及根目录的所在设备 (root 的项目) 需要配合成功,否则就会失败了! 当然啦,仿真的设备也必须要跟实际的文件相同才行喔!

  • domain-U 本身的问题
  • 如果开机已经到达下面的状况时:
    unmounting old /sys
    INIT: version 2.86 booting
                    Welcome to  CentOS release 5 (Final)
                    Press 'I' to enter interactive startup.
    正在设置时钟  (localtime): 三 10月 17 13:24:28 CST 2007 [  确定  ]
    正在启动 udev: [  确定  ]
    ....中间省略....
    正在检查文件系统
    Checking all file systems.
    [/sbin/fsck.ext3 (1) -- /] fsck.ext3 -a /dev/hda1
    fsck.ext3: No such file or directory while trying to open /dev/hda1
    /dev/hda1:
    The superblock could not be read or does not describe a correct ext2
    filesystem.  If the device is valid and it really contains an ext2
    filesystem (and not swap or ufs or something else), then the superblock
    is corrupt, and you might try running e2fsck with an alternate superblock:
        e2fsck -b 8193 
    
    [失败]
    
    *** 检查文件系统时发生错误。
    *** 系统将带您进入 shell 模式; 然后重新开机
    *** 当您离开 shell 时。
    Give root password for maintenance
    (or type Control-D to continue):
    
    注意到上面特殊字体的部分,既然已经出现了 INIT 的字样,这表示 domain-U 已经通过了内核侦测、 根目录挂载等动作,且已经顺利的在运行 /sbin/init 这个指令了,因此我们可以确信所有的 Xen 设置都是正确的, 可能发生的错误就在 /disk2/xen/xen.img 这个文件内的配置了。妳可能需要依据开机流程一个一个的去处理相关的错误喔! 最可能发生的就是在 domain-U 的 /etc/fstab 啰~

    其他半虚拟化的安装方式

    由前一小节的泛用实例我们可以了解,如果 domain-U 的根目录来源为拷贝自 domain-0 的话, 那么我们必须要手动修改很多设置档,非常的麻烦~ 既然如此,有没有可能我们可以自行将安装程序放入根目录的建置呢?也就是说, 那个 /disk2/xen/xen.img 的内容其实就是经过安装进程而来的,而不是经由拷贝的。 如此一来不就所有问题都解决了,而且新安装的系统还是很干净的系统呢! 确实如此!目前 CentOS 5 提供一个好用的软件,那就是 virt-install, 妳可以使用 virt-install -h 来察看可以使用的指令哩。

    但是在开始底下的实例之前,妳必须要知道几点限制才行:
    • 最简单的安装方式为拷贝 domain-0 的根目录来给 domain-U 使用(就是前面的范例);
    • 半虚拟化的安装方式『并不支持使用光盘或 DVD 的安装模式』;
    • 半虚拟化仅可通过 http, ftp, nfs 等方式来安装干净的 Linux 系统;
    看到上头的限制您应该会吓一跳吧!怎么不能用原版光盘安装喔?没错~是这样! 使用原版光盘或者是原版光盘的 iso 文件安装时,仅有全虚拟化环境可以达到而已。 那妳应该会问,我如何制作或者是取得安装用的服务器呢?其实我们可以利用各大专院校的 FTP 网站即可啊! 不需要自行设置安装服务器的。不过,如果你的环境并非学术网络的话,最好还是自行设置一下安装服务器比较妥当。 为了每位不同所在处的朋友,所以底下我们先快速的讲一讲如何制作一部安装服务器,然后再处理其他工作吧! ^_^

    制作安装服务器 (Installation Server)

    如前所述,半虚拟化的 Xen 仅支持 NFS, HTTP, FTP 等网络方式安装,并不支持原版光盘安装的模式, 因此我们得要找到可提供安装的主机才行。如果您在台湾的学术网络中, 那么可以选择国家高速网络中心或者是义守大学的 FTP 网站做为来源,举例来说,如下网址就是一个案例:
    万一妳是一家企业呢?那最好使用内部的主机架设成为安装服务器来安装你的 domain-U 比较妥当。 以下鸟哥以 NFS 的方式来简单说明一下建置 CentOS5 的安装服务器啰。
    1. 选择容量大于 5GB 以上的磁盘分区:

      由于完整的 CentOS5 原版光盘含有好多的套件,至少也需要 3500MB 以上的容量来容纳 DVD 碟内的所有数据。 但是鸟哥的主机当初没有额外规划扩充性的问题,因此就得要加挂硬盘啦! 鸟哥是将我的 CentOS5 原版光盘放置到俺的 /disk1/yum/centos5 目录下的, 这个目录为另外一个独立的 partition ,关于 partition 的处理方法请自行参考基础篇的说明,这里不赘述了。

    2. 拷贝所有需要的套件:

      先挂载 CentOS5 的光盘或 DVD 碟,然后直接拷贝即可:
      [root@linux ~]# mount /dev/cdrom /mnt
      [root@linux ~]# mkdir -p /disk1/yum/centos5
      [root@linux ~]# cp -a /mnt/* /disk1/yum/centos5
      [root@linux ~]# umount /mnt
      
      如果妳是使用光盘的话,那么上述的动作就得要进行六次,因为 CentOS5 共有六片光盘。 而且每片光盘内会有一些重复的文件,因此系统会警告妳『是否要覆盖?』此时按下『y』去覆盖即可。

    3. 创建安装所需要的文件关连性数据

      一般来说,使用 yum 的系统在他 RPM 文件所在的目录下都会有一个名为 repodata 的目录, 该目录记录着文件的相关性以及一些基本的安装信息。但因为我们将数据拷贝到自己的主机上, 因此一些基本数据可能就不会吻合,所以我们需要重新制作出这个目录才行。 制作这个目录必须要安装 createrepo 套件,缺省的情况下是不会安装该套件的, 因此我们可以这样做:
      [root@linux ~]# yum install createrepo
      # 就是安装某个套件而已,这个套件就是用在制作 repodata 目录的。
      
      [root@linux ~]# cd /disk1/yum/centos5
      [root@linux centos5]# cp repodata/comps.xml /tmp
      # 先将某些安装信息给他拷贝出来,准备利用。
      
      [root@linux centos5]# rm -r repodata
      # 原本的数据不需要了,将他删除掉再说。
      
      [root@linux centos5]# createrepo -g /tmp/comps.xml .
      # 重新创建好 repodata 目录啰!
      

    4. 启动与设置 NFS 文件系统

      接下来就是设置 NFS 啦!为什么要选择 NFS 呢?因为他够简单!哈哈!
      [root@linux ~]# vi /etc/exports
      /disk1/yum/centos5      *(ro)
      # 先设置好 NFS 所要分享的目录所在
      
      [root@linux ~]# chcon -t public_content_t -R /disk1/yum/centos5/
      # 确定一下你的这个目录是可以通过 SELinux 来管理分享的!
      
      [root@linux ~]# /etc/init.d/portmap start
      [root@linux ~]# /etc/init.d/nfs start
      [root@linux ~]# /etc/init.d/nfslock start
      # 将服务给他启动吧!
      
      [root@linux ~]# showmount -e localhost
      Export list for localhost:
      /disk1/yum/centos5 *
      
      如果可以看到最终的结果,那就表示你的 NFS 制作妥当了!
    最终可以知道我们是:
    • 安装协定使用 NFS
    • 主机名称为妳这部主机的 IP, 注意,不要使用 127.0.0.1 来安装!
    • NFS 的路径为 /disk1/yum/centos5
    好了,开始来安装干净的 Linux 系统在 domain-U 上面吧!

    利用 virt-install 指令安装干净的 CentOS

    有了 NFS 安装服务器后,再来我们使用 virt-install 来安装啰~ 安装的方式非常的简单,妳可以这样做即可:
    1. 先创建我们所需要的大文件来作为 domain-U 的磁盘:
    [root@linux ~]# dd if=/dev/zero of=/disk2/xen/centos5.virt.img \
    > bs=1M count=4096
    [root@linux ~]# chcon -t xen_image_t /disk2/xen/centos5.virt.img
    # 我创建了一个 4GB 大小的文件来作为安装之用!这个容量应该是够用的! ^_^
    # 比较需要注意的是,如果妳有启动 SELinux 时,请注意修改文件的安全内容。
    
    2. 开始使用 virt-install 来安装吧!
    [root@linux ~]# virt-install -n centos5_virt -r 256  \
    > -f /disk2/xen/centos5.virt.img --nographics \
    > -l nfs:192.168.1.254:/disk1/yum/centos5
    # -n :后面接你的 domain-U 的名称,这个名称的设置档会被主动创建在 /etc/xen 底下
    # -r :后面接妳要给这个 domain-U 的内存,目前至少需要 256MB 才能够运行
    # -f :后面接的就是那个要给 domain-U 的大文件啰!
    # --nographics :不使用图形接口来安装的意思;
    # -l :后面接安装服务器的来源。安装服务器的写法为:
    #   NFS 时:   nfs:主机的IP:可以安装的目录
    #   WWW 时:   http://主机的IP/实际的/完整目录
    #   FTP 时:   ftp://主机的IP/实际的完整目录
    
    如果一切顺利的话,现在就能够进入安装画面了!不过请注意,您的 domain-0 需要开放防火墙让人家使用 NFS 喔! 否则妳是无法顺利安装的啦! ^_^

    接下来的画面鸟哥是以 pietty 连上 domain-0 之后进行画面截取的,因为 Xen 的终端机接口显示本来就怪怪的, 加上鸟哥所使用的画面较小,所以您会发现怎么字体都会跑掉~真是不好意思~ 总之,跟一般文本接口的安装方式是一模一样啦!让我们开始来看看图标吧!

  • 1. 语系的选择:

    如下图所示,由于终端机模式仅有英文显示字符,因此我们直接选择『English』吧。 请注意使用 [Tab] 按键在各个组件之间跳动喔!

    先选择语系数据
    图 3-1、先选择语系数据

  • 2. 关于 domain-U 安装时的 IP 设置:

    一般 IP 设置有 DHCP 与手动设置,如果妳的主机所在环境具有 DHCP 服务器,且妳的安装服务器有针对内部网域开放防火墙时, 那为了方便,妳可以直接使用 DHCP 协定即可,如下图所示:(一般来说,鸟哥都会建议先取消 IPv6 的支持)

    设置 IP 取得为 DHCP 或者是手动直接给予 (Manual)
    图 3-2、设置 IP 取得为 DHCP 或者是手动直接给予 (Manual)

    万一妳的主机所在环境没有提供 DHCP 的服务时,那妳的 IP 就得要手动给予了。在上图当中请选择『 Manual configuration 』项目,则会出现如下图所示的情况,请填入局域网路的 IP 参数吧。 在本例中鸟哥的 domain-U IP 设置为 192.168.1.31/255.255.255.0 啰~

    手动设置 IP 的示意图
    图 3-2-1、手动设置 IP 的示意图

  • 3. 欢迎画面与分区警告消息:

    接下来仅是说明欢迎的画面,还有,因为我们使用的文件会被视为『一颗硬盘』而不是一个 partition , 所以会有警告消息说明要注意的地方而已。请留意,在缺省的情况下, 仿真的硬盘代号为 /dev/xvda 喔!

    只是欢迎画面!
    图 3-3、只是欢迎画面!

    只是一个警告消息,直接 OK 过去!
    图 3-4、只是一个警告消息,直接 OK 过去!

  • 4. 开始进行磁盘分割的动作:

    进入安装模式后,这个地方最重要!我们刚刚创建了一个 4GB 的文件作为硬盘之用,而这颗仿真硬盘的磁盘为 /dev/xvda, 我们知道在安装的时候最重要的两个 partition 为 / 与 swap ,所以就得要进行底下的分割咯! 如下所示,首先我们必须要创建一个客户自订的分割情况 (Create custom layout), 请使用 [Tab] 按键选择如同下图的说明:

    决定分割的模式,请使用 Custom layout
    图 3-5、决定分割的模式,请使用 Custom layout

    接下来进入到下图之后,我们必须要创建根目录 (/) 与虚拟内存 (swap),在这里我设置根目录为 3200MB, 至于 swap 则设置 256MB。创建的方法依序如下:

    进入分割画面的情况
    图 3-6、进入分割画面的情况

    依照图中的说明,分别选择各项参数
    图 3-7、依照图中的说明,分别选择各项参数

    另外一个 Swap 的设置方法
    图 3-8、另外一个 Swap 的设置方法

    若前两个画面设置妥当后,最后妳会看到如下的图标,检查看看是否一个根目录与一个 swap 呢? 若没问题的话,就按下 [OK] 吧!

    最终的分割表状态
    图 3-9、最终的分割表状态

    只是警告虚拟内存比物理内存少,不用理会他!
    图 3-10、只是警告虚拟内存比物理内存少,不用理会他!

  • 5. boot loader 以及开机选项

    设置到此,我们可以开始来决定开机管理程序的相关动作了。首先,当然一定需要 boot loader 啊! 所以如同下图,我们要使用 Grub 啰!

    使用 grub 作为开机菜单
    图 3-11、使用 grub 作为开机菜单

    在缺省的情况中,domain-U 所使用的终端接口 (console) 为利用 xvc0 这个设备来处理的, 这个部分缺省会出现,所以不必理会他!

    domain-U 所使用的终端接口设备
    图 3-12、domain-U 所使用的终端接口设备

    是否需要开机菜单密码?不需要吧?
    图 3-13、是否需要开机菜单密码?不需要吧?

    菜单只有一个,所以就不用改了。
    图 3-14、菜单只有一个,所以就不用改了。

    当然是安装在 /dev/xvda 的 MBR 中!
    图 3-15、当然是安装在 /dev/xvda 的 MBR 中!

  • 6. 网络设置参数:

    再来就是网络参数的设置部分,鸟哥建议您可以先随便设置,未来要使用这个 domain-U 时, 再详细的设置即可。在这里鸟哥都使用默认值来指定而已。

    使用缺省的 DHCP 与 IPv4 即可
    图 3-16、使用缺省的 DHCP 与 IPv4 即可

    主机名称也先不要设置,使用 DHCP 默认值
    图 3-17、主机名称也先不要设置,使用 DHCP 默认值

  • 7. 时区与 root 密码:

    因为我们使用台湾时区,所以这里要仔细的选择喔!

    时区请务必选择台湾啊!
    图 3-18、时区请务必选择台湾啊!

    root 密码要设置,不要随便啊!
    图 3-19、root 密码要设置,不要随便啊!

  • 8. 套件安装的选择以及实际开始安装:

    由于我们希望的 domain-U 是用来进行服务器架设的,所以这里鸟哥选择 Server 而已, 如下图所示。整体安装起来差不多是 1.x GB 的容量而已喔!

    仅选择 Server 的安装设置
    图 3-20、仅选择 Server 的安装设置

    仅是分析套件的相依性画面而已
    图 3-21、仅是分析套件的相依性画面而已,请等待!

    这个是通知消息,告知你的选择将会被记录到该处
    图 3-22、这个是通知消息,告知你的选择将会被记录到该处

    看到否,开始安装的整个过程
    图 3-23、看到否,开始安装的整个过程

    安装完毕,请重新开机吧!
    图 3-24、安装完毕,请重新开机吧!

    重新开机完毕后,出现等待登录的画面示意
    图 3-25、重新开机完毕后,出现等待登录的画面示意

    整个过程非常的简单,就如同妳在安装一部文本接口的 Linux 主机一般。 从开始安装到结束的整个过程中,花费比较多时间在设置项目,完整安装差不多 10 分钟就搞定了。 这还是因为鸟哥使用旧型主机来安装的,鸟哥曾以新 P4 主机来安装过这一整个流程, 开始安装到结束不到 3 分钟,实在是非常的快速啊!

    接下来妳可以查阅一下 /etc/xen/centos5_virt 显示的内容, 该文件是由 virt-install 主动帮我们创建的,我的数据如下所示:
    [root@linux ~]# cat /etc/xen/centos5_virt
    # Automatically generated xen config file
    name = "centos5_virt"
    memory = "256"
    disk = [ 'tap:aio:/disk2/xen/centos5.virt.img,xvda,w', ]
    # 仔细瞧,发现 xvda 了吗?就是这里决定的啦!
    
    vif = [ 'mac=00:16:3e:2f:4a:ef, bridge=xenbr0', ]
    # 可以直接指定仿真网卡的实体卡号以及使用的桥接器
    
    uuid = "9a968f71-c36b-d48a-5a03-304bb41a639f"
    # 甚至可以直接定义设备的 uuid 号码呢!
    
    bootloader="/usr/bin/pygrub"
    # 没有内核了!而是利用 domain-U 自己的内核来开机的!
    # 要使用 domain-U 的内核来开机,就得用这个设置项目才行!
    
    vcpus=1
    on_reboot   = 'restart'
    on_crash    = 'restart'
    
    接下来请开始使用 xm create -c centos5_virt 来启动这个干净无暇的 domain-U 啰!

  • CentOS5 所提供的一个实例

    虽然 virt-install 已经有够好用了,不过在某些情况下还是无法运行的。首先, virt-install 要求 domain-U 在安装时一定要给予 256MB 的内存,如果妳的内存少于 256MB 时,肯定无法运行 virt-install ~ 再者在 SELinux 启动的情况下,可能还会有无法运行 virt-install 的情况发生。 还好, CentOS5 提供了一个可以驱动安装程序的内核给我们来进行安装过程! 接下来我们将以 CentOS5 官网所提供的 kernel file 来进行安装的实作喔!

    其实整个过程挺简单的,最重要的就是必须要使用 CentOS5 官网所提供的内核与虚拟磁盘映像档, 有这两个东西就能够处理安装的进程了。底下我们就一步一步来处理这个设置吧!

  • 0. 创建网络连接所需的 DHCP 服务器
    在缺省的情况下 Xen 使用的网络环境为利用桥接方式 (bridge) 来链接实际的网络环境。 但在这种模式底下 domain-U 在安装时,取得 IP 的方式主要为利用 dhcp 协定, 使用手动的方式来设置 IP 却是不可行的方案!除非要转成利用 NAT 的模式来处理。 假设我们都先不更改 Xen 的缺省环境,那么我们就得要针对 Xen 的网络模式来创建一部 dhcp 服务器了。

    详细的 dhcp 服务器建置方法请参考服务器架设篇的介绍, 鸟哥在这里仅利用一些时间很快的将整个流程处理一下吧! 需要注意的是,如果妳的网域内已经有一个 public 的 dhcp 了,那么您在建置这个给 domain-U 用的 DHCP 时, 特别留意不要影响到其他的 dhcp 主机喔!鸟哥这里假设我的 domain-U 的 MAC 为 00:16:3E:00:00:11 , 所以有针对这个 MAC 来处理喔!
    1. 先检查妳的 domain-0 是否有安装 dhcp 呢?
    [root@linux ~]# rpm -qa | grep dhcp
    dhcp-3.0.5-5.el5
    # 如果没有出现上述的套件时,请自行使用 yum install dhcp 吧!
    
    2. 修改 DHCP 的设置档
    [root@linux ~]# vi /etc/dhcpd.conf
    ddns-update-style none;
    subnet 192.168.1.0 netmask 255.255.255.0 {
         option routers                  192.168.1.254;
         option subnet-mask              255.255.255.0;
         option domain-name              "xen.test";
         option domain-name-servers      168.95.1.1;
         range 192.168.1.20 192.168.1.25;
         default-lease-time 21600;
         max-lease-time 43200;
         host dic1 {
              hardware ethernet 00:16:3E:00:00:11;
              fixed-address 192.168.1.31;
         }
    }
    # 鸟哥就是利用那个 hardware ethernet 来控制某个网卡来源的要求的啦!
    
    3. 启动与观察
    [root@linux ~]# /etc/init.d/dhcpd start
    [root@linux ~]# netstat -tlunp
    Proto Recv-Q Send-Q Local Address  Foreign Address State  PID/Program name
    udp        0      0 0.0.0.0:67     0.0.0.0:*              22285/dhcpd
    # 重点在那个 port 67 啰~
    
    4. 防火墙的处理!
    [root@linux ~]# iptables -I INPUT -p udp --dport 67 -j ACCEPT
    [root@linux ~]# iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
    # 重点在开放用户端对于主机的连接啰!这个要设置好!
    
    如此一来 DHCP 主机就设置好了,简单吧!再来开始其他的处理吧!

  • 1. 创建 domain-U 所需要的虚拟磁盘
    同样的,利用 dd 这个指令来创建他吧!鸟哥依旧将我的映像档放置到 /disk2/xen 底下去。
    [root@linux ~]# dd if=/dev/zero of=/disk2/xen/centos5.office.img  \
    > bs=1M count=3072 oflag=direct
    [root@linux ~]# chcon -t xen_image_t /disk2/xen/centos5.office.img
    [root@linux ~]# ll -Z /disk2/xen/centos5.office.img
    -rw-r--r--  root root user_u:object_r:xen_image_t    centos5.office.img
    
    除了要创建这个大文件之外,不要忘记那个可爱又可怕的 SELinux 类型也需要同时变更! 这点大家都很容易忘记!包括鸟哥在内~ @_@

  • 2. 设置终端机接口
    这个动作在前面的小节中已经讲过了,这里特别再列出来,因为如果妳没有作这个动作, 很可能在 domain-U 的地方会让您无法使用 console 的方式登录 domain-U ,届时您可能需要使用类似 ssh 的网络连接方式才能够登录 domain-U 哩! 而且,如果没有作这个动作,你的 domain-0 则会一直在 /var/log/messages 出现一些错误~实在讨厌~ 实作的方法很简单:
    [root@linux ~]# vi /etc/inittab
    # 大约在第 51 行的地方加入底下特殊字体的部分:
    5:2345:respawn:/sbin/mingetty tty5
    6:2345:respawn:/sbin/mingetty tty6
    co:2345:respawn:/sbin/agetty xvc0 9600 vt100-nav
    # 意思是使用 agetty 创建 xvc0
    
    [root@linux ~]# init q
    # init q 这个指令可以让 /etc/inittab  的设置立刻生效而不需要重新开机!
    
    [root@linux ~]# ln -s /dev/console /dev/xvc0
    
  • 3. 下载 CentOS5 用来安装 Xen 的内核与映像档
    CentOS5 官网提供的可安装 Xen 内核在底下的链接,分为 i386 与 x86_64 版本:
    鸟哥使用的是 i386 的版本。下载与处理的方式可以这样做:
    [root@linux ~]# cd /boot
    [root@linux boot]# wget  \
    > http://mirror.centos.org/centos/5/os/i386/images/xen/vmlinuz
    [root@linux boot]# wget  \
    > http://mirror.centos.org/centos/5/os/i386/images/xen/initrd.img
    # 先下载这两个文件下来,为了方便记忆,所以鸟哥习惯将文件名修改一下:
    
    [root@linux boot]# mv vmlinuz centos5_xen_vmlinuz
    [root@linux boot]# mv initrd.img centos5_xen_initrd.img
    [root@linux boot]# restorecon /boot/*
    # 最后一个动作 (restorecon) 在处理 SELinux 的问题啦!
    
    所以我们已经取得 CentOS5 官网所提供的内核与映像档了!准备处理设置档啰~

  • 4. 撰写『安装用』设置档
    接下来我们得先就可安装的内核来进行设置档的编写。我这里比较有趣的地方在于几个部分:
    • 我具有 NFS 安装服务器,该服务器 IP 为 192.168.1.254,路径为 /disk1/yum/centos5
    • domain-U 在安装时的 MAC 假设为 00:16:3e:00:00:11,且通过 DHCP 取得 IP;
    • 使用 kickstart 方式来安装,而 kickstart 的设置档放置到安装服务器的 /disk1/yum/centos5/ks.xen.centos5.txt 内
    什么是 kick start 呢?我们刚刚在前一小节使用 virt-install 安装时,不是有很多的选择画面吗? 所谓的 kick start 就是将所有的选择项目都写入某一个设置档,如此一来,就可以免除手动去挑选的困扰了。 因此,我们会有两个文件需要创建。首先,我们创建 Xen 的设置档,文件如下:
    [root@linux ~]# vi /etc/xen/centos5_xen_install
    kernel  = "/boot/centos5_xen_vmlinuz"
    ramdisk = "/boot/centos5_xen_initrd.img"
    extra   = "text ks=nfs:192.168.1.254:/disk1/yum/centos5/ks.xen.centos5.txt"
    name    = "centos5_xen_install"
    memory  = "128"
    disk    = [ 'file:/disk2/xen/centos5.office.img,xvda,w', ]
    vif     = [ 'mac=00:16:3e:00:00:11, bridge=xenbr0', ]
    vcpus   = 1
    on_reboot = 'destroy'
    on_crash  = 'destroy'
    # 上面比较特别的只有那个 extra 而已,那个是内核的额外参数说明!
    
    我们还得创建 kick start 的设置档内容。其实你的 CentOS 本来就有 kickstart 的设置档了, 详情请参考你自己的 /root/anaconda-ks.cfg 文件,您就晓得啰!更详细的 kickstart 请先参考如下网页:
    鸟哥这里仅作个简单的设置而已:
    [root@linux ~]# vi /disk1/yum/centos5/ks.xen.centos5.txt
    # 1. 与安装有关的设置,尤其是 NFS 的设置最要紧!
    install
    nfs --server=192.168.1.254 --dir=/disk1/yum/centos5
    
    # 2. 语系的支持以及键盘对应表
    lang en_US.UTF-8
    langsupport --default en_US.UTF-8 zh_TW.BIG5 zh_TW.UTF-8 zh_HK.UTF-8 \
    zh_CN.GB18030 en_US.UTF-8
    keyboard us
    
    # 3. 网络设置,记住,要与 NFS 安装服务器同网域才行!
    network --device eth0 --bootproto dhcp
    
    # 4. 密码与防火墙还有 SELinux 与时区的相关设置
    rootpw --iscrypted $1$NGE.r9ik$D9iqc2bfdpi1DYvqC2CwP.
    firewall --enabled --port=
    authconfig --enableshadow --enablemd5
    selinux --enforcing
    timezone Asia/Taipei
    
    # 5. 开机管理程序,注意那个 driveorder 项目,我们的硬盘是虚拟的喔!
    bootloader --location=mbr --driveorder=xvda --append="console=xvc0"
    reboot
    
    # 6. 磁盘分割表的操作以及安装的套件数据
    clearpart --all --initlabel --drives=xvda
    part /boot --fstype ext3 --size=100 --ondisk=xvda
    part / --fstype ext3 --size=2048 --ondisk=xvda --asprimary
    part swap --size=512 --ondisk=xvda
    %packages
    @core
    # 如果妳曾经安装过 Linux ,那么上面的选项对妳来说,应该不难了解。
    # 比较特殊的是 rootpw 那个项目,鸟哥是由 /etc/shadow 拷贝加密的密码来的,
    # 如此则 root 的密码也设置妥当,而且是加密过的数据。
    # 在本案例中的 root 密码为 123456789 喔!
    
    [root@linux ~]# chcon -t public_content_t \
    > /disk1/yum/centos5/ks.xen.centos5.txt
    
    如此则将两个设置数据给他设置好了。接下来就是进行安装的流程喔~

  • 5. 实际安装过程
    实际安装真是太简单了!直接启动 Xen 即可啊!请下达:『xm create -c centos5_xen_install』吧! 然后在出现一小段时间的 IP 侦测、硬件侦测、套件数据分析等画面后,就会主动的进入实际安装套件的画面! 接下来我们啥事都不需要担心,所有的安装过程 kickstart 系统都会帮我们搞定的。 实际上,妳要做的就只是...喝茶看报纸吧!不过如果妳的 domain-0 系统非常的高性能, 老实说,喝茶的时间实在是不够用~ @_@,因为可能 3 分钟就安装完毕了~ ^_^

    kickstart 就是这么好用!妳可以将这一组设置放在妳的安装服务器上面,未来想要安装一模一样的环境时, 直接在安装的过程加载这个文件即可,我们不需要还手动挑选有的没有的啦! ^_^

  • 6. 修改成为可以正常开机的设置档
    在上述第四个步骤时,我们所创建的 /etc/xen/centos5_xen_install 是专门用来安装用的设置档。 既然已经安装妥当了,这个文件就不能继续的使用,否则每次都会重复的进入安装的画面, 会一直不断的重新安装....

    所以接下来我们得要修改一下设置档才行。设置档可以改成底下的模样喔:
    [root@linux ~]# vi centos5_xen_run
    name    = "centos5_xen_run"
    memory  = "128"
    disk    = [ 'file:/disk2/xen/centos5.office.img,xvda,w', ]
    vif     = [ 'mac=00:16:3e:00:00:11, bridge=xenbr0', ]
    vcpus   = 1
    on_reboot = 'restart'
    on_crash  = 'restart'
    bootloader = "/usr/bin/pygrub"
    # 其实就是加入那个 pygrub 的运行档而已。该文件的作用就是
    # 作为一个开机加载器来加载 domain-U 开机所需使用的内核与虚拟磁盘。
    
    接下来如果想要使用刚刚完成的 domain-U 来登录时,请使用:『 xm create -c centos5_xen_run 』来启动吧! 启动的画面如下所示,妳会发现,怎么通过终端机可以跟在屏幕前面一个模样!还能看到 grub 哩! 真是有够棒的!

    启动 domain-U 的画面
    图 3-26、启动 domain-U 的画面

    选择好妳所需要的开机选项后,嘿嘿!就能够在 pietty 之类的环境完整的操作你的 domain-U 了! 说实在的,用在教学上,实在是很棒的一个好主意!
  • 参考数据

    修改历史:
    2007/10/20:经过多日的奋战,终于将 Xen 的半虚拟化安装与操作的方法写出来!全虚拟化的部分还在构思中~
    2007/10/24:通过网友 lvan 的回报,发现没有建置 /dev/xvc0 会有终端接口的问题,所以补上;
    2007/10/24:同样通过 lvan 兄的回报,可以使用 [ctrl]-] 来离开 domain-U 的终端接口!谢谢 lvan 兄!
    2008/09/09:感谢讨论区网友donyingle提供的AMD的64比特CPU的相关信息,终于有CPU的flags了!

    2007/10/20 以来统计人数

    其他链接
    环境工程模式篇
    鸟园讨论区
    鸟哥旧站

    今日 人数统计
    昨日 人数统计
    本月 人数统计
    上月 人数统计