UML建立

(来自网络)

此处的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,所以最好自己制作
http://sourceforge.net/projects/user-mode-linux/

制作根文件系统
创建一个合适大小的文件,通常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的发布版本来做根文件系统
http://projects.linuxtogo.org/frs/download.php/57/
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 源码安装这个工具
http://www.user-mode-linux.org/cvs/tools/port-helper/#dirlist
工具被默认安装到/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)
想象一下,假设你有多个相似的虚拟机,希望他们使用同一个根文件系统,这样就可以节省大量的磁盘空间,但是问题是所有的虚拟机都会向共享的镜像(文件系统)写入数据,这样就会相互影响(存在竞争的问题),写时拷贝就是为了解决这个问题
http://user-mode-linux.sourceforge.net/shared_fs.html
http://user-mode-linux.sourceforge.net/UserModeLinux-HOWTO-7.html

访问主机文件系统(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
下面是一个较复杂的例子:如何在主机文

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值