Colinux,不是虚拟机,胜似虚拟机

标签: colinux 虚拟机 虚拟机 | 发表时间:2010-12-26 00:38 | 作者:潘孙友 wq
出处:http://www.cppblog.com/
排版走样了,点击下载Doc/pdf版本。我似乎已经更喜欢使用word写东西,感觉更正式,缺点是发布为web版本时格式乱糟糟的。
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长什么样?

1.1 文件组成

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互相访问文件系统。

2.1. cofs

在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启动自动加载,实在想不出还有什么比这更方便了。

2.2. sftp/winscp/ftp/samba

既然colinux里安装的是个linux,又能联网,那安装一些文件传输服务器是自然而然的事情,这里就不多说废话了。

三、colinux 网络模式

如果linux不能联网,那有啥意思。通过colinux运行的linux系统,可以有以下几种连网方式。

先提前说一下,在tuntap和pcap-birdge模式的配置中,网卡的名称很重要,需要和在“控制面板”“网络连接”中看到的一致。

3.1 slirp

这是最简单的一种,它的原理是在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

3.3 pcap-bridge/ndis-bridge

这属于桥接模式,需要第三方的软件包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服务

4.1 安装

我们可以把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,则可能没注册过这些没用的服务,不如把依赖清理掉。

4.2 卸载服务

相应的卸载脚本为:

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, 暂时记录这么多。



潘孙友 2010-12-26 00:38 发表评论

相关 [colinux 虚拟机 虚拟机] 推荐:

Colinux,不是虚拟机,胜似虚拟机

- wq - C++博客-首页原创精华区
排版走样了,点击下载Doc/pdf版本. 我似乎已经更喜欢使用word写东西,感觉更正式,缺点是发布为web版本时格式乱糟糟的. Colinux,不是虚拟机,胜似虚拟机 一些使用记录 潘孙友 2010.12.25 于遵义. 目录 一、Colinux长什么样. Colinux的格言是:如果Linux 可以运行在任何一种体系架构(i386,PowerPC,...).

Java虚拟机家族考

- ReadReply - 博客园新闻频道
  说起Java虚拟机,许多Java程序员都会潜意识地把它与Sun[1] HotSpot虚拟机等同看待,也许还有一些程序员会注意到BEA JRockit和IBM J9,但大多数人对JVM的认识都仅限于此了.   从1996年初Sun发布的JDK 1.0中所包含的Sun Classic VM算起,Java虚拟机已经发展了15个年头,沧海桑田一瞬间,15年转眼而过,这期间曾经涌现、湮灭过许多或经典或优秀或有特色的虚拟机实现,在《Java虚拟机专栏》的第1篇中,我们先暂且把代码与技术放下,一起来回顾一下Java虚拟机家族的发展轨迹和历史变迁.

Python 虚拟机实现(一)

- xcv58 - python.cn(jobs, news)
python并不将py文件编译为机器码来运行,而是由python虚拟机一条条地将py語句解释运行,这也是为什么被称为解释语言的原因之一. 但python虚拟机并不直接执行py語句,它执行编译py語句后生成的字节码. 本篇简单地讲下编译、运行的过程,涉及到的内容有如何编译、控制流、函数及类的实现等. python将py文件编译成为PyCodeObject,再将这个对象写入某文件就成为了pyc文件,文件中包含python的magic number(来说明编译时使用的python版本号)、源文件的mtime(使pyc和py文件保持同步)、编译出的code对象.

Xen 虚拟机架构

- - 博客园_知识库
  Xen 是一个基于开源软件组织的虚拟机监控器(即 Virtual Machine Monitor 简称 VMM),可以允许在单一的物理机器上同时运行多个操作系统实例.   虚拟计算机的概念最早由 IBM 公司在上世纪六七十年代提出,并将其运用于 VM/370 系统中以共享昂贵的大型机系统(Main Frame).

虚拟机三种协议

- - 操作系统 - ITeye博客
如何使虚拟机与主机互相能ping通 刚刚因为虚拟机与主机没法互相ping通的事情,奋战到将近凌晨一点. 现在把这个过程总结一下,以方便后加入该行业的广大IT精英. VMWare提供了三种工作模式:bridged(桥接模式)、NAT(网络地址转换模式)和host-only(主机模式). 1.       bridged(桥接模式).

SEO利器-Google GSA虚拟机版本

- Class4 - 车东[Blog^2]
在所有的SEO工具中,能够被称为利器的工具不多,但Google GSA虚拟机版本绝对算是一个. 去年我介绍了《利用Google Search Appliance 服务器做SEO 》,不过这个正式版实在太昂贵而且根据美国的某条法律不销售给中国,所以很多人都没办法用来做SEO应用. 而Google GSA虚拟机版本就很好的解决了这个问题.

文章: Java虚拟机家族考

- Haides - InfoQ中文站
说起Java虚拟机,许多Java程序员都会潜意识地把它与Sun HotSpot虚拟机等同看待,也许还有一些程序员会注意到BEA JRockit和IBM J9,但大多数人对JVM的认识都仅限于此了. 从1996年初Sun发布的JDK 1.0中所包含的Sun Classic VM算起,Java虚拟机已经发展了15个年头,沧海桑田一瞬间,15年转眼而过,这期间曾经涌现、湮灭过许多或经典或优秀或有特色的虚拟机实现,在《Java虚拟机专栏》的第1篇中,我们先暂且把代码与技术放下,一起来回顾一下Java虚拟机家族的发展轨迹和历史变迁.

历史篇:Java虚拟机家族考

- Guancheng(冠诚) - FenixSoft 3.0
  声明:本文为笔者原创,但首发于InfoQ中文站,详见文末声明.   说起Java虚拟机,许多Java程序员都会潜意识地把它与Sun[注1] HotSpot虚拟机等同看待,也许还有一些程序员会注意到BEA JRockit和IBM J9,但大多数人对JVM的认识都仅限于此了.   从1996年初Sun发布的JDK 1.0中所包含的Sun Classic VM算起,Java虚拟机已经发展了15个年头,沧海桑田一瞬间,15年转眼而过,这期间曾经涌现、湮灭过许多或经典或优秀或有特色的虚拟机实现,在《Java虚拟机专栏》的第1篇中,我们先暂且把代码与技术放下,一起来回顾一下Java虚拟机家族的发展轨迹和历史变迁.

KVM 虚拟机故障排除一例

- 火锅土豆 - LinuxTOY
笔者在部署 KVM 虚拟机时曾遇到一个奇怪的问题,几经探索之后终于解决,现在写出来跟大家分享一下. 笔者在单位部署了一台服务器,上面运行着几部 KVM 虚拟机,分别执行不同的任务. 系统上线之后,需要再增加几部虚拟机. 因为当初部署服务器时做了虚拟机备份,所以就复制了一个备份的虚拟机. 可是新虚拟机启动之后无法在本地网络上找到新虚拟机的 IP 地址(本地网络采用 DHCP 分配 IP 地址).

历史篇:Java虚拟机家族考

- tangfl - ITeye论坛最新精华讨论帖
  声明:本文为笔者原创,但首发于InfoQ中文站,详见文末声明.   说起Java虚拟机,许多Java程序员都会潜意识地把它与Sun[注1] HotSpot虚拟机等同看待,也许还有一些程序员会注意到BEA JRockit和IBM J9,但大多数人对JVM的认识都仅限于此了.   从1996年初Sun发布的JDK 1.0中所包含的Sun Classic VM算起,Java虚拟机已经发展了15个年头,沧海桑田一瞬间,15年转眼而过,这期间曾经涌现、湮灭过许多或经典或优秀或有特色的虚拟机实现,在《Java虚拟机专栏》的第1篇中,我们先暂且把代码与技术放下,一起来回顾一下Java虚拟机家族的发展轨迹和历史变迁.