Colinux,不是虚拟机,胜似虚拟机
Colinux,不是虚拟机,胜似虚拟机 一些使用记录
潘孙友 2010.12.25 于遵义
目录 一、Colinux长什么样? 1.1 文件组成 1.2 运行着的colinux 二、Colinux内外文件访问 三、colinux 网络模式 3.1 slirp 3.2 tuntap 3.3 pcap-bridge/ndis-bridge 四、安装为NT服务 4.1 安装 4.2 卸载服务 五、给colinux中的linux加硬盘 六、图形界面 七、我的ubuntu配置文件 八、在colinux中安装喜欢的发行版
引用自:http://hi.baidu.com/usen68/blog/item/e9a84995569b1043d0135e18.html Colinux (Cooperative Linux)可使在Windows2000/XP上同时运行Linux成为可能并不借助第三方的虚拟机软件(VMware,VitualPC).它不是一种虚拟机,而是Linux内核的移植,使得Linux 可以natively 运行在Windows上。Colinux的格言是:如果Linux 可以运行在任何一种体系架构(i386,PowerPC,...)。Linux也应该可以运行在另外一种操作系统上(Windows, Linux,...)
好吧,这篇文章写得非常好,使用方法我就不总结了。请一定要好好读安装目录下的文档,比如colinux-daemon.txt,已经写得灰常灰常详细了,根本不需要上网找使用教程。
以前我也喜欢在自己电脑上装个真实的linux,虚拟不太慢,而且给人一种不真实的感觉。colinux的运行效果非常美,我使用已经有好几个月时间了。
colinux基本上是"绿色”软件(就把它当作是另外一个虚拟机吧)。我是通过7-zip解压colinux的安装程序来获取colinux的文件的,这样可以看清colinux的文件组成,也就是相当于”绿色”版本,一切都自己决定。
最小的colinux自身及可以在内部的运行的linux由三个文件组成即可。
- 1. linux.sys
- colinux通过此驱动与windows交互,以实现在windows上运行linux内核的功能。(有没理解错?)
- 2. colinux-daemon.exe
- colinux主要程序,通过它可以安装linux.sys,通过它来运行linux内核vmlinuz。
- 3. ubuntu.disk
- 最后需要的就是镜像文件了,相当于我们把整个linux系统安装在这一个文件里。这个文件就是我们的linux的“硬盘”,它的大小是多大,linux里看到的磁盘(其实是分区)就是多大。我安装了一个ubuntu,所以取名叫ubuntu.disk,另外我还有zenwalk.disk,slackware.disk和opt_4g.disk,从名字就可以看出是干什么的。
通过coLinux-0.7.8.exe安装的colinux,它主要由以下文件组成:
colinux-console-fltk.exe colinux终端 colinux-console-nt.exe colinux终端 colinux-daemon.exe colinux主程序 colinux-debug-daemon.exe 类似于上面 linux.sys netdriver 此目录主要用来在windows中安装虚拟网卡,也是“绿色”的 1. OemWin2k.inf 2. removeAllNIC.bat 3. tap.cat 4. tap0801co.sys 5. tapcontrol.exe colinux-net-daemon.exe 当以tuntap方式使用网络时需要 colinux-serial-daemon.exe 不知道什么用 colinux-slirp-net-daemon.exe 当使用slirp网络时需要 colinux-ndis-net-daemon.exe ndis-bridge模式需要 colinux-bridged-net-daemon.exe pcap-bridge需要 initrd.gz 安装colinux内linux时需要 vmlinux 这个是colinux提供的linux内核,凡是安装在colinux内的linux都只能统一使用此内核 vmlinux-modules.tar.gz 与vmlinux相对应的内核模块,在安装好linux后,第一次使用initrd.gz时会被自动复制到镜像系统中去,和initrd.gz一样只使用一次就可以了。
1.2 运行着的colinux
Colinux实例像Oracle/DB2/Sybase之类的数据库总喜欢讲“实例”这个词,其实就是存在于系统中一个有完整功能的对象。对colinux来说,就是一台完整的虚拟主机(有CPU,内存,网卡,硬盘,和VMware一样,不过没VMware那样具体)。
我在镜像文件unbunt.disk中安装了个ubuntu,内部ubuntu网络使用slirp方式上网,并且把这个colinux实例安装NT服务,开机自动运行ubuntu。开机后,有两个进程:colinux-daemon.exe和colinux-slirp-net-daemon.exe,通过windows任务管理器查看,内存占用9MB,CPU使用率为0(因为ubuntu跑起来后没多少程序在运行)。
如此之低的资源占用,却可以让我随时可以进入一个完整的真实的纯粹的linux环境,难道colinux还不完美么?
二、Colinux内外文件访问
安装在镜像文件(就是那个好几G大小的文件)里的linux,可以通过如下几种方式与外面的windows互相访问文件系统。
在colinux提供的linux内核中已经默认编译了cofs文件系统的支持。Cofs似乎是一种虚拟文件系统,它可以让colinux的linux把在各colinux实例的配置中配置的windows目录当做磁盘设备,可以通过mount加载上来。 比如我有三个盘符,C/D/E,我在实例ubuntu的配置文件中写了cofs0=c:\ cofs1=d:\ cofs2=e:\,然后我在ubuntu中通过 mount –t cofs 0 /mnt/winc来加载cofs0到目录/mnt/winc (其它两个盘符类似操作),这样就可以自由地在linux读写windows下的文件了。 还可以把mount写入/etc/fstab让linux启动自动加载,实在想不出还有什么比这更方便了。既然colinux里安装的是个linux,又能联网,那安装一些文件传输服务器是自然而然的事情,这里就不多说废话了。
三、colinux 网络模式
如果linux不能联网,那有啥意思。通过colinux运行的linux系统,可以有以下几种连网方式。
先提前说一下,在tuntap和pcap-birdge模式的配置中,网卡的名称很重要,需要和在“控制面板”“网络连接”中看到的一致。
这是最简单的一种,它的原理是在linux内核中提供slirp(好吧,我不知道这是什么东西)驱动,给linux提供一个虚拟出来的仅在linux内部可见的网络接口,网络配置是固化的(见后面的配置文件)。在colinux-daemon.exe运行的同时运行colinux-slirp-net-daemon.exe协同工作,以实现让colinux中访问windows所能访问的网络。
它能让colinux内的linux访问外部网络,从其它主机访问内部linux是受限的,但好在slirp提供了类似于"端口重定向"这样的功能,仅需要在colinux的配置中标识出来就可以用了。
这种方式几乎不需要做什么事情就能让linux与外部主机交互。
以我的ubuntu.conf配置为例:
eth0=slirp,00:ff:78:1b:42:00,tcp:5901:5901/tcp:22:22/tcp:80:80
之后,在linux中配置eth0的网络(如果使用slirp模式,必须这样配置):
iface eth0 inet static address 10.0.2.15 netmask 255.255.255.0 gateway 10.0.2.2 broadcast 10.0.2.255
这样就可以在linux中上网了,并且把当前windows的5901/22/80端口都重定向到内部linux上,使得局域网里其它主机也可以访问我的虚拟ubuntu。
这种方式唯一的缺憾就是需要通过端口重定向到当前windows才能访问内部虚拟ubuntu。
3.2 tuntap
这种方式利用微软的网络连接功能(ICS),就是平时我们使用双网卡共享上网的做法,只不过这里的第二张(或者第N张)网卡是虚拟出来的。这种方式也非常简单,在能上网的网卡上选择共享网络连接,然后设置虚拟网卡IP和虚拟机内部linux同网段即可。
比如虚拟网卡(我改名为TAP-Colinux)的IP为192.168.11.1,而内部linux的ip为192.168.11.150,内部ubuntu linux的网关及dns都设置为192.168.11.1,内部就可以上网了。这种模式下,我的windows是可以直接访问内部虚拟主机的,因为它们都在192.168.11网段。但是可惜的是,我局域网中的其它主机是无法连接我们内部ubuntu系统的。
这种方式本也挺好,但我有段时间windows网络共享坏掉了,无法修复,所以也就无法使用不再用它。
eth0=tuntap,"TAP-Colinux",00:ff:78:1b:40:00
这属于桥接模式,需要第三方的软件包wincap的支持。
照理说这是最好的模式,因为它把colinux里的linux置于和当前windows同等的网络地位,像一台真实存在于网络里的主机一样,设置固定IP或者通过DHCP获取IP,直接可以上网。但是,我发现网络里的其它主机(包括我当前的windows)能ping通colinux内的ip,但是却无法连接任何端口。
举例来说,我在ubuntu (10.22.65.138)中开了ssh服务,在外部主机(10.22.65.123)可以ping它,并且telnet 10.22.65.138 22也有反应,但是就是无法收发数据,telnet连接被挂起(照理说应该输出SSH-2.0-OpenSSH_5.5p1 Debian-4ubuntu4字符的),ssh也无法连接。
也许是我忽略了什么,反正这种模式也被我抛弃了。
eth0=pcap-bridge,"本地连接","00:ff:78:1b:41:00"
四、安装为NT服务
我们可以把colinux实例(比如我的ubuntu)安装为windows服务。我写了个批处理:
installUbuntuService.bat@ set path=%cd%\..\..\bin\;%path% colinux-daemon.exe --install-service ubuntu @%cd%\ubuntu10.10.conf sc config ubuntu depend= "" sc config ubuntu start= auto net start ubuntu pause
说明一下,这里的sc config ubuntu depend是因为默认通过 –install-service安装的服务会有两个依赖项:colinuxDriver和另外一什么东西,但实际上是不需要的。如果是使用“绿色”版colinux,则可能没注册过这些没用的服务,不如把依赖清理掉。
相应的卸载脚本为:
uninstallUbuntuService.bat@ set path=%cd%\..\..\bin\;%path% net stop ubuntu colinux-daemon.exe --remove-service ubuntu pause
平时我们可以通过net start 服务名和net stop 服务名来启动及关闭我们的“虚拟机”。服务是可以安装多个,可以同时启动(就像VMware里可以同时运行好几台虚拟机),比如我的机器上,还安装了zenwalk、slackware。
五、给colinux中的linux加硬盘
Colinux使用的“硬盘”其实就是普通二进制文件,是无格式的裸文件,在windows xp中,可以通过下面的命令生成文件。
fsutil file createnew c:\disk\ext4_4G.disk 4294967296
比如上面的命令就在c:盘下生成了一个大小为4G的文件。 这里的fsutil命令是xp自带的,与colinux无关。
我们只要在colinux的实例配置中加上
cobd2=C:\disk\ext4_4g.disk
就可以使用cobd2了。当然,在linux中要往这个“分区”中写数据,还得先格式化,并且把它加载上来。
mkfs.ex4 /dev/cobd2 mount –t ext4 /dev/cobd2 /mnt/newDisk
六、图形界面
这本不属于colinux的主题。
既然colinux内跑着一个完全真实的linux系统,那么我们就可以通过ssh连接上去,并且可以把X11数据转发到本地。于是,只要在windows中安装XMing之类的X-Server软件,我们就可以在putty打开的终端中直接启动linux下的图形界面程序了。
详细的配置见这篇文章,非常详细: http://hi.baidu.com/mooncold/blog/item/8e0dfddc4f29a3a4cd11663a.html/cmtid/0f278f82283e2c9ef603a61a七、我的ubuntu配置文件
#屏幕 cocon=120x40 #内核 kernel=D:\opt\coLinux\dist\ubuntu\boot\vmlinux #initrd=D:\opt\coLinux\dist\ubuntu\boot\initrd.gz root=/dev/cobd0 ro #内存 mem=512 #磁盘 cobd0=D:\opt\coLinux\dist\ubuntu\disk\ubuntu_4G.disk cobd1=D:\opt\coLinux\dist\ubuntu\disk\swap.disk cobd2=C:\disk\opt_4g.disk #网络 eth0=slirp,00:ff:78:1b:42:00,tcp:5901:5901/tcp:22:22/tcp:80:80 #eth1=tuntap,"TAP-Colinux",00:ff:78:1b:40:00 #eth1=pcap-bridge,"本地连接","00:ff:78:1b:41:00" #共享目录 cofs0=c:\ cofs1=d:\ cofs2=e:\
八、在colinux中安装喜欢的发行版
各发行版安装方式相似,简单记录一下(详细的可以另外写篇记录)。这里不限发行版,可以是ubuntu/slackware/zenwalk/fc/debian/suse …
1. 取安装光盘中的initrd文件,名字可能因发行版不同而稍有变化。
2. 在配置文件中加载此initrd,即配置中的initrd=一项
3. 通过cofs,加载windows目录,通过mount –o loop 加载光盘镜像
这之后,就看各发行版的安装步骤了,可以肯定的是都能安装,只是过程会有些痛苦,再说吧。我已经搞定了unbuntu 10.10、slackware 13.0、zenwalk 6.4
over, 暂时记录这么多。