文章插图

文章插图
是时候聊一下虚拟机了,因为我们后面即将聊的 Linux 玩法,包括硬盘分区以及在同一块硬盘上安装多个 Linux 发行版、在 X86 的实模式下运行 16 位的程序、探索 Grub 和 Linux 纯字符模式等等,要截图和录像的话,必须借助于虚拟机 。
说起虚拟机,大家都不陌生 。需要使用虚拟机的场景也非常的多,对于有志于写操作系统的同志,往往需要一个虚拟机来运行和调试他写的系统;对于喜欢研究网络体系结构的朋友,往往需要在自己的电脑上虚拟出 N 个系统组成各种各样的网络 。(这个需要电脑的配置够强大才行,幸好本人的电脑够 。)还有些朋友用着 Windows 却想玩 Linux,用着 Linux 却想玩 Windows,这样用虚拟机玩起来也比较方便;最后对于在 Linux 环境下解决起来比较困难的一些需求,如迅雷、QQ、网银、支付宝等,使用虚拟机安装一个 Windows 系统,也可以非常轻松地搞定 。我自己也经常在 Windows 中用 VMWare,感觉它功能强大、使用方便,运行效率也非常高 。我的博客中有不少内容都是在虚拟机中折腾出来的 。在 Linux 系统下,我也用虚拟机,这一篇随笔就向大家展示一下 Linux 中的几种常见的虚拟机软件 。
虚拟机的分类很复杂 。什么全虚拟、半虚拟什么的搞得人头晕 。而且桌面用户和企业级用户对虚拟机的期望值是不一样的 。比如说,我可能期望这样一个虚拟机:
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-i386man qemu-img等等...
QEMU 本身就是一个非常强大的虚拟机,甚至可以在 Xen、KVM 这些虚拟机产品中都少不了 QEMU 的身影 。在 QEMU 的官方文档中也提到,QEMU 可以利用 Xen、KVM 等技术来加速 。为什么需要加速呢,那是因为如果单纯使用 QEMU 的时候,它里面的 CPU 等硬件都是模拟出来的,也就是全虚拟化,所以运行速度是肯定赶不上物理硬件的 。它甚至可以模拟不同架构的硬件,比如说在使用 Intel X86 的 CPU 的电脑中模拟出一个 ARM 体系的电脑或 MIPS 体系的电脑,这样模拟出的 CPU,运行速度更加不可能赶上物理 CPU 。使用加速以后呢,可以把客户操作系统的 CPU 指令直接转发到物理系 CPU,自然运行效率大增 。QEMU 同时也是一个非常简单的虚拟机,给它一个硬盘镜像就可以启动一个虚拟机,如果想定制这个虚拟机的配置,用什么样的 CPU 啊、什么样的显卡啊、什么样的网络配置啊,只需要指定相应的命令行参数就可以了 。它支持许多格式的磁盘镜像,包括 VirtualBox 创建的磁盘镜像文件 。它同时也提供一个创建和管理磁盘镜像的工具 qemu-img 。QEMU 及其工具所使用的命令行参数,直接查看其文档即可 。
下面开始体验 。先看看 Ubuntu 软件源中和 QEMU 有关的包有哪些:
更多linux内核视频教程文本资料免费获取后台私信【内核】 。
上一节展示的 QEMU 是一个强大的虚拟机软件,它可以完全以软件的形式模拟出一台完整的电脑所需的所有硬件,甚至是模拟出不同架构的硬件,在这些虚拟的硬件之上,可以安装完整的操作系统 。QEMU 的运行模式如下图:
其实 VirtualBox 也是采取的这种内核模块加速的模式 。我之所以这么说,是因为在安装 VirtualBox 时,它会要求安装 DKMS 。如下图:
KVM 和 QEMU 是相辅相成的,QEMU 可以使用 KVM 内核模块加速,而 KVM 需要使用 QEMU 运行虚拟机 。从上图可以看到,如果要使用 Ubuntu 的包管理软件安装 KVM,其实安装的就是 qemu-kvm 。而 qemu-kvm 并不是一个什么很复杂的软件包,它只包含很少量几个文件,如下图:
最后,虚拟机运行的效果图如下:
可以这么说,如果没有 VirtualBox 的话,QEMU+KVM 的组合应该是桌面用户的首选 。
VirtualBox —— 性能强大的经典架构##
VirtualBox 号称是目前开源界最强大的虚拟机产品,在 Linux 平台上,基本上都被大家选择为首选的虚拟机软件 。VirtualBox 的强大不是盖的,毕竟其后台是超有钱的 Oracle 公司 。VirtualBox 的任性也不是盖的,它硬是没有使用我前文所述的那些 qemu、kvm、libvirt 等被各个虚拟机使用的开源组件,它的前端、后端以及内核加速模块都是自己开发的,唯有远程桌面所需要的 VNC 大约使用了 libvncserver 。
我在标题中说到 VirutalBox 是使用的经典架构 。所谓经典,主要体现在以下几个方面:
1.虚拟机及虚拟机中的系统(Guest System)仍运行于主操作系统(Host System)之上,只是通过主操作系统的内核模块进行加速;
2.Unix 系统中 Front-End 模式的经典架构,在 VirtualBox 中,VirtualBox 的图形界面只不过是命令行界面的虚拟机软件 VBoxManage 的图形包装而已,同时,它还提供 VBoxSDL、VBoxHeadless 等命令行工具 。VBoxHeadless 就可以运行一个不显示虚拟机桌面的虚拟机,如果要显示桌面,可以运行一个远程桌面连接它 。前后端分离有一个好处,就是对于桌面用户,可以使用前端的图形界面简化操作,而对于企业级用户,可以使用命令行工具构建自动化脚本,甚至在系统启动时自动运行虚拟机 。
我并不是一开始就喜欢上 VirtualBox 的,一点小小的插曲差点就让我错过了这么好的虚拟机软件 。本来我刚开始看到在各个 Linux 论坛都将 VirtualBox 放到首位,而不是在新闻中铺天盖地的 KVM、Xen,我就觉得 VirutalBox 可能有点不够专业,再加上第一次使用 VirtualBox 时,发现它不能完美转发 Ctrl+Alt+Fx(x=1~12),发现它的有些配置不能完全在图形界面中设置,需要手动更改配置文件,然后我就放弃了 。直到我掌握的正确的折腾 Linux 的方法论,看完了它长达 369 页的用户手册,我才真正了解了它的强大,并深深爱上了它 。VirtualBox 把右边的 Ctrl 定义为 Host 键,要向客户机发送 Ctrl+Alt+Fx,只需要按 Host+Fx 就行了 。
首先,在 Ubuntu 中安装 VirutalBox 是非常容易的,只需要一个 sudo apt-get install virtualbox 即可 。
安装完 VirtualBox 后,可以考察一下它所遵守的我之前提到的“经典架构”,命令和运行结果如下图:
启动 VirtualBox,新建虚拟机和安装操作系统的过程我就不多说了,图形界面很强大,一步一步执行准没错 。安装完 WinXP 后,运行效果如下图:
VirtualBox 功能非常强大,单凭我这一篇博文是不可能学会的 。好在是我这一个系列一直都是秉承“授人以鱼不如授人以渔”的原则,一直都是指导折腾 Linux 系统的方法论,并贴图让没有亲自动手机会的人也对 Linux 系统有一个直观的感受,也一直指出从哪里可以找到相应的学习资料 。用 dpkg -L 命令,就可以找出我前面提到的 VirtualBox 自带的长达369页的文档,使用 Ubuntu 自带的 evince 阅读器阅读之,如下图:
Xen —— 令人脑洞大开的奇异架构##
在虚拟机领域,Xen 具有非常高的知名度,其名字经常在各类文章中出现 。同时 Xen 也具有非常高的难度,别说玩转,就算仅仅只是理解它,都不是那么容易 。之所以如此,那是因为 Xen 采用了和我前面介绍的那几个虚拟机完全不同的架构 。在这里,我称之为令人脑洞大开的奇异架构 。
在经典的虚拟机架构中,虚拟机软件运行于 Host System 之中,而 Guest System 运行于虚拟机软件之中 。为了提高 Guest System 的运行速度,虚拟机软件一般会在 Host System 中使用内核模块开一个洞,将 Guest System 的运行指令直接映射到物理硬件上 。但是在 Xen 中,则根本没有 Host System 的概念,传说它所有的虚拟机都直接运行于硬件之上,虚拟机运行的效率非常的高,虚拟机之间的隔离性非常的好 。
当然,传说只是传说 。我刚开始也是很纳闷,怎么可能让所有的虚拟机都直接运行于硬件之上 。后来我终于知道,这只是一个噱头 。虚拟机和硬件之间,还是有一个管理层的,那就是 Xen Hypervisor,只不过这个管理层可以做得相当薄 。当然 Xen Hypervisor 的功能毕竟是有限的,怎么样它也比不上一个操作系统,因此,在 Xen Hypervisor 上运行的虚拟机中,有一个虚拟机是具有特权的,它称之为 Domain 0,而其它的虚拟机都称之为 Domain U 。
Xen的架构如下图:
既然 Domain 0 也是一个虚拟机,也是被管理的对象,所以可以给它分配很少的资源,然后将其余的资源公平地分配到其它的 Domain 。但是很奇怪的是,所有的虚拟机管理软件其实都是运行在这个 Domain 0 中的 。同时,如果要连接到其它 Guest System 的控制台,而又不是使用远程桌面(VNC)的话,这些控制台也是显示在 Domian 0 中的 。所以说,这是一个奇异的架构,是一个让人很不容易理解的架构 。
这种架构桌面用户不喜欢,因为 Host System 变成了 Domain 0,本来应该掌控所有资源的主操作系统变成了一个受管理的虚拟机,本来用来打游戏、编程、聊天的主战场受到限制了,可能不能完全发挥硬件的性能了,还有可能运行不稳定了,自然会心里不爽 。(Domain 0确实不能安装专用显卡驱动,确实会运行不稳定,这个后面会讲 。)但是企业级用户喜欢,因为所有的 Domain 都是虚拟机,所以可以更加公平地分配资源,而且由于 Domain U 不再是运行于 Domian 0 里面的软件,而是和 Domain 0 平级的系统,这样即使 Domain 0 崩溃了,也不会影响到正在运行的 Domain U 。(真的不会有丝毫影响吗?我表示怀疑 。)
下面开始在 Ubuntu 系统中体验 Xen 。使用如下命令可以在 Ubuntu 的软件源中搜索和 Xen 相关的软件包以及安装 Xen Hypervisor:
sudo aptitude search xensudo aptitude install xen-hypervisor-4.4-amd64
传说在旧版本的 Xen Hypervisor 上只能运行经过修改过的 Linux 内核 。但是在目前的版本中不存在该问题 。我机器上的 Ubuntu 14.10 系统不经任何修改,就可以当成 Domain 0 中的系统运行 。至于是否让该系统运行于 Xen Hypervisor 上,在启动时可以选择,如下图:下面来测试一下 Xen 虚拟机的运行效果 。通过前文的探讨,可以看出一个虚拟机的运行需要两个要素:一是一套虚拟的硬件系统,二是一个包含了操作系统的磁盘镜像 。QEMU 虚拟机关于硬件的配置全由命令行指定,VirtualBox 虚拟机的硬件配置存在于配置文件中,而 Xen 呢,它也存在于配置文件中,这个配置文件要我们自己写 。至于磁盘镜像,还是复用我之前创建的那个 WinXP.img 吧,记住,它是 qcow2 格式的 。
先进入我主目录的 virtual-os 目录,ls 看一下,里面有我之前创建的 WinXP.img 。然后,我们创建一个 WinXP_Xen.hvm 配置文件,其内容如下:
builder = "hvm"name = "WinXP_Xen.hvm"memory = 2048vcpus = 2disk = [ '/home/youxia/virtual-os/WinXP.img, qcow2, hda, rw' ]sdl = 1
这段配置文件很简单,也很容易懂 。hvm 代表这是一个全虚拟化的虚拟机,和全虚拟化相对的是半虚拟化,半虚拟化只能运行经过修改的内核,但是可以获得更高的性能 。为该虚拟机分配 2 个 CPU 和 2G 内存,并指定硬盘镜像文件 。最后一个 sdl=1 表示使用 SDL 图形库显示虚拟操作系统的界面,如果不想用 SDL,也可以写成 vnc=1,这样需要使用 vncviewer 才能连接到虚拟机操作系统的桌面 。至于 Xen 的配置文件怎么写,管理命令怎么用,这个必须得有学习资料 。通过 man xl 和 man xl.cfg 查看手册页是可以的,但是最全面的资料还是在 Xen 的官网 上 。
使用 sudo xl list 命令可以看到系统中只有一个Domain 0在运行,然后使用 sudo xl create -c WinXP_Xen.hvm 即可运行一个 Domian U 虚拟机,该虚拟机使用 WinXP_Xen.hvm 配置文件 。xl 命令的 -c 选项表示把 Domain U 的控制台显示在 Domain 0 中,如果不用 -c 选项而使用 -V 选项,则创建虚拟机后使用 vncviewer 进行连接 。新建的虚拟机运行起来后,再次使用 sudo xl list 命令,可以看到除了Domain 0,还多了一个名称为“WinXP_Xen.hvm”的虚拟机 。运行效果如下图:
【怎样使用虚拟打印机 虚拟机怎么打印】我觉得,Xen 虚拟机不应该是桌面用户的首选,因为它架构比较奇异不容易理解,可能因内核升级而出现不稳定,不能充分发挥桌面硬件的性能,如不能使用 Nvidia 的显卡;桌面用户还是应该首选 VirtualBox 。企业及客户可以考虑 Xen,因为它可以提供较好的性能和隔离性,企业级用户不需要桌面用户那么多的功能,所以可以把 Domain 0 做到很薄,可以完全不要图形界面,也不用经常升级内核,甚至可以选择一个经过修改优化的内核,这样就可以在一套硬件上运行尽可能多的虚拟机 。
- 洗衣粉和消毒液能混着用吗 如何正确使用消毒液
- .js是什么意思 JS是啥意思
- 怎样在淘宝收藏店铺 淘宝 怎么收藏店铺
- kms激活工具怎么激活office2010 kms激活office使用教程
- reader使用教程 reader方法
- 怎样撩妹成功率高,准确的和女生打情骂俏的方法
- 成人高考成绩怎么查询不了 成人高考成绩怎么查询
- 酱大骨怎么做
- codeblocks下载安装教程 codeblocks安装使用教程
- 夫妻感情不和怎么办 夫妻感情不和怎样办