Chinaunix首页 | 论坛 | 博客
  • 博客访问: 835371
  • 博文数量: 244
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 2420
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-29 09:07
文章分类

全部博文(244)

文章存档

2011年(4)

2010年(3)

2009年(72)

2008年(119)

2007年(46)

我的朋友
UML

分类: LINUX

2007-11-25 09:02:56

此处的UML并非我们常说的统一建模语言(Unified Modeling Language,UML),而是User-mode Linux ,要运行UML通常需要一个支持uml的内核(2.6以上的内核开始支持UML)和一个根文件系统。
下载linux内核
sudo apt-get install linux-source-2.6.20
下载的linux-source-2.6.20.tar.bz2将会安装在/usr/src目录
mhf@mhf-ubuntu:~$ cd /usr/src
mhf@mhf-ubuntu:/usr/src$ sudo tar -xvf linux-source-2.6.20.tar.bz2
mhf@mhf-ubuntu:/usr/src$ cd linux-source-2.6.20/
mhf@mhf-ubuntu:/usr/src/linux-source-2.6.20$ sudo make mrproper
mhf@mhf-ubuntu:/usr/src/linux-source-2.6.20$ sudo make menuconfig ARCH=um
mhf@mhf-ubuntu:/usr/src/linux-source-2.6.20$ sudo make linux ARCH=um

准备根文件系统
1.从网上下载根文件系统
2.自己手动制作
网上的根文件系统都比较old,所以最好自己制作


制作根文件系统
创建一个合适大小的文件,通常1G足够了。

mhf@mhf-ubuntu:/nfsroot$ dd if=/dev/zero of=uml.rootfs bs=1MB count=400
格式化:
mhf@mhf-ubuntu:/nfsroot$ mke2fs uml.rootfs
挂在:
mhf@mhf-ubuntu:/nfsroot$ sudo mkdir /mnt/uml.rootfs
mhf@mhf-ubuntu:/nfsroot$ sudo mount -o loop uml.rootfs /mnt/uml.rootfs/
我是用gpephone的发布版本来做根文件系统

GPEPhoneDemo-vmimage_0.92.tar.bz2


mhf@mhf-ubuntu:/nfsroot$ sudo cp gpephone-demo/*  /mnt/uml.rootfs/ -rf
编译安装模块
mhf@mhf-ubuntu:/nfsroot$ cd /usr/src/linux-source-2.6.20/
mhf@mhf-ubuntu:/usr/src/linux-source-2.6.20$ sudo make modules ARCH=um
mhf@mhf-ubuntu:/usr/src/linux-source-2.6.20$ sudo make modules_install INSTALL_MOD_PATH=/mnt/uml.rootfs
mhf@mhf-ubuntu:~$ sudo umount /mnt/uml.rootfs/

启动虚拟机
./linux ubd0=/nfsroot/uml.rootfs
如果要用到交换分区,那么
mhf@mhf-ubuntu:/nfsroot$ dd if=/dev/zero of=uml.swap bs=1M count=256
启动的时候出现:
xterm: Can't execvp port-helper: No such file or directory
从网站下载port_helper 源码安装这个工具

工具被默认安装到/usr/lib/uml
export PATH=/usr/lib/uml:$PATH
或者加到 ~/.bahshrc 文件

./linux ubd0=/nfsroot/uml.rootfs ubd1=/nfsroot/uml.swap mem=128
出现:
Mapping memory: Cannot allocate memory
./linux ubd0=/nfsroot/uml.rootfs ubd1=/nfsroot/uml.swap 则通过
注意命令中的ubd0 也可以用ubda代替,他表示虚拟己的第一个分区
登录uml以后在/dev 下我们可以看到设备:
root@x86:/dev$ ls ubd* -ls
0 brw-rw----    1 root     disk      98,   0 Nov 23 14:35 ubda
0 brw-rw----    1 root     disk      98,  16 Nov 23 14:35 ubdb
root@x86:/dev$ mkswap /dev/ubdb
Setting up swapspace version 1, size = 268431360 bytes
root@x86:/dev$ swapon /dev/ubdb
root@x86:/dev$ swapon -s
也可以指定/dev/ubdb 使用其他的文件系统,如果ext2
root@x86:~$ swapoff /dev/ubdb
root@x86:~$ mkfs.ext2 /dev/ubdb
...
root@x86:~$ mkdir /mnt/ubdb
root@x86:~$ mount /dev/ubdb /mnt/ubdb
root@x86:~$ ls /mnt/ubdb -l
drwx------    2 root     root        12288 Nov 23 14:50 lost+found

虚拟设备也可以指向到主机系统的物理设备,如果,当你指定ubdb=/dev/cdrom, 在虚拟机中,虚拟机uml内核就可以访问主机上的CDROM设备。
在主机上也可以指定一个tar文件为虚拟机的一个块设备,当启动mul内核的时候,指定ubdb=/path/filename.tar,然后在虚拟机上使用命令:tar -xf /dev/ubdb 解开tar文档的内容,这是一个从主机拷贝数据到虚拟机的简单方法。

写时拷贝(copy-on-write)
想象一下,假设你有多个相似的虚拟机,希望他们使用同一个根文件系统,这样就可以节省大量的磁盘空间,但是问题是所有的虚拟机都会向共享的镜像(文件系统)写入数据,这样就会相互影响(存在竞争的问题),写时拷贝就是为了解决这个问题



访问主机文件系统(Host file access )
从虚拟机存取物理主机上的文件,UML提供了几个方法,最简单的就是使用hostfs,在虚拟机上运行下面的命令,虚拟机就可以通过/host 目录访问整个主机的文件系统:
mount -t hostfs none /host
使用hostfs系统的前提是虚拟机的内核必须选上这种文件系统
mhf@mhf-ubuntu:/usr/src/linux-2.6.20$ sudo make menuconfig ARCH=um
UML-specific options --->
      <*> Host filesystem
下面是一个较复杂的例子:如何在主机文
阅读(1338) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~