今天看到一个软件 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 秒开机……)