由 superbug 在 06-01-2003 23:10 发表:
uml(user mode linux) short-cut version0.1
来坛子转悠几天了也,发个帖子罢,也就随手一写,主要是给大家推荐个东西。所谓好东西不敢独享,既然这里没人说这个,我来开个头,希望能对有需要的人有帮助。
这里的UML是用户态Linux的缩写,不是别的。该项目的主页在
http://user-mode-linux.sourceforge.net/
原站的hotwo在
http://user-mode-linux.sourceforge....inux-HOWTO.html
(可能要设置代理才能访问罢,从国内访问sourceforge.net不知道为啥会这样,郁闷乃至愤怒)
说的简单通俗一点,UML就是
1, Linux上的Linux,在你的Linux内运行另外的Linux,注意,是同时运行,而不是chroot,更不是多启动之类的小儿科;
2, 基于Linux的一个Opensource的VMWARE-like的东东,也可以为你的guestOS提供n多虚拟硬件,做硬件驱动开发和嵌入式开发也不错(不过你只能装linux);
3, 单一物理服务器上实现服务器农场,将一个物理服务器划分为多个独立服务器,前提是这些服务器上运行的都是linux。当然,不必是一样的linux。
举例说明:
1, 用于简单开发。
我的机器上安装了Mandrake9.1,平时我开机大部分非工作时间都在这里;不过工作的关系,我还需要一些甚至是很多其它发布版,乃至自己做的发布版本的测试。我不想划好多分区,也懒得将每个发布逐一改成loop,于是我装上uml的rpm包,下载了它的站点上做好了的root_fs的img镜像,包括debian, slackware, redhat, mandrake, toms等,然后在xterm下一条命令(非root用户):linux ubd0=the_root_fs_image_filename 之后,我的机器上就多出来了一个新的什么什么发布的linux。不但是一个,要不是内存不够,我想多启动几个也么的问题。然后登录到这个系统中,像使用真实系统一样一样的使用它,升级各种lib库,编译程序等等等等,爱干啥干啥,和原系统无关:) 不过如果忽然滴答一声,我知道有新邮件了,随时可以到原来的系统去看看邮件啥的再。当然,要是有必要,你也可以为该guestOS设置网络甚至Xsever,就当它是个完全真实的系统好了:)
2, 用于单一物理服务器上的多虚拟服务器环境架构。
我装了个稳定到除了防火墙几乎没有任何服务在运行的服务器环境的linux,然后装上uml。接下来将定制好的root_fs_img放到服务器上,然后为每个用户生成一个COW文件(不是奶牛,而是即写即备份的意思)。该cow文件保存的是用户所做的针对原始root_fs_img文件发生的变化,而不是原始root_fs_img的简单拷贝,这样一来我可以将原始root_fs_img文件设置为只读,然后给所有的GuestOS设置好网络,就仿佛是一群服务器组成的一个小局域网一样,不过它们都只通过主OS的一块网卡访问外界和被外界访问:) 现在,主OS上的每个用户都有了自己的独立服务器,自己用自己的root帐号去管理罢,和主OS无关啦;而且该服务器大部分只读内容是公用的,节省空间不说,也不存在重装系统的问题--发生严重问题了,删除该用户的COW文件然后重新启动该guesOS进程,该用户就得到了仿佛新安装好的一个系统了。
3, 用于可能带来灾难性后果和随时反复多次的重复性测试工作。
linux下一些平台性的项目后期阶段很多测试反复多次,且不小心就是个重装系统等等。OK,现在用上UML,类似上面说的多虚拟服务器环境,我们的测试就可以在多个guestOS上进行,一切改动被存在Cow文件里头,搞完了就销毁这个Cow文件重新再来过,多省事:)
......等等。反正我用到的基本上是第一种,够自己用就好啦:)
吹嘘了半天,如何用这个东西呢?是否很麻烦?答案是:简单到出人意料。还是举例子来说好了:
1. 我下载了
http://prdownloads.sourceforge.net/...e_mirror=heanet
这个到我的mdk9.1中,rpm -ivh ...完毕,我的/usr/bin中多了一些文件,其中一个可执行文件叫做linux。然后我又下载了
http://prdownloads.sourceforge.net/...e_mirror=aleron
这个只有1.4M大的root_fs_img文件(toms的发布,袖珍linux)
放置到/other/uml下改名为root_fs,
2. 再在该目录下执行(控制台下还是xterm下都可以)linux这个命令。稍等一下,屏幕闪过一些系统启动的信息,完毕,一个login:等着你!ok,现在你的系统中已经同时有两个kernel在跑了,一个支承着你的mdk9.1,另外一个运行于第一个之上,从原始kernel虚拟来一些硬件,支承着你的tomsLinux!
去看看,原来的os还在好好的跑着,这个toms也正常运行... 嗯,其实很普通,一点也不神奇--Linux原本就支持这样用啊,呵呵。
当然,此时此刻我们只是开了个头。现在,下个大点的Debianr3Woody的root_fs_img文件罢:
http://unc.dl.sourceforge.net/sourc...-3.0r0.ext2.bz2
还是放到那目录,改名叫做debian,然后执行:
linux ubd0=debian (请在xterm下执行)
稍等片刻,一切OK! 一个base的debian在你的mdk里头跑起来了,顺畅的很:)
那,如何同时让不同用户使用同一个root_fs_img而利用各自的COW保存改动?如何让guestOS和主系统交互?比如,