今天看到一个软件 coLinux,可以在 Windows 上面半虚拟化跑 Linux,效率据说比真机 Linux 还快。
急忙寻求 Linux 下面的类似解决方案,找到了 User Mode Linux,简称 UML。
官方网站在此: http://uml.devloop.org.uk/
下载一个内核,然后解压,当作普通程序一样执行它:
wget -c http://uml.devloop.org.uk/kernels/kernel********.bz2bunzip2 kernel********.bz2chmod +x kernel********./kernel******** ubda=root_fs
别急,先弄一个 root_fs 再说,可以在网站上面下载然后解压,也可以自己弄。既然没有 ArchLinux,我就决定自己弄。
touch arch.imgtruncate -s 8G arch.imgmkfs -t ext4 -F arch.imgmkdir archsudo mount -o loop arch.img archsudo mkdir -p arch/var/lib/pacmansudo pacman -Sy -r arch base net-tools # 其实 linux、mkinitcpio 之类的软件包可以不选。sudo vim arch/etc/fstab # 编辑 fstabsudo vim arch/etc/rc.conf # 编辑 rc.conf
在 rc.conf 的网络配置里面写:
interface=eth0address=10.1.0.2netmask=255.255.0.0gateway=10.1.0.1
然后卸载卷。
sudo umount archrmdir arch
配置网络(这一节需要 root 权限,如果你没有办法获得 root 权限,可以考虑用 slirp 方式而不是现在的 tuntap 方式配置网络,前面的 rc.conf 也要配合修改,这里就不介绍了):
tunctl -u "$(id -un)" -g "$(id -gn)" -t tap1 # tunctl 在 uml_utilities 包里面。ifconfig tap1 10.1.0.1echo 1 >/proc/sys/net/ipv4/ip_forward # 1 和 > 之间的空格不要忘记咯iptables -t nat -A POSTROUTING -j MASQUERADE
最后,启动!秀一下我自己的配置:
./kernel64-3.5.4 ubda=arch.img mem=1G con=pty con1=fd:0,fd:1 root=/dev/ubda eth0=tuntap,tap0
P.S.: 貌似 UML 的 /dev/random 有点问题,读取的时候会卡住,导致 pacman-key 不能跑,临时用这个方法代替吧。
先 ls -l /dev/urandom 确认看到的是这样的:
crw-r--r-- 1 root root 1, 9 /dev/urandom
确认 root 右边那两个数字是 1, 9。
然后用 /dev/urandom 来覆盖掉 /dev/random。
mknod /dev/random c 1 9
最后我要说的事是:它的速度真的很快,我 2.4G 主频的 CPU,开机只需要 8 秒左右,确实比真机都快了。(但是据说有的 OpenVZ 能够 2 秒开机……)
看起来不错的说,能部署到生产环境吗?比OpenVZ怎么样?Xen/KVM呢?
回复删除我折腾 Xen 折腾了一个星期……
删除这个,我只折腾了一个小时。
你应该知道哪个容易哪个难吧。
但是缺点是,目前不能很好地利用多核 CPU(当然你说你要开两个 UML 把 CPU 全部用上那是另外一回事,安慰一下,KVM 对多核利用也不够好)
如果要部署,网络应该是用桥接而不是 masquerade 了吧。
这个是不需要修改主机内核的,只是客户机内核是定制的而已,甚至不需要 root 权限(如果用 slirp 配置网络就不需要 root)。而 Xen、OpenVZ 要动大手术,主机内核都需要特殊的补丁。
另外我觉得效率应该不如 OpenVZ,但是比 KVM 快。
删除因为 OpenVZ 是内核态的,而 UML 是用户态的,光从这个就不一样了……
但是从配置方面来说,UML 很省心,更灵活。
部署还是有一些要考虑的事情。比如 UML 里面执行 mount -t hostfs none /host 就可以浏览主机里面的文件,这个方便了文件共享,但是带来了部署的麻烦,解决方法我已经找到了,如下:
删除http://sourceforge.net/mailarchive/message.php?msg_id=27302239
(续前面3条回复)我个人觉得 UML 的最大用武之地是桌面。很多人用 UML 来调试内核,这个还真是好主意。
删除不是说服务器上面不能部署,确实可以,但是论效率比 KVM 高,但比不上内核态的 OpenVZ,论自由比 OpenVZ 自由,却比不上 KVM……