xen虚拟机简介
2010-03-27 17:46:06 阿炯

Xen 是一个开放源代码虚拟机监视器,由剑桥大学开发。它打算在单个计算机上运行多达128个有完全功能的操作系统。操作系统必须进行显式地修改(“移植”)以 在Xen上运行(但是提供对用户应用的兼容性)。这使得Xen 无需特殊硬件支持,就能达到高性能的虚拟化。

IBM经常在其主机和服务器上使用虚拟机来尽可能发挥其性能,并类似chroot监禁那样将程序置于隔离的虚拟OS中以增强安全性。除此之外,它还能使不同和不兼容的 OS运行在同一台计算机上。Xen支持在运行时进行迁移,保证正常运行并且避免当机。

与其它VMM的比较
* Adeos
* Denali使用准虚拟化技术来提高x86电脑上虚拟机的性能。Denali的虚拟机为因特网服务专门支持了最小化的操作系统,系统可以运行上千虚拟机。 Xen与Denali不同,因为它试图运行适当数量的完整操作系统,而非大量轻量级操作系统。
* QEMU
* Virtuozzo
* OpenVZ
* VMware为 x86提供虚拟机,这些虚拟机可以运行未修改的PC操作系统。所涉及的技术极为复杂,也导致了性能的(有时相当显著)下降。Xen牺牲了完全的二进制兼 容,换取相对的简易性和改善的性能。
* Bochs
* Linux-VServer
* Solaris Zones
* Cooperative Linux


Xen的半虚拟化
Xen通过一种叫做半虚拟化的技术获得高效能的表现(较少的效能损 失,典型的情况下大约损失 2%,在最糟的情况下会有 8% 的效能耗损;与其它使用完全的虚拟化却造成最高到 20% 损耗的其他解决方案形成一个明显的对比),甚至在某些与传统虚拟技术极度不友好的架构上(x86),Xen也有极佳的表现。与那些传统透过软件模拟实现硬 件的虚拟机不同,在3.0版本及在Intel VT-X支援前的Xen需要让客座作业系统(guest operating systems)与Xen API进行连接。到目前为止,这样连结已经可以运用在NetBSD,GNU/Linux,FreeBSD和贝尔实验室的Plan 9系统上。在Brainshare 2005会议上,Novell展示了NetWare与 Xen的连通。与Windows XP连通的技术曾在Xen开发初期进行,但微软的协议未能允许它发布。Sun微系统公司也正积极研究Solaris与 Xen的连结,使其能在Xen平台上运作。

Xen的完全虚拟化
Intel对Xen贡献修改以支持其VT-X Vanderpool架构扩展。如果主系统支持 Vanderpool或者Pacifica扩展(Intel和AMD对本地支持虚拟化的扩展),这项技术将允许未修改的客操作系统运行在Xen虚拟机中。 事实上,那意味着性能的提升,并且你可以在没有进行任何协议不允许的修改的情况下对Windows进行虚拟。

虚拟机的迁移
Xen 虚拟机可以在不停止的情况下在多个物理主机之间即时迁移(live migration)。在操作过程中,虚拟机在没有停止工作的情况下内存被反复的复制到目标机器。虚拟机在最终目的地开始执行之前,会有一次60-300 毫秒的非常短暂的暂停以执行最终的同步化,给人无缝迁移的感觉。类似的技术被用来暂停一台正在运行的虚拟机到磁盘,并切换到另外一台,第一台虚拟机在以后 可以恢复。

平台支持
Xen目前可以运行在x86及x86-64系统上,并正在向IA64、PPC移植。移植到其他平台从技术上是 可行的,未来有可能会实现。Unix-like系统中的Xen
* Novell 于2005 年4月15日发布的 SUSE Linux Professional 9.3 已内含 Xen 2.0.5c 版本。
* RedHat 的 Fedora Project 于2005年6月13日发布的 Fedora Core 4 亦已内含 Xen。
* Xenophilia是一个基于Xen的Linux发行版。
* Xen demo CD是一个运行Debian Linux的liveCD,使你在系统上试用Xen,不用安装到硬盘。
* Debian Testing 亦已内含 Xen。
* NetBSD 2.0包括对Xen 1.2的支持,即将发布的3.0包括对Xen 2.0的支持。


虚拟化是热门的数据中心技术,它凭借其 整合和节省费用的潜力而吸引业界的注意。正如8月6日~9日在旧金山举行的 LinuxWorld大会上证明的那样,开源和Linux平台处在这 一趋势的最前沿。事实上,鉴于专有软件存在的许可证问题,廉价或免费开源软件与虚拟化平台的组合,是推动Linux在数据中心得到广泛采用的最重要的媒 介。或许可以说,这二者是天生的一对完美组合,可以相得益彰。随着VMware的IPO成功,虚拟化技术正变得更加广为人知,这也给开源的虚拟化 技术发展创造了机会。

大名鼎鼎的Xen
Xen Hypervisor是产生基于Xen平台的商用虚拟化软件的XenSource公司的创建者们开发的开源虚拟化引擎。Xen作为一种“引擎”来提供,开 发人员可以围绕它开发满足他们特定部署(如服务器、客户机、PDA或嵌入式产品)的组件。鉴于虚拟化领域的良好机会和前途,Citrix打算以5 亿美元的价格收购XenSource,这将能够帮助Citrix进入服务器和桌面虚拟化市场。而此前,EMC收购VMware时仅仅花费了6.35 亿美元,在近日VMware成功IPO之后,VMware的市值已经高达190亿美元。但是很难预计Citrix所收购的XenSoure能否创造这样的 增长奇迹。

RONS (Red Hat, Oracle, Novell, Sun)
所有这些厂商都提供基于Xen管理程序的虚 拟化技术。差别在于每家厂商都以开源式的方式修改了Xen,以满足自己的特定需要和目标。

Novell早在其推出SuSE 10的时候,就已经在大肆宣扬其中所包含的Xen虚拟化能力,并且在2007年联合IBM、Intel、HP等召开了虚拟化世界大会巡展,力图推动 Linux领域的虚拟化应用。

Red Hat也在今年上半年发布Red Hat企业版 5.0的时候加入了Xen虚拟化模块,将虚拟化作为推动其Linux销售的重大卖点之一。


Sun也表示会在今年夏天将Xen整合进入其 Solaris 10升级版本中,届时Solaris 10操作系统将全面支持Xen,用户可以在安装Solaris 10的虚拟机上同时操作Linux、Windows和Solaris 10等各种系统。不过,Sun也表示将会发布最新的虚拟化技术,支持文件系统虚拟化和运行时间内容,无须使用VMware和Xen等虚拟化技术。

基 于虚拟机的内核(KVM)
此KVM是基于Linux内核的虚拟机(Kernel-based Virtual Machine),而不是传统所说的键盘、视频和鼠标切换器。该项目由一家名为Qumranet的新兴公司所支持。由于其与众不同的特性,很快获 得了包括Red Hat与Linux项目创始人Torvalds的支持。在Linux大会上,Qumranet公司表示,将会在今年第四季度发布其第一款产品。


KVM 是第一种成为传统Linux内核(V2.6.20)一部分的虚拟化技术,它为Linux系统提供了一种新的划分机制,能够将一台计算机当成许多台来用。它 采用的虚拟化方法有别于利用 “hypervisor”来执行的方法。它是为包括虚拟化扩展的x86硬件(Intel VT或AMD-V)设计的。KVM包括可加载的内核模块和针对具体处理器的模块,它可以运行Windows和Linux虚拟机。每个虚拟机都有专用的虚拟 化硬件,包括网卡、硬盘和显卡。KVM已经如此地引入瞩目,受到业界好评,因此在今年8月29到31日,将在亚利桑那州的Tucson举行第一次KVM大 会。

KVM对决Xen
KVM的缺点在于只能运行在Linux上,不过它也有一些优点,比如说具有内存管理特性。与Xen一 样,KVM具有可扩展的巨大潜力(又一个继承而来的Linux特点)。同Xen一样,KVM的电源管理,即所谓的绿色特性可能有所欠缺,并且它的 内存支持较弱。Xen具有更好的管理特性,显然可以运行在更多的平台上。此外,Xen还支持准虚拟化。所谓准虚拟化是一种创建客户操作系统与硬件之间的代 理技术。虽然KVM是基于内核而创建,但是Xen也被Linux内核支持。据XenSource的blog的消息,在7月份,Linux Torvalds将XenSource作为补丁进入了Linux内核,会作为2.6.23的一部分。


Xen比KVM在时间上领先很多。毕竟Xen已经被集成到了Red Hat和Novell SuSE两大Linux领导版本中,并且其商业版XenSource也签下了500多个商业客户。XenEnterprise的4.0版本也将会在8月底发布,将会通过与其合作伙伴Symantec的合作,支持一些高级管理特性,诸如存储和服务器虚拟化。


但是,Red Hat和Novell的管理层都表示,将会确保客户获得对各种虚拟化引擎的支持。比如说Red Hat就已经发布了一个开源的虚拟化API项目,该项目被称为“Libvirt”,能够确保各种虚拟机之间的互操作。目前支持Xen、KVM和Qemu。创办了KVM的Qumranet公司联合创始人、总裁Rami Tamir表示:“KVM将会后来者居上”。不过他也承认,Xen已经占据了先机, 具有一定的先发优势。

虚拟化类型
像Xen这样类型的Hypervisor可以直接运行在硬件平台上;而像OpenVZ这种类型的 虚拟化软件运行在操作系统中,创建一个包括硬件、操作系统管理程序和客户操作系统在内的栈。

创建虚拟化环境
XenSource公 司CTO Simon Crosby说,用户必须围绕虚拟化构建一个生态系统,并且它必须支持Windows和Linux。他说,这个生态系统的要求包括扩展虚拟化平台来支持存 储虚拟化、安全和管理功能。

主机仿真和其他平台
Qemu、Bochs和VirtualBox是属于虚拟化类并支持不同客户操作系 统的主机仿真技术的例子,Virtual Box有一个今年1月依照GPL发布的开源版本。其独有的特性包括通过虚拟桌面协议(RDP)远程运行虚拟机、通过RDP的远程设备实现对iSCSI和 USB的支持。OpenVZ是一种经过修改包含OS级虚拟化技术的Linux内核(修改自SWsoft的Virtuozzo),它遵循GPLv2授权。

----------------------------------------------------------
来自Xen官方网站的消息:开源主流虚拟化管理程序Xen发布了最新版本4.0.0。
这一版本的主要新特性包括:
1. 更好的性能和可伸缩性,客户机支持128个虚拟CPU,主机支持1 TB RAM和128个物理CPU;
2. 支持blktap2 for VHD image,包括高性能快照和克隆;
3. 使用硬件加速IO虚拟化技术(Intel VT-d和AMD IOMMU)改进IOMMU PCI passthru;
4. Remus容错;等等。


---------------------------------------------------------
新增功能20余项 Xen 4.0重大提升

Xen.org近日发布了开源Xen虚拟机管理程序的新版本;尽管这个新的虚拟化平台还不如其竞争对手VMwarev Sphere的功能特性来得全面,但Xen.org向外发布Xen的最新版:4.0后,更新后的这款虚拟机管理程序现在其版本号赶上了vSphere。


Xen 4.0紧随2009年11月发布的Xen 3.4.2之后发布。Xen.org将该新版本称为"市面上最先进的开源虚拟机管理程序软件",并且表示该版本是全球开发团队共同努力的结晶,这支团队汇集了50多家领先的技术厂商、高等院校和虚拟化专家。该团队声称,Xen 4.0将为处理企业内部工作负载和云计算工作负载提供大幅改善的性能。


思杰系统公司数据中心和云计算部门的首席技术官Simon Crosby说:"Xen 4.0中新的先进技术将把云计算和虚拟化带到新的层面,而思杰致力于将这些先进技术运用到我们从桌面虚拟化到云计算的全部产品线上。"
为了增强主机层面的性能和可扩展性,新的Xen 4.0虚拟机管理程序现在横跨主机服务器上的128个物理处理器,最多可以处理1TB的物理主系统内存。在访客环境中,基于Xen 4.0运行的虚拟机现在可以分配给多达128个虚拟处理器(不过虚拟机方面的内存容量并不清楚)。


其他改进之处包括:可充分利用新的英特尔至强(Nehalem-EX)和AMD皓龙6000处理器中新的可靠性、可用性和可服务性(RAS)功能。用户现在可以热插拔物理服务器中的处理器和内存,没必要关闭虚拟机管理程序或服务器上的虚拟机。用户现在还可以调整虚拟硬盘的大小,不需要重启或关闭虚拟机,这是另一项节省时间的优良特性。


Xen 4.0为该虚拟机管理程序增添了另外二十多项新的改进之处,其中最重要的恐怕就是增添了容错功能,这归功于瑞摩斯项目(Project Remus)。该虚拟机管理程序现在包括这项功能:支持物理服务器之间虚拟机状态的实时事务同步,从而让管理员能够确保高级别的服务可靠性,不需要额外的软件解决方案。新的容错功能让一台物理服务器上的虚拟机能够由另一台物理服务器上的虚拟机来镜像。那样,要是一台物理服务器出了故障,备用虚拟机会在第二台服务器上继续运行;对用户来说,工作负载的处理不会受到任何明显干扰。


另一项先进的新增功能名为Netchannel2,这项技术可充分利用网络硬件方面取得的重大改进,比如拥有多队列和单根-I/O虚拟化(SR-IOV) 功能的SMART网卡等硬件。这为虚拟化基础架构提供了卓越的数据处理功能,允许众多的网络流量进入到基于Xen的虚拟机中。有了这项技术,一块网卡在单个虚拟机面前就相当于独立的网络适配器。


虚拟硬盘(VHD)的快照和克隆功能也得到了改进,支持Blktap2驱动程序。Xen 4.0中新实现的VHD提供了高性能的虚拟机快照和克隆功能,另外提供了不需要停止虚拟机流程,即可实时拍取虚拟磁盘快照的功能。Xen 4.0还新增了内存方面的改进。它采用了Transcendent Memory和页共享(Page Sharing)等新算法,以增强虚拟机管理程序在内存操作方面的性能和能力。Transcendent Memory(tmem)提供了一种新方法,可通过收回没有得到利用的内存,并提供给最需要内存的地方,从而改善虚拟化环境中物理内存的利用率。据说 tmem就好比是快速内存磁盘(RAMdisk):当实际内存短缺,而且只能通过工作不稳定、基于内存页拷贝的接口进行访问时,快速内存磁盘就大有用场。 Xen 4.0还增添了最初实现的内存页共享。这让多个虚拟机可以共享共同的内存页,从而降低总的内存耗用量。


更新后的虚拟机管理程序还通过改善某些直通(pass through)技术,提升了性能。Xen 4.0可以更有效地利用英特尔至强I/O虚拟分配(VT-d)和AMD皓龙I/O内存管理单元(IOMMU)功能中的加速I/O虚拟化技术,从而改善虚拟化I/O。它还通过使用VGA主图形卡直通技术,从访问操作系统直接访问图形卡GPU,从而提供了对高性能图形的支持。


能够运行高性能、网络密集型、对延迟敏感的应用程序,这意味着几乎任何工作负载现在都能在虚拟机环境里面加以处理。由于处理器和虚拟机管理程序方面继续得到改进,管理员将来能放眼整个数据中心,表示几乎任何应用程序现在都非常适合虚拟化处理,因为性能方面的限制越来越少。Xen社区网站(http://xen.org/)上有一份完整列表,详细介绍了Xen 4.0中所有新的功能特性和改进之处。

---------------------------------------------------------
Xen 成为 Linux 基金会项目

Linux 基金会于2013年4月下旬宣布 Xen 项目现在属于基金会的项目之一,位于基金会的"协作项目"下。

Xen 是一个开放源代码虚拟机监视器,由剑桥大学开发。它打算在单个计算机上运行多达100个满特征的操作系统。操作系统必须进行显式地修改(“移植”)以在Xen上运行(但是提供对用户应用的兼容性)。这使得Xen无需特殊硬件支持,就能达到高性能的虚拟化。其一开始就为了云计算而设计,经过 10 年的发展已经拥有超过千万用户,希望 Linux 基金会成为一个中立的机构为该项目提供指导和促进发展。

---------------------------------------------------------
Xen迁移方案-Xen4CentOS

CentOS 于2013年6月下旬发布了 Xen4CentOS 项目,该项目的目的是为了帮助 CentOS 5 的 Xen 用户移植到 CentOS 6,同时更新到 Xen 4 。因为 RHEL 6 不再提供 Xen,改用了 KVM,这使得 CentOS 和 Xen 用户没有更新的方法。该项目就是为了解决这一一个问题。

---------------------------------------------------------
Linux上的虚拟化技术Xen初学者指南

Xen是一个开放源代码虚拟机监视器,由剑桥大学开发。它打算在单个计算机上运行多达128个有完全功能的操作系统。操作系统必须进行显式地修改(“移植”)以在Xen上运行(但是提供对用户应用的兼容性)。这使得Xen无需特殊硬件支持,就能达到高性能的虚拟化。

目录
* 1 使用
* 2 与其它VMM的比较
* 3 Xen的半虚拟化
* 4 Xen的完全虚拟化
* 5 虚拟机的迁移
* 6 平台支持
* 7 Unix-like系统中的Xen
* 8 参见
* 9 外部链接

使用
IBM经常在其主机和服务器上使用虚拟机来尽可能发挥其性能,并类似chroot监禁那样将程序置于隔离的虚拟OS中以增强安全性。除此之外,它还能使不同和不兼容的OS运行在同一台计算机上。Xen支持在运行时进行迁移,保证正常运行并且避免当机。

与其它VMM的比较
* Adeos
* Denali使用准虚拟化技术来提高x86电脑上虚拟机的性能。Denali的虚拟机为因特网服务专门支持了最小化的操作系统。系统可以运行上千虚拟机。Xen与Denali不同,因为它试图运行适当数量的完整操作系统,而非大量轻量级操作系统。
* QEMU
* Virtuozzo
* OpenVZ
* VMware为x86提供虚拟机,这些虚拟机可以运行未修改的PC操作系统。所涉及的技术极为复杂,也导致了性能的(有时相当显著)下降。Xen牺牲了完全的二进制兼容,换取相对的简易性和改善的性能。
* Bochs
* Linux-VServer
* Solaris Zones
* Cooperative Linux

Xen的半虚拟化
Xen通过一种叫做半虚拟化的技术获得高效能的表现(较少的效能损失,典型的情况下大约损失 2%,在最糟的情况下会有 8% 的效能耗损;与其它使用完全的虚拟化却造成最高到 20% 损耗的其他解决方案形成一个明显的对比),甚至在某些与传统虚拟技术极度不友好的架构上(x86),Xen也有极佳的表现。与那些传统透过软件模拟实现硬件的虚拟机不同,在3.0版本及在 Intel VT-X支援前的Xen需要让客座作业系统(guest operating systems)与Xen API进行连接。到目前为止,这样连结已经可以运用在NetBSD,GNU/Linux,FreeBSD和贝尔实验室的Plan 9系统上。在Brainshare 2005会议上,Novell展示了NetWare与 Xen的连通。与Windows XP连通的技术曾在Xen开发初期进行,但微软的协议未能允许它发布。Sun微系统公司也正积极研究Solaris与Xen的连结,使其能在Xen平台上运作。

Xen的完全虚拟化
Intel对Xen贡献修改以支持其VT-X Vanderpool架构扩展。如果主系统支持Vanderpool或者Pacifica扩展(Intel和AMD对本地支持虚拟化的扩展),这项技术将允许未修改的客操作系统运行在Xen虚拟机中。事实上,那意味着性能的提升,并且你可以在没有进行任何协议不允许的修改的情况下对Windows进行虚拟。

虚拟机的迁移
Xen虚拟机可以在不停止的情况下在多个物理主机之间实时迁移。在操作过程中,虚拟机在没有停止工作的情况下内存被反复的复制到目标机器。虚拟机在最终目的地开始执行之前,会有一次60-300毫秒的非常短暂的暂停以执行最终的同步化,给人无缝迁移的感觉。类似的技术被用来暂停一台正在运行的虚拟机到磁盘,并切换到另外一台,第一台虚拟机在以后可以恢复。

平台支持
Xen目前可以运行在x86及x86-64系统上,并正在向IA64、PPC移植。移植到其他平台从技术上是可行的,未来有可能会实现。

Unix-like系统中的Xen
* Novell 于2005年4月15日发布的 SUSE Linux Professional 9.3 已内含 Xen 2.0.5c 版本。
* RedHat 的 Fedora Project 于2005年6月13日发布的 Fedora Core 4 亦已内含 Xen。
* Xenophilia是一个基于Xen的Linux发行版。
* Xen demo CD是一个运行Debian Linux的liveCD,使你在系统上试用Xen,不用安装把它安装到硬盘。
* Debian Testing 亦已内含 Xen。
* NetBSD 2.0包括对Xen 1.2的支持,即将发布的3.0包括对Xen 2.0的支持。

0、本文约定
虚拟平台是指能支持运行Xen的真实安装的操作系统;
虚拟操作系统:是指在虚拟平台上安装和虚拟运行的操作系统;
比如我在Slackware 中安装了Xen,那Slackware就是虚拟平台,通过虚拟平台就可以虚拟其它操作系统了;比如通过Slackware来虚拟Debian、Fedora ... ...

1、什么是Xen
Xen 是一个开放源代码的para-virtualizing虚拟机(VMM),或“管理程序 ”,是为x86架构的机器而设计的。Xen 可以在一套物理硬件上安全的执行多个虚拟机;Xen是基于内核的虚拟程序,它和操作平台结合的极为密切,所以它占用的资源最少。
什么是虚拟机呢?可能大家知道VMWARE吧,是的,Xen就是类似这样的程序,比如我们可以在Fedora 上虚拟安装和使用Slackware、Debian、Gentoo ... ... 等发行版。因为Xen是基于内核的,相对VMWARE 来说,它占用的系统资源也就是VMWARE的百分之几左右。Xen是不是更有优势呢?只有您实践了才知道。这也是我写本文的最主要原因。

1.1 Xen的特性
虚拟机的性能更接近真实硬件环境)
在真实物理环境的平台和虚拟平台间自由切换)
在每个客户虚拟机支持到 32个虚拟CPU,通过 VCPU热插拔)
支持PAE指令集的x86/32, x86/64平台
通过Intel 虚拟支持VT的支持来用虚拟原始操作系统(未经修改的)支持(包括Microsoft Windows)
优秀的硬件支持.支持几乎所有的Linux设备驱动

1.2 Xen的应用范围
服务器整合:在虚拟机范围内,在一台物理主机上安装多个服务器, 用于演示及故障隔绝;
无硬件依赖:允许应用程序和操作系统对新硬件的移值测试;
多操作系统配置:以开发和测试为目的,同时运行多个操作系统;
内核开发:在虚拟机的沙盒中,做内核的测试和调试,无需为了测试而单独架设一***立的机器;
集群运算:和单独的管理每个物理主机相比较,在VM级管理更加灵活,在负载均衡方面,更易于控制,和隔离;为客户操作系统提供硬件技术支持:可以开发新的操作系统, 以得益于现存操作系统的广泛硬件支持,比如Linux;

1.3 Xen的操作系统支持和硬件支持;
请参阅:《Xen v3.0 用户手册》

2、Xen的一点理论基础
基于Xen的操作系统,有多个层,最底层和最高特权层是 Xen程序本身。Xen 可以管理多个客户操作系统,每个操作系统都能在一个安全的虚拟机中实现。在Xen的术语中,Domain由Xen控制,以高效的利用CPU的物理资源。每个客户操作系统可以管理它自身的应用。这种管理包括每个程序在规定时间内的响应到执行,是通过Xen调度到虚拟机中实现。
当Xen启动运行后,第一个虚拟的操作系统,就是Xen本身,我们通过xm list,会发现有一个Domain 0的虚拟机。Domain 0 是其它虚拟主机的管理者和控制者,Domain 0 可以构建其它的更多的Domain ,并管理虚拟设备。它还能执行管理任务,比如虚拟机的体眠、唤醒和迁移其它虚拟机。
一个被称为xend的服务器进程通过domain 0来管理系统,Xend 负责管理众多的虚拟主机,并且提供进入这些系统的控制台。命令经一个命令行的工具通过一个HTTP的接口被传送到xend。

3、Xen的安装
在写本文时,Xen的当前最新版本是xen-3.0.1,它基于的内核版本是2.6.12.6的。您可以根据自己的操作系统的情况来选择一种安装方式,适合您的就是最好的;

3.1 安装Xen的准备工作;
拥有 GRUB引导的Linux做为安装平台,还要编译工具,比如gcc、binutils 及make和automake等;开发库有zlib和python-dev等;
具体明细请参阅:《Xen v3.0 用户手册》
由于Xen用Python 开发的,所以Python 当然也是必不可少的。如果您是新手,我建议您用自己所用的操作系统软件包管理工具来安装这些软件包。

3.2 在Redhat/Fedora 操作平台上的安装;
在Fedora/Redhat平台上安装比较简单,您可以通过yum 来在线安装Xen和支持Xen的内核;因为Fedora/Redhat已经提供对Xen的支持了;Fedora/Redhat 提供的Xen内核支持比较高;不过就目前我的测试来看好象经常会机器重启,存在的问题可能是桌面环境造成的,比如GNOME桌面,打开就有重启的现象,也可能是Fedora/Redhat提供的Xen内有BUG。
安装Xen及支持Xen的请参考:《Fedora Core 5.0 用 Xen 虚拟Slackware 10.2》
对于Fedora 4.0及Redhat和Fedora 5.0类似;现在Yum的源上都有Xen和支持Xen的内核包;

3.3 通过Xen的二进制包来安装(几乎适用所有的Linux发行版)
通过Xen的二进制软件包来安装,这应该是通用的,几乎适合所有的Linux操作系统。由于二进制所是已经编译好的,我已经在Slackware 平台上用这种方法来安装,还是成功的。另外etony兄也在Debian上安装成功;您应该到 http://www.xensource.com/downloads 去下载二进制包,文件名中带有xen-3.0.1-install字样的,比如 xen-3.0.1-install-x86_32.tgz,这个软件包表示适用x86_32位机器的。也就是我们用的普通32位PC机。如果您用的是 64位机器,应该下载文件名带有x86_64字样的软件包;

下载好后,就解压安装,我们还是以支持x86_32构架机器的xen-3.0.1-install-x86_32.tgz为例:
[root@localhost ~]# tar zxvf xen-3.0.1-install-x86_32.tgz
[root@localhost ~]# cd xen-3.0.1-install
[root@localhost xen-3.0.1-install]# sh install.sh

判断是不是安装好了,请查看/boot目录,会发现有很多文件名带有xen字样的文件,另外在/lib/moudules中也会发现有支持xen的内核模块;另外再看一看是否有/etc/xen这个目录。我想应该是有的。

3.4 通过Xen的源码包编译安装(仅供参考)
通过Xen的二进制包来安装,可能有时内核不太适应我们的需要,这时我们要通过Xen的源码包来安装。通过自己编译来安装Xen及支持Xen的内核;Xen的源码包,您可以到 http://www.xensource.com/downloads去下载。文件名带有 xen-3.0.1-src字样的,比如 xen-3.0.1-src.tgz。

3.41 编译原理
通过Xen的源码包编译,其实也没有什么神秘的。在Xen的源码包中提供了一些内核补丁和内核配置文件等。当我们执行编译命令时,首先编译的是Xen程序本身,然后是编译内核。在编译内核时,程序会自动判断是否有内核源码,xen-3.0.1支持的内核是2.6.12.6,如果在xen的解压目录下没有,他就会自动内核的官方站 http://www.kernel.org 下载 linux-2.6.12.tar.bz2。然后就是自动解压并为此内核打补丁。然后系统会根据指令要求,然后采用相应的内核配置文件,或配置内核进行编译。

3.42 编译过程简说;
第一步:解压软件包,查看Xen源码包所带的文件;
[root@localhost ~]# tar zxvf xen-3.0.1-src.tgz
[root@localhost ~]# cd xen-3.0.1
[root@localhost xen-3.0.1]# ls
COPYING Config.mk README docs install.sh patches xen
ChangeLog Makefile buildconfigs extras linux-2.6-xen-sparse tools
我们解压xen-3.0.1-src.tgz 后,进入解压目录,会看到以上的文件或文件夹。patches是内核的补丁包,linux-2.6-xen-sparse是支持Xen的内核目录树,值得注意的是内核的配置文件就在这个目录中。

[root@localhost xen-3.0.1]# ls linux-2.6-xen-sparse/arch/xen/configs/
xen0_defconfig_ia64 xen0_defconfig_x86_64 xenU_defconfig_x86_32 xen_defconfig_x86_32
xen0_defconfig_x86_32 xenU_defconfig_ia64 xenU_defconfig_x86_64 xen_defconfig_x86_64

看到上面所列出的内核配置文件了吧,我们可能会发现文件名带有xen0字样的和xenU字样的两类文件。在这两类内核中,我们大多会修改的内核配置文件是运行xen的操作系统的内核配置文件,另一个是用于虚拟操作系统的内核配置文件。

xen0字样的就是我们一般是用于我们运行xen的操作系统的内核,而xenU字样的就是为虚拟操作系统所提供的内核。另外还有x86_32和x86_64之分,这表示CPU的架构。

比如我们用的是x86架构32位的CPU,我们在编译内核的时候就要用到 xen0_defconfig_x86_32 和xenU_defconfig_x86_32 配置文件。

举个例子:比如我的机器架构是x86_32位的,我安装xen的操作系统是Slackware,我想在Slackware 虚拟Debian 、Gentoo、Fedora等操作系统。这时编译虚拟平台Slackware所用的内核的配置文件就是 xen0_defconfig_x86_32 ,而被虚拟平台(Debian 、Gentoo、Fedora等操作系统)所用的内核就是 xenU_defconfig_x86_32 。

弄明白内核配置文件有何用?我们能明白xen在编译过程中用了哪些内核配置文件,目的是我们在编译过程中可以根据自己的需要来修改它,以编译出适合我们需要的内核。比如我们想让Slackware 支持xen,并且还要支持NTFS文件系统;所以我们就要修改 xen0_defconfig_x86_32这个文件。找出如下一行;
# CONFIG_NTFS_FS is not set
改为
CONFIG_NTFS_FS=m

如果您想让被虚拟的操作系统(Debian 、Gentoo、Fedora等)也支持NTFS文件系统,所以要在 xenU_defconfig_x86_32找出如下一行;
# CONFIG_NTFS_FS is not set
改为
CONFIG_NTFS_FS=m

第二步:配置内核;
这一步有两种方法,一个是直接修改内核配置文件,另一个是内核配置界面来配置.

方法一:通过修改内核配置文件
Xen所带的内核配置文件位于解压目录中的linux-2.6-xen-sparse/arch/xen/configs 。我们前面已经提到了相关配置文件的用途。请仔细看前一步的说明;

方法二:通过内核配置界面来配置
[root@localhost xen-3.0.1]# make linux-2.6-xen0-config CONFIGMODE=menuconfig

第三步:编译和安装Xen
[root@localhost xen-3.0.1]# make
[root@localhost xen-3.0.1]# make install

3.43 创建initrd文件
有的系统需要initrd-XXXX.img或initrd.gz文件才能引导起来,如果您的系统用了支持xen的支持引导不起来,就要创建一个initrd-XXXX.img或initrd.gz的文件;请参考:《Xen v3.0 用户手册》

3.44 关于xen0和xenU内核说明
一般的情况下会在/boot目录中有两个与xen相关的内核,有的文件名带有vmlinuz-XXXX-xen0字样的,有的带有vmlinuz-XXXX-xenU字样的;比如:

[root@localhost xen-3.0.1]# ls -la /boot/vmlinuz*xen*
lrwxrwxrwx 1 root root 21 2006-04-12 07:42 /boot/vmlinuz-2.6-xen0 -> vmlinuz-2.6.12.6-xen0
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6-xenU -> vmlinuz-2.6.12.6-xenU
lrwxrwxrwx 1 root root 21 2006-04-12 07:42 /boot/vmlinuz-2.6.12-xen0 -> vmlinuz-2.6.12.6-xen0
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6.12-xenU -> vmlinuz-2.6.12.6-xenU
-rw-r--r-- 1 root root 2180524 2006-04-12 07:42 /boot/vmlinuz-2.6.12.6-xen0
-rw-r--r-- 1 root root 1129950 2006-04-12 07:49 /boot/vmlinuz-2.6.12.6-xenU

其实就是两个与xen相关的内核,其它的都是这两个内核文件的链接;也就是vmlinuz-2.6.12.6-xen0和vmlinuz- 2.6.12.6-xenU。vmlinuz-2.6.12.6-xen0是用来引导虚拟平台的,比如我们在Slackware上安装Xen,那 Slackware就是虚拟平台;所以如果要让Slackware的xen能运行起来,必须用xen相关的内核,也就是vmlinuz-2.6.12.6-xen0这个内核。 而xenU字样这个内核,是用来引导虚拟操作系统用的,我们在以后会提到它。

4、引导XenLinux的GRUB配置
一旦我们在Linux操作系统安装好Xen后,这样的系统应该被称为XenLinux。如何才能引导拥有Xen的Linux呢?这时我们要用到 GRUB系统引导管理器。我们修改一下GRUB的配置文件menu.lst或grub.conf就行了。此文件位于/boot/grub目录中;

4.1 判断系统所在的分区
[root@localhost ~]# df -h
Filesystem 容量 已用 可用 已用% 挂载点
/dev/hda6 12G 6.9G 4.9G 59% /

4.2 查看/boot目录中xen相关的配置文件
[root@localhost ~]# ls /boot

注意:我们前面已经说过了,xen提供了两个内核,一个是虚拟平台用的,也就是文件名带有xen0字样的;另一个带有xenU字样的,这是用于引导和支持虚拟操作系统用的。

什么虚拟平台,比如我们想用Slackware 的Xen虚拟Fedora、Gentoo .... 。那么Slackware就是虚拟平台,而Fedora、Gentoo... .. 是被虚拟的操作系统。Slackware是一个真实安装在您的机器上的操作系统,它提供的是一个运行xen的环境。为了让Slackware能支持xen ,所以必须用于支持Xen的内核,也就是在/boot中有xen0字样的文件。
如果您安装了Xen,会在/boot中有两个文件vmlinuz-2.6.12.6-xen0和vmlinuz-2.6.12.6-xenU

4.3 禁掉 TLS Libraries
[root@localhost ~]#mv /lib/tls /lib/tls.disabled
禁掉的理由,请查看:《Xen v3.0 用户手册》

4.4 引导XenLinux的GRUB内容
title SlackXen
kernel /boot/xen-3.0.gz
module /boot/vmlinuz-2.6-xen0 root=/dev/hda6 ro console=tty0

如果有inintrd-2.xxxx-xen.img或initrd.gz之类的文件才能引导起来系统,还要加一行;要以/boot中的initrd相关的文件为准
modules /boot/initrd.gz

注意:与传统GRUB的定义有点不同,就是kernel 是用来定义Xen的,而Linux的内核及initrd映像是通过module 指令定义的;要仔细看好;

5、Xen的配置和管理工具
5.1 Xen的相关文件存放位置
xen安装后,文件放在什么地方了呢?主要放在以下几个目录;

5.11 内核及xen自身存放于/boot
安装有xen的操作系统下的/boot目录中,存放xen本身及支持xen的内核文件。比如文件名带有xen0和xenU相关的文件;

5.12 内核模块存放于/lib/modules
内核模块包括虚拟平台支持xen的内核xen0的模块,及支持虚拟操作系统所用的xenU的模块,一般的情况下是在 /lib/modules下有两个xen相关的目录存放。一个是文件夹名带有xen0字样的,另一个是xenU字样的;

5.13 xen的配置文件及守护程序的存放位置
一般的情况下,Xen的配置文件存放于/etc/xen目录。 比如 xend-config.sxp是用于配置网络的,不过我们不必更改,用其默认的就能完成我们的需要。xmexample1 xmexample2是两个示例性的配置文件。我们在配置引导被虚拟的操作系统时,这两个文件可供参考:
Xen的服务器xend和xendomains启动脚本,一般是位于/etc/init.d/目录中,也就是/etc/init.d/xend ;/etc/init.d/xend负责启动xend服务器,而/etc/init.d/xendomains负责第一个虚拟的系统及其它的 Domains,也就是Domain 0 。

5.14 可执行命令存放于/usr/sbin
[root@localhost ~]#ls /usr/sbin/xen*
/usr/sbin/xen-bugtool /usr/sbin/xenconsoled /usr/sbin/xenmon.py /usr/sbin/xenstored
/usr/sbin/xenbaked /usr/sbin/xend /usr/sbin/xenperf /usr/sbin/xentop
[root@localhost ~]#ls /usr/sbin/xm

5.2 Xen服务器的启动
xend服务器的启动/停止/重启/状态查询,请用下面的命令;
[root@localhost ~]# /etc/init.d/xend start 启动xend,如果 xend没有运行)
[root@localhost ~]# /etc/init.d/xend stop 停止xend,如果xend正在运行)
[root@localhost ~]# /etc/init.d/xend restart 重启正在运行的 xend,如果xend没有运行,则启动
[root@localhost ~]# /etc/init.d/xend status 查看xend状态
启动xendomains 服务器的启动/停止/重启/状态查询,请用下面的命令;一般的情况下,xend服务器启动了,xendomains也会自动启动。所以这个只是掌握一下就行了;

[root@localhost ~]# /etc/init.d/xend start 启动xend,如果 xend没有运行)
[root@localhost ~]# /etc/init.d/xend stop 停止xend,如果xend正在运行)
[root@localhost ~]# /etc/init.d/xend restart 重启正在运行的 xend,如果xend没有运行,则启动
[root@localhost ~]# /etc/init.d/xend status 查看xend状态
[root@localhost ~]# /etc/init.d/xendomains start
[root@localhost ~]# /etc/init.d/xendomains stop
[root@localhost ~]# /etc/init.d/xendomains restart
[root@localhost ~]# /etc/init.d/xendomains status

5.3 Xen管理工具xm
我们前面提到Xen的可执行命令中,我们可能看到了一些以xen开头的命令,您不妨尝试一个一个的尝试一下他们是做什么用的;比如xend是服务器的开启运行命令.其中xm命令,就是管理Xen的最基本的工具;您可以通过xm --help 来获得帮助.

5.31 列出所有正在运行的虚拟操作系统
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 450 1 r----- 5377.0
fc5 4 256 1 -b---- 0.1
列出所有正在运行的虚拟系统(也可以称为虚拟机);我们可以看到,一个名为Domain-0的系统正在运行。Domain-0就是Xen本身,也可以称为虚拟平台内存大小,而Domain-0负责提供其它虚拟操作系统的硬件环境,其它的系统都是基于Domain-0开始的,我们看到他的ID为0就应该知道它的权限是至高无尚的。所占用的内存是450M,不过这个是可以指定的。虚拟的CPU个数是1个,运行状态处于r,也就是run,正在运行中;运行时间是5377秒.
还有一个虚拟系统fc5,他的id是4,占用内存256M,虚拟CPU个数是1个 ... ...

5.32 通过配置文件来引导被虚拟的操作系统
[root@localhost ~]# /usr/sbin/xm create -c 虚拟操作系统的启动配置文件
比如我们要启动被虚拟的操作系统Fedora Core 5.0 ,我们要写一个启动Fedora的配置文件,比如是fc5vm.cfg。然后就可以通过下面的命令来引导Fedora了
[root@localhost ~]# /usr/sbin/xm create -c fc5vm.cfg

5.33 从终端或控制台登录正在运行的虚拟操作系统
[root@localhost ~]# /usr/sbin/xm console 正在运行的虚拟操作系统的Name或ID;
举例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 512 1 r----- 5561.9
fc5 4 256 1 -b---- 0.2
[root@localhost ~]# /usr/sbin/xm console fc5

5.34 存储正在运行的虚拟操作系统的状态及唤醒虚拟操作系统
[root@localhost ~]# /usr/sbin/xm save
[root@localhost ~]# /usr/sbin/xm restore
举例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm save 2 fc5run.save
[root@localhost ~]# /usr/sbin/xm restore fc5run.save
[root@localhost ~]# /usr/sbin/xm console fc5

5.35 停止正在运行的虚拟操作系统/激活停止的虚拟操作系统
[root@localhost ~]# /usr/sbin/xm pause
[root@localhost ~]# /usr/sbin/xm unpause
举例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm pause 2
[root@localhost ~]# /usr/sbin/xm unpause 2

5.36 调整虚拟平台/虚拟操作系统的占用内存
我们可以调整正在运行中的虚拟平台(Domain-0)所占内存大小及虚拟操作系统所占用的内存大小;
[root@localhost ~]# /usr/sbin/xm mem-set
举例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm mem-set 2 128

5.37 关闭被虚拟的系统
[root@localhost ~]# /usr/sbin/xm shutdown 虚拟操作系统的Name或DomID
[root@localhost ~]# /usr/sbin/xm destroy 立即停止虚拟的系统 (重要);
举例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm shutdown fc5

[root@localhost ~]# /usr/sbin/xm shutdown 2

[root@localhost ~]# /usr/sbin/xm destroy 2

5.38 调整虚拟平台及虚拟操作系统的虚拟CPU个数
[root@localhost ~]# /usr/sbin/xm vcpu-set
举例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm vcpu-set 2 4

5.39 查看虚拟系统运行的状态;
[root@localhost ~]# xm top

[root@localhost ~]# xentop

6、虚拟操作系统的文件存储系统
我们虚拟的系统应该有一个存储的地方,也就是文件系统。被虚拟的系统能安装和运行在哪些文件系统上呢?能安装和运行在一个实际的物理分区上,一个映像文件中,或NFS等网络文件系统中。

6.1 以实际物理硬盘做为虚拟操作系统文件系统
以实际物理硬盘分区做为虚拟操作系统的文件系统,要经过硬盘分区,创建文件系统流程;
请参考:《Linux 创建文件系统及挂载文件系统流程详解》

6.11准备物理分区及创建文件系统
《Linux 查看磁盘分区、文件系统、使用情况的命令和相关工具介绍》
《实例解说 fdisk 使用方法》
《合理规划您的硬盘分区》
《Linux 创建文件系统及挂载文件系统流程详解》

6.12 在物理分区上构建操作系统
构建操作系统,目前在一个Linux操作系统中构建另一个操作系统,主要是通过chroot工具和软件包提取工具来构建。基础的东西还是需要一点的,请参考:《通过chroot 构建Linux操作系统概要》
目前在开源社区中,已经有人把一些常用的发行版的基础系统做好了。我们能拿过来直接用。只要有基础系统,我们就能chroot进入,我们就能用相应发行版软件包管理器来构建操作系统了。


您可以直接下载您喜欢的操作系统,解压后,然后挂载映像文件,然后把映像文件的内容都拷到物理分区中就好了。不过还得做一点小小的修改,比如您下载系统映像文件中的/etc/fstab等文件。要根据您的引导的虚拟操作系统中定义的虚拟映射点来改。

6.13 虚拟操作系统的引导文件中关于文件系统的定义
如果您的硬盘有一定的空间,就可以把被虚拟的操作系统安装在硬盘的实际物理分区中,当然您首先得准备一个硬盘分区。然后格式化成Linux的文件系统,比如ext3或reiserfs 等;然后是在这个分区上构建您想要虚拟的操作系统,最后才是写虚拟操作系统的引导配置文件,在配置文件中,要用phy:来指定。
比如:
disk = ['phy:hda7,sda1,w']
中文意思就是:
disk=['phy:分区,映射点,w']
这行是什么意思呢?就是表示被虚拟的操作系统安装在/dev/hda3,我们要把hda3硬盘分区虚拟映射到/dev/sda1,并且是可读可写的;在这里要值得注意的是虚拟平台正在使用中的分区不能做为是映射点。
比如我在Slackware是位于/dev/hda6的虚拟平台,也就是真实运行的操作系统,我想用它来虚拟位于/dev/hda7分区的Fedora。所以我不能把/dev/hda6做为hda7的映射点。也就是下面一行是错误的:
disk = ['phy:hda7,hda6,w']
如何定义映射点,其实也比较好办,只要符合Linux设备的规则就可以;比如下面的也可以;

disk = ['phy:hda7,sda2,w']
disk = ['phy:hda7,sda3,w']
disk = ['phy:hda7,sdb1,w']
disk = ['phy:hda7,sdb2,w']
... ...

什么是映射点呢?也就是说通过phy定义后,被虚拟的操作系统的位于的真实的物理分区,在虚拟平台中,被映射到另一个分区;可能这样说有点不太明白。
举个例子吧:比如我们在Slackware虚拟Fedora ,而Fedora 位于/dev/hda7中。我们在引导Fedora的配置文件中定义Fedora所用的物理分区被映射到/dev/sda1;
disk = ['phy:hda7,sda1,w']
root = "/dev/sda1 ro"
当我们把Fedora引导起来的时候,Fedora的文件系统就是用被虚拟后的分区,也就是/dev/sda1。在Fedora中,我们通过df -h 查看到Fedora是位于/dev/sda1。
所以在引导Fedora的配置文件中,还要有一行来指定Fedora的root在哪里,就在/dev/sda1上;因为/dev/hda7已经被虚拟到了/dev/sda1。这回明白了吧.

6.2 以映像文件做虚拟操作系统的文件系统
以映像文件做为虚拟操作系统的文件系统,这种方法是比较常用。也是比较方便和易于操作的,也就是说被虚拟的操作系统是放在了一个文件中。

6.21 创建映像文件
[root@localhost ~]# dd if=/dev/zero of=fedora50.img bs=2k seek=2048k count=1
读入了 1+0 个块
输出了 1+0 个块
[root@localhost ~]# ls -lh fedora50.img
-rw-r--r-- 1 root root 4.1G 2006-04-13 01:27 fedora50.img

我们可以用dd来创建映像文件,上面的例子是创建了大小为4.1G的体积的,名为fedora50.img的映像文件;您可以调整上面命令参数的大小来创建您想要的体积大小的映像文件。

6.22 格式化映像为Linux文件系统
Linux文件系统,比如ext3或reiserfs,看自己喜欢吧;您可以用mkfs.ext3或mkfs.reiserfs命令来创建文件系统,请参考:
[root@localhost ~]# /sbin/mkfs.ext3 fedora50,img
mke2fs 1.38 (30-Jun-2005)
fedora50,img is not a block special device.
Proceed anyway? (y,n) y 注:在这里输入y就时行格式化了,然后遇到提示之处,都是用回车。
这样fedora50.img就是ext3文件系统了,你可以用mount -o loop 来挂载使用它,在它上面存储文件等。
[root@localhost ~]# mkdir /mnt/fedora50
[root@localhost ~]# mount -o loop fedora50.img /mnt/fedora50
[root@localhost ~]# df -h
root@localhost:/opt# df -lh
Filesystem 容量 已用 可用 已用% 挂载点
/dev/hda6 12G 8.5G 3.3G 73% /
/root/fedora50,img 4.0G 129M 3.7G 4% /mnt/fedora
上面的一系列命令执行下去后,说明fedora50.img已经挂载到了/mnt/fedora目录中,我们可以向/mnt/fedora中存放文件。这样就写到了fedora50.img映像文件中。写完后,我们可以卸载fedora50.img;
[root@localhost ~]# umount /mnt/fedora

6.23 在映像文件上构建操作系统
在映像文件上构建操作系统,目前在一个Linux操作系统中构建另一个操作系统,主要是通过chroot工具和软件包提取工具来构建。基础的东西还是需要一点的,请参考:
目前在开源社区中,已经有人把一些常用的发行版的基础系统做好了。我们能拿过来直接用。只要有基础系统,我们就能chroot进入,我们就能用相应发行版软件包管理器来构建操作系统了。

6.24 虚拟操作系统的引导文件中关于文件系统的定义
disk = ['file:/opt/vmos/vmos.img,sda1,w', 'file:/opt/vmos/vmos.swap,sda2,w']
root = "/dev/sda1 ro"
我们还是以实例解说,把装有vmos.img的映像映射到/dev/sda1 分区,vmos.img就是虚拟操作系统root存放地。vmos.swap是被虚拟文件系统的交换分区,这个交换分区也是一个文件,被映射到了/dev /sda2 。然后通过root= 行来指定虚拟操作系统所处的分区,这个位置就是被虚拟后的分区。定义时要注意自己的这些文件存放在哪了?上面的例子表示vmos.img和vmos.swap是存放在/opt/vmos目录中,要看好了。

---------------------------------------------------------
在Debian上安装和配置Xen

Xen 是一个开放源代码虚拟机监视器,由剑桥大学开发。它打算在单个计算机上运行多达128个有完全功能的操作系统。操作系统必须进行显式地修改(“移植”)以在Xen上运行(但是提供对用户应用的兼容性)。这使得Xen无需特殊硬件支持,就能达到高性能的虚拟化。

Xen的半虚拟化
Xen通过一种叫做半虚拟化的技术获得高效能的表现(较少的效能损失,典型的情况下大约损失 2%,在最糟的情况下会有 8% 的效能耗损;与其它使用完全的虚拟化却造成最高到 20% 损耗的其他解决方案形成一个明显的对比),甚至在某些与传统虚拟技术极度不友好的架构上(x86),Xen也有极佳的表现。与那些传统透过软件模拟实现硬件的虚拟机不同,在3.0版本及在Intel VT-X支援前的Xen需要让客座作业系统(guest operating systems)与Xen API进行连接。到目前为止,这样连结已经可以运用在NetBSD,GNU/Linux,FreeBSD和贝尔实验室的Plan 9系统上。在Brainshare 2005会议上,Novell展示了NetWare与 Xen的连通。与Windows XP连通的技术曾在Xen开发初期进行,但微软的协议未能允许它发布。Sun微系统公司也正积极研究Solaris与Xen的连结,使其能在Xen平台上运作。

Xen的完全虚拟化
Intel对Xen贡献修改以支持其VT-X Vanderpool架构扩展。如果主系统支持Vanderpool或者Pacifica扩展(Intel和AMD对本地支持虚拟化的扩展),这项技术将允许未修改的客操作系统运行在Xen虚拟机中。事实上,那意味着性能的提升,并且你可以在没有进行任何协议不允许的修改的情况下对Windows进行虚拟。

虚拟机的迁移
Xen虚拟机可以在不停止的情况下在多个物理主机之间即时迁移(live migration)。在操作过程中,虚拟机在没有停止工作的情况下内存被反复的复制到目标机器。虚拟机在最终目的地开始执行之前,会有一次60-300 毫秒的非常短暂的暂停以执行最终的同步化,给人无缝迁移的感觉。类似的技术被用来暂停一台正在运行的虚拟机到磁盘,并切换到另外一台,第一台虚拟机在以后可以恢复。

平台支持
Xen目前可以运行在x86及x86-64系统上,并正在向IA64、PPC移植。移植到其他平台从技术上是可行的,未来有可能会实现。

SUN 每隔一段事件都会有一些折旧的服务器捐给大学、实验室、研究机构等。我们项目组就刚 “骗” 了几台免费的 Sun Fire 服务器,当然也和我们是 SUN(也许现在应该叫 Oracle)的长期客户有关,我们的服务器基本都是 SUN 的。现在只要新机器一进来就先虚拟化,虚拟化后才能上机柜,技术变化太快了,记得几年前我们买机器一上来首先装的是操作系统,现在 hypervisor 代替了操作系统。首先最小化安装64位的 Debian 再安装 Xen。检查一下 source list:

# vi /etc/apt/sources.list
deb http://http.us.debian.org/debian stable main contrib non-free
#deb http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free
deb http://security.debian.org stable/updates main contrib non-free

安装 Xen 及相关工具:
# apt-get install xen-hypervisor-3.2-1-amd64 \
xen-linux-system-2.6.26-1-xen-amd64 xen-utils-3.2-1 \
xenstore-utils xenwatch xen-shell xen-tools
我们需要很多 loop devices 来挂载基于文件的虚拟机,所以需要把 loop device 的数目限制设成最大:

# vi /etc/modules
loop max_loop=64
安装完 Xen 后,Debian 上的 Xen 的默认网络配置用的是 network-dummy,和 CentOS 上有点不一样,我们需要修改成 bridge 以便每个虚拟机都像一个独立机器一样运行在网络上:

# vi /etc/xen/xend-config.sxp

#(network-script network-dummy)
(network-script network-bridge)
安装成功后,检查 Xen 内核是否已经装好,并给内核加上 dom0_mem=256M 限制 Xen Dom0 的内存,防止 dom0 把内存耗光:

# vi /boot/grub/menu.lst
...
title           Xen 3.2-1-amd64 / Debian GNU/Linux, kernel 2.6.26-2-xen-amd64
root            (hd0,0)
kernel          /xen-3.2-1-amd64.gz dom0_mem=256M
module          /vmlinuz-2.6.26-2-xen-amd64 root=/dev/mapper/vpsee-root ro console=tty0
module          /initrd.img-2.6.26-2-xen-amd64
...
重启系统后检查一下是否是 Xen 的内核以及 Xen 是否启动:
# reboot

# uname -r
2.6.26-2-xen-amd64

# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0   256     2     r-----      9.3

创建和安装 guest
如果把正在运行的 Xen 内核的操作系统看成 host 的话,那么运行在 host 上面的操作系统就可以看成 guest。先建一个目录用来存放所有的 guest 操作系统的 image,vm01.img,vm02.img 等,1个 guest 对应1个 image。

# mkdir /vm
# xen-create-image --hostname=vm01 --size=10Gb --swap=512Mb --ide \
--ip=172.16.39.121 --netmask=255.255.254.0 --gateway=172.16.38.1 --force \
--dir=/vm --memory=512Mb --arch=i386 \
--kernel=/boot/vmlinuz-2.6.26-2-xen-amd64 \
--debootstrap --dist=etch --mirror=http://ftp2.de.debian.org/debian/ --password
可以根据需要调整 /etc/xen-tools/xen-tools.conf

进入 guest
安装成功后需要增加给对应的虚拟机器增加一个 Xen 配置文件以便 Xen 能启动这个虚拟机:

# vi /etc/xen/vm01
kernel      = '/boot/vmlinuz-2.6.26-2-xen-amd64'
ramdisk     = '/boot/initrd.img-2.6.26-2-xen-amd64'
memory      = '512'
root        = '/dev/xvda2 ro'
disk        = [
                  'file:/vm/domains/vm01/swap.img,xvda1,w',
                  'file:/vm/domains/vm01/disk.img,xvda2,w',
              ]
name        = 'vm01'
vif         = [ 'ip=172.16.39.121,mac=00:16:3E:C0:21:DE' ]
on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'

启动刚安装的 Debian 虚拟机后就可以登录了,

# xm create vm01
# xm console vm01
如果要退出 guest 的话,用 Ctrl + ],就会回到 host。如果想每次启动 host 时自动启动 guest 的话:

# ln -s /etc/xen/vm01 /etc/xen/auto

更懒的办法
如果觉得安装 guest 操作系统太麻烦,可以到 http://stacklet.com/ 下载一个已经装好的镜像文件,调整 Xen guest 的配置文件,然后在 host 下启动 guest 镜像就可以了,这里和这里有更详细的介绍。

增加 swap
如何给 guest 系统(domU)增加 swap,这里有介绍。

---------------------------------------------------------


该文章最后由 阿炯 于 2024-04-12 14:18:31 更新,目前是第 5 版。