用 coLinux 进行虚拟化

目前,用 VmWare、Xen 和 Kernel-based Virtual Machine(KVM)进行虚拟化非常热门。但是,您是否知道也可以让 Linux® 与 Microsoft® Windows® 进行协作?本文讨论 Cooperative Linux(coLinux),首先简单介绍虚拟化,然后讨论 coLinux 采用的方式。您还会了解如何在 Windows 上设置并运行 coLinux。

在考虑 GNU/Linux 和 Microsoft Windows 时,协作可能是最后考虑的问题,但这正是 coLinux 内核的专长。对此没有信心吗?那就跳到 “coLinux 的优点” 一节。

coLinux 是 Linux 操作系统的一个端口,它在 Microsoft 操作系统中作为一个进程执行。两种操作系统通过将中央处理单元(CPU)的控制权转让给彼此而协作,如图 1 所示。

图 1. Microsoft Windows 和 Linux 在 coLinux 中协作

Microsoft Windows 和 Linux 在 coLinux 中协作通过使用内核驱动程序,还可以共享网络接口等物理资源。后面会深入讨论这个问题。首先,我们来看看虚拟化的含义。

虚拟化

虚拟化(Virtualization)是一个被滥用的词汇。在本文的上下文中,我指的是对平台进行虚拟化。对平台(或硬件)进行虚拟化意味着,硬件从物理平台抽象成一个逻辑平台集合,操作系统可以在这个逻辑平台集合上运行。按照最简单的意义,这意味着可以在同一硬件平台上运行(相同或不同类型的)多个操作系统。

提供虚拟化的系统元素常常被称为虚拟机监视器或管理器(hypervisor)。每个操作系统都使用自己的虚拟机,虚拟机与管理器协作,从而决定对物理硬件的访问(见图 2)。

图 2. 管理器决定对物理硬件的访问

管理器决定对物理硬件的访问与操作系统相似,可用的虚拟化方法多种多样。关于虚拟化的更多信息,请参见 参考资料 一节。

coLinux

coLinux 是标准 Linux 内核的一个端口。换句话说,coLinux 就是一个 Linux 内核,它经过修改,以与另一个操作系统协作运行。主机操作系统(Windows 或 Linux)控制操作系统的物理资源,而访客(guest)操作系统(coLinux)获得硬件的虚拟抽象。主机操作系统必须提供以特权级别(ring 0)执行驱动程序的方法,并提供分配内存的方法(见图 3)。

图 3. coLinux 作为主机操作系统的一个进程执行

coLinux 作为主机操作系统的一个进程执行coLinux 的根文件系统是主机操作系统中的一个常规文件。对于 Windows,它只是一个常规文件;但是对于 coLinux,它是一个可读可写的 ext3 文件系统。

Linux 内核所需的其他特性(比如连网或视频访问)通过外部代理来实现。coLinux 可以通过 TUN/TAP 驱动程序访问连网特性(在下面的 “连网” 一节中讨论)。简单地说,这个驱动程序提供对以太网设备的用户空间访问,这样就可以发送和接收数据包。对显示器的访问也要通过代理。X Window System 是一种协议,按照这种协议在主机之间发送视频输出。因此,通过在主机操作系统上使用 X Window System 服务器,可以将视频输出转发到可用的 X 服务器。

下面,我们就来安装 coLinux 并配置连网特性和视频显示。

安装 coLinux

安装 coLinux 非常容易。这包括几个步骤(具体取决于您的需要),但是这些步骤都很简单,而且在我的 Windows XP 机器上安装时没有出现任何问题。本节讨论如何安装 coLinux 并启用连网等服务。

第一步是下载 coLinux 发布版。访问 http://www.colinux.org 并在左侧栏中选择 Downloads。如果浏览器没有进入 SourceForge,那么选择页面上的链接。页面的中间有 coLinux-stable 包的链接。下载 coLinux 可执行文件(至编写本文时,最新版本是 coLinux-0.6.4.exe)。coLinux 的 0.6.4 版本是 2.6.11 Linux 内核。完成下载之后,双击这个文件开始安装。

在接受许可协议之后,询问您希望安装哪些组件。保持这些设置不变(应该选择了所有组件),包括下载根文件系统映像。为了使后面的操作更容易,将安装 coLinux 的目标文件夹改为 c:\colinux\,因为从配置文件的角度来看,colinux 是标准的安装子目录。

当安装程序要求选择根文件系统映像时,选择 Debian 发布版,因为它是最小的发布版,解压后只有 1GB。选择 Install 来执行安装和根文件系统下载。

安装完成之后,还有工作要做。下一步是在安装子目录中打开一个文件夹,以便对根文件系统进行解压。

coLinux 的 README 文件包含许多关于其他安装选项的信息。这个文件可以在安装子目录(c:\colinux)中找到。这里有一个以 .bz2 结尾的怪名字的文件。将这个文件重命名为 root_fs(这是配置中默认的根文件系统文件)。

现在,coLinux 的安装基本完成了。可以用以下命令在 Windows XP 中启动 coLinux 守护进程(通过命令提示窗口执行):

$ colinux-daemon.exe -c default.colinux.xml

在执行 colinux-daemon 之后,显示引导窗口(见图 4)。这里提供与传统 Linux 引导过程中相同的引导信息。注意,coLinux 的引导非常快。

图 4. coLinux 引导窗口

coLinux 引导窗口还会显示一个控制台窗口(见图 5),它连接到 colinux-daemon。在这个窗口中,可以登录 coLinux 并与 shell 交互。默认的用户名和密码是 root/root

图 5. coLinux 虚拟控制台(shell)

coLinux 虚拟控制台(shell)在图 5 中可以看到,coLinux 控制台由两个部分组成:传统的控制台和虚拟控制台,后者提供关于监视器的信息。

连网

从 Linux 的角度来看,当安装完成时,coLinux 的连网支持已经可用了。在安装过程中已经装载了 TAP 驱动程序。TAP 驱动程序是一个到主机操作系统所管理的以太网设备的用户空间连接。TAP 驱动程序使访客操作系统能够将原始以太网帧写到一个虚拟以太网设备(用户空间的扩展)。然后,用户空间中的虚拟以太网设备将以太网帧传递给主机操作系统中真实的以太网设备。读取的过程正好相反。注意,TAP 驱动程序传递的是以太网帧,而 TUP 驱动程序处理的是 Internet Protocol(IP)帧。

为了支持 TAP 驱动程序,主机操作系统必须共享可用的以太网设备。为了在 Windows XP 中启用共享,从 Control Panel 打开 Network Connections 面板。选择活动的局域连接,然后打开属性。选择 Advanced 选项卡,选中复选框允许其他网络用户通过此计算机的互联网连接来连接(见图 6)。

图 6. 启用网络设备共享的局域连接属性

启用网络设备共享的局域连接属性启用网络共享之后,可以启动 coLinux 并像往常一样使用网络。图 7 显示执行 ping 命令的结果,这说明网络是正常的。

图 7. 通过使用 TAP 驱动程序,使用共享网络设备的过程对于 coLinux 是透明的

通过使用 TAP 驱动程序,使用共享网络设备的过程对于 coLinux 是透明的只需稍加配置,coLinux 就可以提供连网特性。关于用 TUN/TAP 进行连网的更多信息,请参阅 参考资料 一节。

X Window System

有控制台窗口是很不错,但如果有图形化窗口管理器就更好了。通过使用开放源码的 X 服务器,比如 Xming,可以在 coLinux 上创建 xterms 或使用其他图形化应用程序。有许多可行的办法,比如 Virtual Network Computing(VNC),但是我将讲解如何使用 Xming。

第一步是 从 SourceForge 下载 Xming。安装之后,在安装子目录中有一个需要更新的文件,X0.hosts。它包含允许访问 X 服务器的远程主机。只需添加运行 coLinux 进程的机器的 IP 地址。启动 Xming X 服务器和 coLinux,然后在 coLinux 中执行以下命令:

colinux:~# export DISPLAY=192.168.1.3:0.0
colinux:~# xterm &

注意,这里指定的 IP 地址是 coLinux 主机的 IP 地址。在执行 xterm 命令之后,出现一个新的 xterm 窗口,见图 8。

图 8. Xming 创建的 xterm

Xming 创建的 xterm

扩展 coLinux

无论下载哪个根文件系统,它可能不包含您需要的所有东西。但是,可以轻松地扩展根文件系统。例如,在使用 Debian GNU/Linux 时,可以使用 Advanced Packaging Tool(APT,一个包管理系统)来安装新的包或更新现有的包。第一步是更新 APT 元数据,这些数据维护关于安装的包(包括新提供的包以及获得它们的位置)的管理信息:

$ apt-get update

现在,可以用您需要的其他包更新根文件系统。例如,如果希望在根文件系统中添加 Ruby 语言,那么可执行以下命令:

$ apt-get install ruby

按照这种方式,可以使用现有的根文件系统并根据自己的需要进行调整。如果 coLinux 缺少您需要的某些东西,还可以从源代码重新构建 coLinux。

coLinux 的优点

coLinux 是使用和试验 Linux 的一种好方法。与 Cygwin 相似,coLinux 允许在 Windows 操作系统上开发和执行 Linux 应用程序。还可以用 apt-get 安装、更新或删除应用程序,从而维护 Linux 操作系统。

与 Cygwin 不同的是,在 coLinux 上执行 Linux 应用程序不需要重新构建。从这个角度来说,coLinux 是与 Windows 操作系统协作的真正的 Linux 操作系统。

coLinux 另一个令人感兴趣的优点是可移植性。可以在一个 Windows 主机上建立一个 coLinux 发行版,并在根文件系统中安装一套定制的应用程序。然后,可以将根文件系统转移到另一个主机,并重新启动。这样就有了一个可移动的开发平台,压缩后的根文件系统完全可以放在一个标准 USB 记忆棒中。

最后,coLinux 的速度很快,因为它本质上是在本机硬件中运行的。

coLinux 的问题

coLinux 的主要缺点是它有可能导致整个机器崩溃(包括所有进行协作的操作系统),因为访客操作系统以特权模式在主机内核中运行。它的正常操作还依赖于外部软件(窗口和连网支持)。除此之外,coLinux 的安装和配置非常容易。在我使用 coLinux 期间,没有遇到过崩溃。

结束语

尽管有许多虚拟化方案,但是 coLinux 采用的方式和提供的功能很新颖。coLinux 本身在 Windows 之上提供一个虚拟化的 Linux。再加上其他一些开放源码工具,就可以建立一个完全成熟的 Linux 开发系统,包括连网和图形用户界面。coLinux 并不完美,但它是在标准 Windows 桌面计算机上使用 Linux 的好方法。

来源:https://www.ibm.com/developerworks/cn/linux/l-virtualization-colinux/

发表评论