XEN: Linux虚拟机软体

来源:互联网 发布:在淘宝上怎么买药 编辑:程序博客网 时间:2024/04/29 09:03

本文主要介绍Xen:一种使用在Linux/Unix 系统下「虚拟机器(Virtual Machine)软体」。

虚拟机器(Virtual Machine):将实体机器作虚拟化的动作,藉由软体的模拟,使得一台实体机器能够运行起来像是好多台电脑一样,而「虚拟出来的机器」对于一般使用者来说,除非特别去调查,与「一般其他的实体机器」并不会感受到太大的差别。

底下列出一般常见的虚拟机器与其用途,提供参考:

 

功能范例模拟早期电动玩具机台任天堂、PlayStation、大型电玩等等电玩模拟器用来执行跨平台应用程式Java 与.NET 虚拟机器模拟x86 主机VMware 与Xen 虚拟机器软体

Xen 架构

了解虚拟机器概念后,接着来谈到我们的主角:『Xen』

现阶段主要运行于Linux/Unix 系统的Xen 虚拟机器,是一个注重效能的平行虚拟化(Paravirtualization)系统,虽然说Xen 能够运行在许多Unix/Linux 系统,但因为考量介绍Xen 系统的方便性,以下主要以当红的Linux 作业系统来探讨Xen。

要使得Linux 支援Xen 必须从Linux Kernel 来做改造,也就是要重新编译Linux Kernel,重新编译Linux Kernel 听起来似乎不是一件简单的事情,所幸许多Linux Distribution 已经将支援Xen 的Linux Kernel 编译好啰,所以我们只要直接使用Xen 的Kernel 来开机即可,另外要特别声明Xen Kernel 有两种『Xen0』(Domain-0)与『XenU』(Guest 系统)。

Xen0

要跑Xen 的实体电脑需先跑Xen0 的Kernel 以后,再以Xen0 为基础来执行多个XenU Guest 系统于Xen0 系统上,简单说Xen0 是全部XenU 的母系统。

Note:意思是若Xen0 故障损坏,会影响到所有的XenU Guest 系统。

XenU

您可以同时运行『多个』XenU Guest 系统在一个Xen0 的实体电脑上,且各个XenU 系统是独立并且不互相影响,意思是若其中一个XenU 故障损坏亦不会影响到其他Xen 系统。

Xen 示意圖

Xen 优点

相对其他的虚拟机器软体来说,Xen 最大优势在于『高效能』(High Performance),因为Xen 采用Paravirtualization 而不是使用模拟(Emulation)、全系统模拟(full system simulation)方式,所以能够使得Xen 系统效能优于其他虚拟机器软体。

Tips:全系统模拟以VMware 为例,是模拟x86 PC,可以从BIOS 开机重新安装作业系统,缺点是「效能」上就比不上Xen 使用Paravirtualization 方式,优点是可以随性安装Windows、Linux 或FreeBSD这一类x86 的作业系统。

安全(Security)

XenU Guest 系统之间除了正常管道外(例如:ssh、vnc 或NFS 这些网路服务等等),是无法互相影响彼此安全性,若是Xen0 有着多张网路介面卡,Xen 系统甚至能够使得XenU使用独立网路卡(限制XenU 无法使用所有的网路卡),而且某个XenU 若是故障损坏了,也不会使得其他的XenU 或Xen0 故障。

Note:注重系统安全是虚拟机器基本功能之一。

Xen 缺点

说到Xen 缺点应该算以『不能执行Windows 作业系统』这个问题最大,原因还是在于讲求效能的Xen 采用Paravirtualization 虚拟技术必须更改Windows Kernel 才能执行Windows Guest 系统,当然Windows 并没有提供我们来更改。

不过另外有个好消息,由CPU 大厂Intel 提供VT 技术(Virtualization Technology),使得虚拟机器软体(例如Xen、VMware)透过「全虚拟」动作来运行许多不同的x86 作业系统,使得Xen 藉由Intel VT 作『全虚拟』在不修改Windows 核心下,也能跑Windows Guest 系统。

使用Intel VT 技术的另一个重点是:以往在没有Intel VT 技术时,全虚拟Guest 系统效能低落,藉由Intel VT 技术,可使Guest 系统存取硬体效能更加快速与直接,大大增进Guest 系统效能与可用度。

Note:与Intel 同为CPU 大厂之一AMD 也推出类似的技术名称为『Pacifica』。

Xen 与同性质软体比较

与『Xen』类似的虚拟机器软体较知名有「VMware」、「微软Virtual PC 与Virtual Server」与「Parallels Workstation」

Xen 采用Paravirtualization 方式,主要是她主推效能至上,也就是以效能见长。而其他采用全虚拟方式(例如VMware、Parallels Workstation)虚拟机器,主要是可以执行任何x86 作业系统,所以是以相容性见长。而微软Virtual PC 官方网站说明只支援Windows 系列Guest 系统,故比较封闭。

Note:全部x86 的虚拟机器系统,皆期待CPU 厂商「Intel VT」与「AMD Pacifica」技术来提升虚拟出来的Guest 系统效能,届时虚拟机器软体会支援以上两项技术,应该会大大提高虚拟机器技术的实用性。

Xen 系统实战演练

硬体准备及基本需求

一台个人电脑,搭配最少需『超过』512 MB 记忆体(256 MB 给Domain-0 的Xen0 使用、256 MB 给test 的XenU 使用),特别注意因为Linux Kernel 启动时会使用部份记忆体,导致若刚好512 MB 记忆体会无法安装XenU Guest 系统(记忆体不足256 MB)建议记忆体768 MB 以上。

磁碟空间建议使用20GB 以上硬碟。测试期间最大磁碟用量为:「2 个Fedora core 5 完整安装」+「Fedora Core 5 安装来源档案」(2 x 9G + 3G = 21G 左右)

「Fedora Core 5 安装来源档案」是使用于网路安装XenU Guest 系统。

Note:当您使用Xen Kernel 时,每个Fedora Core 5 最少需要256 MB 记忆体才能够正常启动,此与Fedora Core 5 预设最低需求128 MB 不同。

Tips:避免使用完整安装,以减少安装时所花费的测试时间。

下表为笔者此次测使所使用硬体规格表:(可以同时启动一个Xen0 与两个XenU)

 

CPUPentium 4 1.6 GHz记忆体1024 MB硬碟40G网路介面一般网路卡

Note:笔者测试环境有DHCP 伺服器能够提供Xen0 与XenU 的IP 设定,若是读者测试环境没有DHCP 伺服器也没有关系,只要将Xen0 与XenU 的IP 设定成同网段(NetID)能够互相连线即可,例Xen0 192.168.2.2/24、XenU 192.168.2.3/24(24 的意思是255.255.255.0)。

Tips:另外笔者测试环境还有DNS 伺服器能够提供Xen0 与XenU 的主机名称解析,若是读者测试环境没有DNS 伺服器也没有关系,只要将底下范本使用主机名称的部份,将之改成IP 即可,以下笔者此次主机名称与IP 的资讯。

 

Xen主机名称IP/MaskXen0r7-101.ol172.16.7.101/16XenUr5-148.ol172.16.5.148/16XenUr6-135.ol172.16.6.135/16

软体准备

Fedora Core 5 安装光碟共五片,DVD 版本也可以。

操作开始-建置Xen0

第一步:以标准步骤安装Fedora Core 5

使用光碟开机后开始安装Fedora Core 5,大多使用预设值按下『下一步』,在软体选择方面可省略「Office and Productivity」(办公与出版)软体,以此方式安装好Fedora Core 5 大约使用2GB 左右磁碟空间。

Note:安装期间语系选择「中文」或「英文」并不会影响到Xen 测试。

Tips:安装时期关于『Firewall』、『SELinux』设定皆使用预设值即可,需注意有些早期版本Xen 必须关闭SELinux 才能运作(例如Fedora Core 4)若使用Fedora Core 5 则不需要关闭SELinux,防火墙的部份可以在有需要关闭时才关闭即可。

安裝畫面

第二步:安装Xen 相关软体

Xen 相关软体有三个,列表如下:

 

软体名称主要功能测试版本号码xenXen 工具套件xen-3.0.1-4.i386.rpmkernel-xen0Xen Domain-0 核心kernel-xen0-2.6.15-1.2054_FC5.i686.rpmkernel-xenUXen Guest System 核心kernel-xenU-2.6.15-1.2054_FC5.i686.rpm

以上虽然列出三个与Xen 相关的套件,事实上若作为Xen0 系统只需安装xen 与kernel-xen0 套件,操作如下:

在Xen0 主机(笔者的为r7-101.ol 主机)使用指令「rpm -ivh xen-3.0.1-4.i386.rpm bridge-utils-1.0.6-1.2.i386.rpm sysfsutils-1.3.0- 1.2.1.i386.rpm」来安装xen 套件。

Note:xen 套件相依bridge-utils 与sysfsutils 套件,请一并安装。

接下来使用指令「rpm -ivh kernel-xen0-2.6.15-1.2054_FC5.i686.rpm」来安装kernel-xen0 套件。

Tips:Fedora Core 5 套件都放在光碟片Fedora/RPMS 目录中。

Note:作为XenU 系统只需安装kernel-xenU 稍待会在XenU 建置过程中自动安装。

安裝 xen 套件圖檔

第三步:使用Xen0 核心开机

重开机于GRUB 选单下,于秒数尚未读完前,按方向键『上下键』,会发现多一个选择,即『Xen0 核心开机』选项。接下来选择『Xen0』核心开机。

特别注意:笔者尝试三台电脑,有两台电脑使用Xen0 核心开机都会卡在「Checking for hardware changes」(检查硬体变更)猜测是此版Xen0 臭虫,或许更新到新版Xen0 可解决这个问题。笔者的解决方法是先换回原本预设核心开机后,输入指令「chkconfig kudzu off」关闭开机硬体检查的动作后,再度重新开机使用Xen0 核心即可。

Note:「Checking for hardware changes」动作是由『kudzu』这个服务启动。

關閉 kudzu 圖檔

第四步:设定开机预设使用Xen0 核心(建议)

已经使用Xen0 核心正常开机成功后,建议您将开机预设值改成使用『Xen0 核心』。使用指令「vim /boot/grub/menu.lst」修改GRUB 设定档案,将「default=1」改成「default=0」。

Tips:GRUB 设定档menu.lst 的default 参数若是0 代表第一个title(Xen0 核心)、若是1 代表第二个title(Fedora Core 5 预设核心)。

进阶学习:您可使用指令「uname -a」来确认正在使用的核心版本号码。

GRUB 圖檔

准备XenU 之网路安装伺服器

Fedora Core 5 安装XenU Guest 系统已支援从anaconda 安装(「anaconda」是RedHat、Fedora 预设使用的图形安装程式),接下来使用网路安装(透过NFS、HTTP、FTP)我们会先将安装来源(也就是光碟片内容)放在Xen0 主机,透过网路来安装XenU Guest 系统,以下为准备网路安装伺服器步骤。

Note:网路安装一般使用NFS、HTTP、FTP 通讯方式来传输,以下步骤以NFS 为例。

第一步:将安装光碟内容拷贝至主机硬碟

笔者的作法是将光碟内容放至Xen0 主机硬碟「/FC5src」目录下

使用指令「mount /dev/cdrom /mnt」挂载光碟片至/mnt 目录下

使用指令「mkdir /FC5src」制作目录

使用指令「cp -r /mnt/* /FC5src」将资料拷贝过去

使用指令「eject」将光碟退出

Note:使用一般CD 当安装来源需将一至五片皆拷贝到硬碟,若是使用DVD 则一片即可。

进阶学习:若我们使用一般CD 当安装片(非DVD 片)时,主要是把第二、三、四、五光碟内Fedora/RPMS 目录下的套件都整合到硬碟内同一个Fedora/RPMS目录下。

Tips:CD 装置代号可能不同,请正确输入装置代号名称(例/dev/cdrom)。

拷貝安裝來源圖檔

第二步: 修改NFS 设定档/etc/exports,启动NFS 服务,关闭防火墙

修改「/etc/exports」加入一行「/FC5src」

使用指令「/etc/init.d/nfs start」来启动NFS 服务。

使用指令「/etc/init.d/iptables stop」来关闭防火墙服务。

Note:上例NFS 设定是将/FC5src 目录分享给所有主机皆唯读。

Tips:此刻关闭防火墙是因为接下来安装XenU 时NFS 服务会被防火墙所阻挡住。

进阶学习:若是要开启NFS 服务且仍需使用防火墙的话,需将NFS Daemon 所使用port 号固定后,再调整防火墙相关设定即可。

nfs 圖檔

开始安装XenU

在Fedora Core 5 安装XenU Guest 系统采「直觉化」设计,几乎可以Step By Step 完成安装,并且不像以前(例Fedora Core 4)需要透过Internet 来安装,Fedora Core 5 只需要自行准备安装伺服器即可(也就是先前步骤所建立之安装伺服器)。

第一步:使用指令「xenguest-install.py」开始安装XenU Guest 系统

问题一What is the name of your virtual machine?(您的虚拟机器名称)

回答一test

Note:此时回答「test」会成为设定档档名,之后使用虚拟机器相关命令亦是会用到这个名称。

问题二How much RAM should be allocated (in megabytes)?(此虚拟机器使用多少记忆体,使用MB 作单位)

回答二256

问题三What would you like to use as the disk (path)?(虚拟机器所使用磁碟位于那里)

回答三/root/test.iso

Note:档案名称不一定要使用『.iso』结尾,档案摆放在那里请自行记住。

问题四How large would you like the disk to be (in gigabytes)?(虚拟机器磁碟大小,以GB 为单位)

回答四 9

Note:以上两个动作会在/root/test.iso 产生一个9 GB 的档案,然后成为XenU 之/dev/xvda 磁碟装置

问题五What is the install location?(安装来源位于那里)

回答五nfs:172.16.7.101:/FC5src

Note:172.16.7.101 是Xen0 主机IP 位址,也就是安装伺服器IP 位址。

进阶学习:除了NFS 提供安装时所需资料来源,还可以使用HTTP 与FTP 方式(但仍需准备好安装伺服器),NFS、HTTP 与FTP 输入格式列表如下

NFSnfs:my.nfs.domain.com:/path/to/src/HTTPhttp://my.http.domain.com/path/to/src/FTPftp://my.ftp.domain.com/path/to/src

py 圖檔

第二步:选单模式基础设定

此时test 已经由XenU Kernel 开机

选择「English」或「Chinese(Traditional)」语系(Language)

选择「us」(美式)键盘

设定好IP 位址(笔者使用DHCP 来设定网路,读者请依照您测试环境来作调整)

选择「Start VNC」启用vnc 安装模式,接着选择「No password」

会看到如下一段文字:

The VNC server is now running. Please connect to 「IP或是主机名称」:1 to begin the install... Starting graphical installation...

Note:上述文字中第二行「IP 或是主机名称」:1 请先记下来,待会使用vncviewer 时会用到。

Tips:以上设定方式通称「menu」(选单)模式,此时无法使用滑鼠来点选按钮,请善用「Tab 键」、「空白键」与「Enter 键」来控制与设定。

VNC 安裝圖檔

第三步:使用vncviewer 来执行anaconda 程式

在Xen0 主机图形介面下,使用指令「vncviewer 172.16.5.148:1」来继续anaconda 程式。

之后安装方式大致上与一般Fedora Core 5 无异,只是会遇到切割「xvda」磁碟时,需回答『Yes』(是)才能继续安装。

Note:若是读者发现没有vncviewer 指令,大概是vnc Client 工具还没安装到系统,使用指令「rpm -ivh vnc-4.1.1-36.i386.rpm」,将vnc 套件装起来即可使用vncviewer 指令。

切割 xvda 圖檔

安装完Xen0、XenU 系统之操控

在安装完成XenU 后,接下来需要学会一些基本控制,一般来说是在Xen0 主机使用xm 相关指令来操控。

xm 工具使用介绍

使用指令「xm help」来观看xm 有那些参数

使用指令「xm list」列出正在执行的Xen0 与XenU

使用指令「xm console test」连接到test 的XenU 终端机

使用指令「xm shutdown test」使test 的XenU 关机

使用指令「xm create -c test」使test 的XenU 开机

(-c 顺便连接到test 的console)

使用指令「xm mem-set 4 266」来调整test 的XenU 记忆体设定成266 MB

使用指令「xm top」来观察Xen0 与XenU 程序管理

Note:以上用于指令中的test 皆可使用Xen Domain ID(图示中的test XenU 之ID 先前为3 之后4)

xm 圖檔

使用ssh 「X11 forwarding」来使用XenU 图形介面

若只是使用xm 工具则只能使用Command 模式来使用XenU Guest 系统,若要使用图形模式来使用XenU Guest 系统的话,可以应用X11 forwarding 功能,这种方法比较适合用于Linux/Unix 这些使用X Window 的作业系统操控,使用「ssh -X user@hostname」来连结到XenU Guest 系统,之后就可以执行图形程式显示到您的图形介面上。

Note:这X11 forwarding 需要ssh Daemon 与ssh Client 皆同意才可以运行。

进阶学习:这是X Window 系统与ssh 程式结合运用的方法,X Window 相关程式还有xauth、相关档案为~/.Xauthority。

Tips:eog 是GNOME 程式「Eye of GNOME」。

sshX 圖檔

使用vnc 来使用XenU 图形介面

方才使用「X11 forwarding」方式较适合用于Linux/Unix 的X Window 系统,若是使用Windows 系统,使用vnc 方式来连线居多。

vnc 采用Client/Server 架构,所以两台主机分别要安装vnc Server 与vnc Viewer 程式,若要启动XenU Guest 系统上的vnc Server,请先在XenU Guest 系统执行vncpasswd 设定好vnc 通行密码后(六码以上),再使用指令「vncserver」来启动vnc Server。

至于vnc Client 端这边,使用指令「vncviewer ServerIP或主机名称:1」连线上去并输入vnc 通行密码来连线到XenU Guest 系统。

vncserver 与vncviewer 皆可跑在Linux、Windows、MAC OS X 与FreeBSD 这些常见作业系统。

Tips:XenU Guest 系统上的Firewall 预设会挡到vncserver 连线,可使用「/etc/init.d/iptables stop」来停止Firewall,若是对防火墙设定较熟悉,您也可以设定防火墙特别允许vncserver 连线。

进阶学习:预设启动的Window Manager 为「twm」,一般人不大容易习惯此Window Manager 的操作方式,若要修改预设启动的Window Manager 请开启vnc Server 主机上的~/.vnc/xstartup 档案,找到twm 修改成您喜好的桌面环境,记得使用指令「vncserver -kill :1」来停止vnc Server 后,再使用指令「vncserver」重新启动vnc Server。

twmTab Window ManagerstartkdeK Desktop Environment(KDE)gnome-sessionGNOME Desktop Environment

Note:Fedora Core 5 预设值没有安装KDE,需要请自行安装(或加装)。

Note:在vnc Server 看到「:1」的意思是vnc Server 聆听(LISTEN)连接埠5801 提供vnc Client 使用vncviewer 存取,同时间也聆听连接埠5901 提供客户端使用浏览器存取(浏览器必须搭配使用JAVA 虚拟机器),若再启动一个vncserver 就会变成「:2」,使用5802 与5902 连接埠依此类推。

Note:vnc 应用相关说明请见官方网站「http://www.vnc.com/」,Windows 的vnc 程式也是在此下载。

vnc 圖檔

vncviewer 圖檔

进阶议题

其他支援Xen 的Linux Distribution

除了Fedora Core 5 之外,许多Distribution 都支援Xen 系统,只是Fedora Core 5 使用anaconda 安装XenU 更加直觉化架设Xen 系统,其他像是Unbuntu、Novell SuSE、Gentoo 与Debian 也都支援Xen 系统架设。

多重开机变成同时开机

以往在同一台电脑安装两个以上的Linux 都只能同时间运作一个,藉由Xen 技术,我们能够同时运作两个以上的Linux 于同一台实体电脑,若是硬体规格较高还可以一台电脑当做好几台用,商用上可以节省不少硬体费用。

也可以使用单独device 来当XenU 磁碟

之前我们使用单一档案/root/test.iso 来当作XenU 的硬碟,若是读者有多颗硬碟,也可以使用单独的磁碟(或磁区)来当作XenU 的硬碟,只要在当初建置时的问题三回答方式不一样即可,例如:

问题三What would you like to use as the disk (path)?(虚拟机器所使用磁碟位于那里)

回答三/dev/sdb

这样/dev/sdb 装置就成为XenU 所使用的磁碟了。

Note:此法要很小心使用,否则会造成资料遗失喔(位于/dev/sdb 的资料会遗失)。

使用裝置當磁碟圖檔

XenU 设定档案介绍

XenU 设定档预设放在/etc/xen/ 目录下,通常使用Domain 名称来当作档名,例如我们之前使用xenguest-install.py 建立test 的XenU Guest 系统,所以test 的设定档就是/etc/ xen/test ,内容简介如下:

# Automatically generated xen config file name = "test" memory = "256" disk = [ 'file:/root/test.iso,xvda,w' ] vif = [ 'mac=00:16:3e:2d:d1: 89' ] bootloader="/usr/bin/pygrub" on_reboot = 'restart' on_crash = 'restart'
参数名称中文解释nameXenU Domain 名称memory使用记忆体数量(MB)disk使用硬碟vif网路卡MAC 地址

进阶学习:使用指令「man xmdomain.cfg」参考说明。除了使用「xenguest-install.py」指令来建立XenU Guest 系统外,另外您也可以自行编写设定档案来启用XenU Guest 系统或是自行使用指令模式来安装XenU Guest 系统。

Tips:py 是程式语言「python」缩写,先前「xenguest-install.py」scripts 程式也是使用python 所撰写。 xvda 是Xen Virtual Disk A 意思,以别于我们一般hda 或sda 磁碟。

设定开机自动启动XenU Guest 系统

若是您将设定档案放到『/etc/xen/auto』目录下,这样子就可以使用指令「/etc/init.d/xendomains start」来启动位于/etc/xen/auto 目录下的XenU Guest 系统。若再配合指令「chkconfig xendomains on」就可以使得位于/etc/xen/auto 目录下的XenU Guest 系统于开机时自动启动。

Note:xendomains 这个服务于Fedora Core 5 在安装xen 套件时就设定成开机自动启动。

自動啟動 XenU 圖檔

混用不同版本的Xen0 与XenU

在先前的测试中,我们使用同一版本Xen0 Kernel 与XenU Kernel 能够运作Xen 系统,至于是否能够使用不同版本的Xen0 与XenU 呢?笔者的测试结果是失败了,这只是笔者简单的测试,至于真实可行性还未知。

笔者简述测试过程如下:使用FC5 Xen0 Kernel 配合FC4 XenU Kernel 开机失败,但使用FC5 Xen0 Kernel 配合FC5 XenU Kernel 却使用Fedora Core 4 应用程式(也就是Fedora Core 4 安装好只是将Kernel 换成FC5 XenU)能够启动,所以猜测Xen 主要与Kernel 较息息相关。图为同时启动两个XenU 一个是Fedora Core 5 应用程式、一个是Fedora Core 4 应用程式的情形。

不同版本核心圖檔

Xen 应用范畴

Xen 又是一个从大型系统技术转战到Linux 的一个案例,以往只能在大型主机见到的虚拟机器系统,拜硬体技术日新月异所赐,使得x86 PC 也有机会实际成为商用虚拟机器系统,说到商业用途,以下列举一些可以将虚拟机器技术实际应用的案例。

多平台测试机:

许多软体开发公司及人员,经常会需要许多不同作业系统或不同软体版本,来测试他们开发的软体,此时很有可能使用「多重开机」的作业方式来完成,像是切换到不同的Windows 例如Windows 2000、Windows XP 或Windows 2003,若是切换不同Linux Distribution 版本更是多到不胜枚举,以前需要切换的多重开机系统,透过虚拟机器技术,摇身一变成「同时开机」系统,可简化测试流程与时间。

伺服器应用:

有些时候因为应用程式需求,而必须使用不同作业系统,此时若单一系统上的应用程式必须执行但是却不需要大量系统资源时, 使用虚拟机器来运行此应用程式不仅可以省下一台电脑硬体费用,还可以节省伺服主机摆放空间,亦可节省电费,尤其当伺服主机是放在寸土寸金的都市精华地带或ISP 业者Co-Location 时,节省出来的经济效益会是相当可观。

快速的备份与还原作业系统:

重新安装一个Guest 系统(或是一般的作业系统)其实是蛮浪费时间的,藉由虚拟机器技术,我们可以很快速的备份Guest 系统,只要在离线(Guest 系统关机)时备份所使用的磁碟档案(例如test.iso)即可,不论是依照既有Guest 系统快速复制另一个Guest 系统,或是还原之前备份的Guest 系统,都会比重灌快多了,这样一来就不会常常花时间在重灌作业系统上。

原创粉丝点击