说起虚拟机,大家都不陌生。需要使用虚拟机的场景也非常的多,比如有志于写操作系统的同志,往往需要一个虚拟机来运行和调试他写的系统;再比如喜欢研究网络体系结构的朋友,需要在自己的电脑上虚拟出N个系统组成各种各样的网络。(这个需要电脑的配置够强大才行,幸好本人的电脑够。)还比如用Windows的想玩Linux,用Linux想玩Windows,这样用虚拟机玩起来也比较方便;最后比如有人想研究一下目前最流行的大数据啊、云计算啊,想试一试Hadoop、Spark、OpenStack什么的,没有虚拟机怎么搭建实验环境。我自己也经常用虚拟机,在Windows中用的是VMWare,感觉它功能强大、使用方便,运行效率也非常的高。我的博客中有不少内容都是在虚拟机中折腾出来的,你们能分得出来吗?在Linux系统下,我也用虚拟机。比如在我的这一篇《使用GCC和GNU Binutils编写能在x86实模式运行的16位代码》中,我就使用QEMU来运行一个FreeDOS系统,用来调试我的16位代码。其实我自己也是一个喜欢研究操作系统的主,结识QEMU就是从《自己动手写操作系统》这本书开始的。
虚拟机的分类很复杂。什么全虚拟、半虚拟什么的搞得人头晕。我用过的虚拟机也不少了,也总是分不清这些概念。而且桌面用户和企业级用户对虚拟机的期望值是不一样的。比如说,我可能期望这样一个虚拟机:
1.它能模拟出一台完整的个人电脑,我可以给它安装任何我想安装的操作系统;
2.它要有比较好用的图形界面,模拟出的电脑也要能无障碍运行Windows或Gnome这样的图形系统,能打游戏最好;
3.客户操作系统所用的硬盘就是宿主操作系统中的一个镜像文件,随时可复制粘贴,随时可打包带走;
4.最好能模拟出一些本身不存在的硬件,比如多个网卡什么的。
很显然,VMWare Workstation就是这样一个可以完美满足我要求的桌面用户最满意的虚拟机。我经常使用它来折腾各个Linux发行版,而且运行流畅。当然,在Linux这个开源的世界我们是不该去使用破解版这样的东西的。不过不用担心,在Linux江湖中,还有VirtualBox、QEMU这样的虚拟机软件可用。
而企业级用户呢,他们期望的虚拟机可能是这样的:
1.它不一定要能模拟出一台完整的电脑,重点是CPU、内存、磁盘和网卡,重点是能当服务器使用;
2.它性能一定要好,虚拟的CPU性能一定要接近物理CPU,一定要充分利用物理CPU的所有特性,为了性能,甚至只能安装经过修改过内核的操作系统;(所谓的半虚拟化技术。)
3.它隔离性一定要好,它的目的是把一台机器分成N台机器用,而管理这N台虚拟机的宿主机要越不占用资源越好,客户机是主,宿主机是次;(正如Xen这样。)
4.由于企业级用户对性能的追求,所以客户机所用的硬盘可能真是一个独立的物理硬盘、磁盘阵列、网络文件系统什么的,而不仅仅只是宿主机上的一个镜像文件;
5.它不一定需要有图形界面,因为使用命令行界面更容易管理,比如自动化啊、远程化啊、批量化啊什么的;
6.更多的企业级高可用性需求,比如什么热备份啊、动态迁移啊什么的。
从上面这些期望值可以看出,虚拟机领域水很深,市场前景也比较广阔。各个虚拟机厂家把自家产品吹得天花乱坠那也是很常见的,因为每一个用户期望的点都可以大做文章嘛。所谓临渊羡鱼,不如退而结网,各种虚拟机看得再过瘾,也不如自己尝试一下。
今天我介绍的是QEMU。还是老规矩,我的博文并不是该软件的使用手册,所以,它的学习资料还请参考QEMU的官网:
或者,在自己的系统中输入如下命令:
man qemu-system-i386
man qemu-img
等等...
QEMU本身是一个非常强大的虚拟机,甚至在Xen、KVM这些虚拟机产品中都少不了QEMU的身影。在QEMU的官方文档中也提到,QEMU可以利用Xen、KVM等技术来加速。为什么需要加速呢,那是因为如果单纯使用QEMU的时候,它自己模拟出了一个完整的个人电脑,它里面的CPU啊什么的都是模拟出来的,它甚至可以模拟不同架构的CPU,比如说在使用Intel X86的CPU的电脑中模拟出一个ARM的电脑或MIPS的电脑,这样模拟出的CPU的运行速度肯定赶不上物理CPU。使用加速以后呢,可以把客户操作系统的CPU指令直接转发到物理CPU,自然运行效率大增。