---
title: 第 23 章 虚拟化
part: 部分 III. 系统管理
prev: books/handbook/vinum
next: books/handbook/l10n
showBookMenu: true
weight: 27
params:
  path: "/books/handbook/virtualization/"
---

[[virtualization]]
= 虚拟化
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:sectnumoffset: 23
:partnums:
:source-highlighter: rouge
:experimental:
:images-path: books/handbook/virtualization/

ifdef::env-beastie[]
ifdef::backend-html5[]
:imagesdir: ../../../../images/{images-path}
endif::[]
ifndef::book[]
include::shared/authors.adoc[]
include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
include::shared/attributes/attributes-{{% lang %}}.adoc[]
include::shared/{{% lang %}}/teams.adoc[]
include::shared/{{% lang %}}/mailing-lists.adoc[]
include::shared/{{% lang %}}/urls.adoc[]
toc::[]
endif::[]
ifdef::backend-pdf,backend-epub3[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]

ifndef::env-beastie[]
toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]

[[virtualization-synopsis]]
== 概述

虚拟化软件能够让同一台机器上同时运行多个操作系统。 在 PC 上， 这种系统通常由一个运行虚拟化软件的宿主操作系统， 以及一系列客户操作系统组成。

读完这章， 您将了解：

* 宿主操作系统与客户操作系统的区别。
* 如何在采用 Intel(R) 处理器的 Apple(R) Macintosh(R) 计算机上安装 FreeBSD。
* 如何在 Microsoft(R) Windows(R) 以 Virtual PC 安装 FreeBSD。
* 如何针对虚拟化环境对 FreeBSD 系统进行性能调优。

在阅读这章之前， 您应：

* 理解 UNIX(R) 和 FreeBSD 的基础知识 (crossref:basics[basics,UNIX 基础])。
* 了解如何安装 FreeBSD (crossref:install[install,安装 FreeBSD])。
* 了解如何配置网络连接 (crossref:advanced-networking[advanced-networking,高级网络])。
* 了解如何安装第三方软件 (crossref:ports[ports,安装应用程序. Packages 和 Ports]).

[[virtualization-guest]]
== 作为客户 OS 的 FreeBSD

[[virtualization-guest-parallels]]
=== MacOS 上的 Parallels

为 Mac(R) 设计的 Parallels Desktop 是一种可用于采用 Intel(R) 处理器， 并运行 Mac OS(R) 10.4.6 或更高版本的 Apple(R) Mac(R) 计算机的商业软件。 它为 FreeBSD 系统提供了完整的支持。 在 Mac OS(R) X 上安装了这个软件之后， 用户需要配置虚拟机并安装所需的客户操作系统。

[[virtualization-guest-parallels-install]]
==== 在 Parallels/Mac OS(R) X 上安装 FreeBSD

在 Mac OS(R) X/Parallels 上安装 FreeBSD 的第一步是创建一个新的虚拟机。 在系统提示选择客户 OS 类型 (menu:Guest OS Type[]) 时选择 [.guimenuitem]#FreeBSD#， 并根据您使用 FreeBSD 虚拟实例的需要分配磁盘和内存：

image::parallels-freebsd1.png[]

对多数在 Parallels 上使用 FreeBSD 的情形而言， 4GB 磁盘空间和 512MB 的 RAM 就够用了：

image::parallels-freebsd2.png[]

image::parallels-freebsd3.png[]

image::parallels-freebsd4.png[]

image::parallels-freebsd5.png[]

选择使用的网络和网卡类型：

image::parallels-freebsd6.png[]

image::parallels-freebsd7.png[]

保存并完成配置：

image::parallels-freebsd8.png[]

image::parallels-freebsd9.png[]

在创建了 FreeBSD 虚拟机之后， 还需要在其中安装 FreeBSD。 最好的做法是使用官方的 FreeBSD CDROM 或从官方 FTP 站点下载的 ISO 镜像来完成这个任务。 如果您的本地 Mac(R) 文件系统中有 ISO 映像文件， 或您的 Mac(R) 的 CD 驱动器中有 CDROM， 就可以在 FreeBSD Parallels 窗口的右下角点击光盘图标。 之后， 系统将给出一个窗口， 供您完成将虚拟机中的 CDROM 驱动器连接到本地的 ISO 文件或真正的 CDROM 驱动器上。

image::parallels-freebsd11.png[]

在完成了将 CDROM 与您的安装源完成关联之后， 就可以按重启 (reboot) 图标来重启 FreeBSD 虚拟机了。 Parallels 将配合一个特殊的 BIOS 启动， 后者能够像普通的 BIOS 一样检查系统中是否有 CDROM 驱动器。

image::parallels-freebsd10.png[]

此时， 它就能够找到 FreeBSD 安装介质并开始 crossref:install[install,安装 FreeBSD] 中所介绍的标准的基于 sysinstall 安装的过程。

image::parallels-freebsd12.png[]

此时您可以安装 X11， 但暂时不要对它进行配置。 在完成安装之后， 重启并进入新安装的 FreeBSD 虚拟机。

image::parallels-freebsd13.png[]

[[virtualization-guest-parallels-configure]]
==== 在 Mac OS(R) X/Parallels 上配置 FreeBSD

在您将 FreeBSD 安装到 Mac OS(R) X 的 Parallels 上之后， 还需要进行一系列的配置， 以便为系统的虚拟化操作进行优化。

[.procedure]
====

. 配置引导加载器变量
+ 
最重要的一步是通过调低 `kern.hz` 变量来降低 Parallels 环境中的 FreeBSD 对 CPU 的使用。 这可以通过在 [.filename]#/boot/loader.conf# 中增加下述配置来完成：
+
[.programlisting]
....
kern.hz=100
....
+ 
如果不使用这个配置， 闲置的 FreeBSD Parallels 客户 OS 会在单处理器的 iMac(R) 上使用大约 15% 的 CPU。 如此修改之后， 空闲时的使用量就减少到大约 5% 了。
. 创建新的内核配置文件
+ 
您可以删去全部 SCSI、 FireWire， 以及 USB 设备驱动程序。 Parallels 提供了一个由 man:ed[4] 驱动的虚拟网卡， 因此， 除了 man:ed[4] 和 man:miibus[4] 之外的其他网络接口驱动都可以从内核中删去。
. 配置网络
+ 
最基本的网络配置， 是通过使用 DHCP 来将您的虚拟机与宿主 Mac(R) 接入同一个局域网。 这可以通过在 [.filename]#/etc/rc.conf# 中加入 `ifconfig_ed0="DHCP"` 来完成。 更高级一些的网络配置方法， 请参见 crossref:advanced-networking[advanced-networking,高级网络] 中的介绍。
====

[[virtualization-guest-virtualpc]]
=== Windows(R) 上的 Virtual PC

Virtual PC 是 Microsoft(R) 上的 Windows(R) 软件产品， 可以免费下载使用。 相关系统要求，请参阅 http://www.microsoft.com/windows/downloads/virtualpc/sysreq.mspx[system requirements] 说明。 在 Microsoft(R) Windows(R) 装完 Virtual PC 之后， 必须针对所安装的虚拟机器来做相应设定。

[[virtualization-guest-virtualpc-install]]
==== 在 Virtual PC/Microsoft(R) Windows(R) 上安装 FreeBSD

在 Microsoft(R) Windows(R)/Virtual PC 上安装 FreeBSD 的第一步是新增虚拟器。 如下所示，在提示向导中请选择 [.guimenuitem]#Create a virtual machine#：

image::virtualpc-freebsd1.png[]

image::virtualpc-freebsd2.png[]

然后在 [.guimenuitem]#Operating system# 处选 [.guimenuitem]#Other#：

image::virtualpc-freebsd3.png[]

并依据自身需求来规划硬盘容量和内存的分配。对大多数在 Virtual PC 使用 FreeBSD 的情况而言， 大约 4GB 的硬盘空间以及 512MB 的内存就够用了。

image::virtualpc-freebsd4.png[]

image::virtualpc-freebsd5.png[]

保存并完成配置：

image::virtualpc-freebsd6.png[]

接下来选择新建的 FreeBSD 虚拟机器，并单击 menu:Settings[]， 以设定网络种类以及网卡：

image::virtualpc-freebsd7.png[]

image::virtualpc-freebsd8.png[]

在新建 FreeBSD 虚拟机器以后， 就可以继续以其安装 FreeBSD。 安装方面， 比较好的作法是使用官方的 FreeBSD 光盘或从官方 FTP 站下载 ISO 镜像。 若您的 Windows(R) 系统 内已有该 ISO 镜像， 那么就可以在 FreeBSD 虚拟机器上双击， 以开始启动。 接着在 Virtual PC 窗口内按 menu:CD[] 再按 menu:Capture ISO Image...[]。 接着出现一个对话框， 可以把虚拟机器内的光驱设定到该 ISO 镜像， 或者是真实的光驱。

image::virtualpc-freebsd9.png[]

image::virtualpc-freebsd10.png[]

设好光盘来源之后，就可以重新开机， 也就是先按 menu:Action[] 再按 menu:Reset[] 即可。 Virtual PC 会以特殊 BIOS 开机， 并与普通 BIOS 一样会先检查是否有光盘驱动器。

image::virtualpc-freebsd11.png[]

此时， 它会找到 FreeBSD 安装光盘， 并开始在 crossref:install[install,安装 FreeBSD] 内所介绍的 sysinstall 安装过程。 这时候也可以顺便安装 X11， 但不要进行相关设定。

image::virtualpc-freebsd12.png[]

完成安装之后， 记得把安装光盘或者 ISO 镜像退出。 最后， 把装好的 FreeBSD 虚拟机器重新开机即可。

image::virtualpc-freebsd13.png[]

[[virtualization-guest-virtualpc-configure]]
==== 调整 Microsoft(R) Windows(R)/Virtual PC 上的 FreeBSD

在 Microsoft(R) Windows(R) 上以 Virtual PC 装好 FreeBSD 后， 还需要做一些设定步骤， 以便将虚拟机内的 FreeBSD 最佳化。

[.procedure]
====

. 设定 boot loader 参数
+ 
最重要的步骤乃是藉由调降 `kern.hz` 来降低 Virtual PC 环境内 FreeBSD 的 CPU 占用率。 在 [.filename]#/boot/loader.conf# 内加上下列设定即可：
+
[.programlisting]
....
kern.hz=100
....
+ 
若不作这设定， 那么光是 idle 状态的 FreeBSD Virtual PC guest OS 就会在单一处理器的电脑上大约有 40% 的 CPU 占用率。 作了上述修改之后, 占用率大约会降至 3%。
. 建立一个新的内核配置文件
+ 
可以放心把所有的 SCSI， FireWire 和 USB 设备驱动都移除。 Virtual PC 有提供 man:de[4] 的虚拟网卡， 因此除了 man:de[4] 以及 man:miibus[4] 以外其他的网卡也都可以从内核的配置文件中移除。
. 设定网络
+ 
可以给虚拟机器简单得使用 DHCP 来设定与 host (Microsoft(R) Windows(R)) 相同的本地网络环境， 只要在 [.filename]#/etc/rc.conf# 加上 `ifconfig_de0="DHCP"` 即可完成。 其他的高级网络设置， 可参阅 crossref:advanced-networking[advanced-networking,高级网络].
====

[[virtualization-guest-vmware]]
=== 运行于 MacOS 的 VMware

Mac(R) 版本的 VMware Fusion 是一个商业软件，运行在基于 Intel(R) 的 Apple(R) Mac(R) 计算机的 Mac OS(R) 10.4.9 或更版本的操作系统上。 FreeBSD 是一个完全被支持的客户操作系统。 在 Mac OS(R) X 上安装了 VMware Fusion 之后， 用户就可以着手配置一个虚拟机器并安装客户操作系统。

[[virtualization-guest-vmware-install]]
==== 在 VMware/Mac OS(R) X 上安装 FreeBSD

第一步是运行 VMware Fusion， 虚拟机器库将被装载。 单击 "New" 创建 VM：

image::vmware-freebsd01.png[]

New Virtual Machine Assistant 将被运行来帮助你创建 VM， 单击 Continue 继续：

image::vmware-freebsd02.png[]

在 [.guimenuitem]#Operatiing System# 项选择 [.guimenuitem]#Other#，[.guimenuitem]#Version# 项可选 [.guimenuitem]#FreeBSD# 或 [.guimenuitem]#FreeBSD 64-bit#。

image::vmware-freebsd03.png[]

选一个你想要的 VM 镜像名字和存储的目录位置。

image::vmware-freebsd04.png[]

选择 VM 虚拟硬盘的大小：

image::vmware-freebsd05.png[]

选择安装 VM 的方式， 从一个 ISO 镜像或一张 CD 安装：

image::vmware-freebsd06.png[]

一旦你点击了 Finish， VM 就会启动了：

image::vmware-freebsd07.png[]

以你通常的方式安装 FreeBSD 或者参照 crossref:install[install,安装 FreeBSD] 中的步骤：

image::vmware-freebsd08.png[]

安装完成之后，你就可以修改一些 VM 的设定，比如内存大小：

[NOTE]
====
在 VM 运行的时候，VM 系统硬件的设置是无法修改的。
====

image::vmware-freebsd09.png[]

配置 VM 的 CPU 数量：

image::vmware-freebsd10.png[]

CD-ROM设备的状态。通常当你不在需要 CDROM/ISO 的时候可以切断他们跟 VM 的连接。

image::vmware-freebsd11.png[]

最后一项需要修改的是 VM 与网络连接的方式。 如果你希望除了宿主以外的机器也能连接到 VM， 请选择 [.guimenuitem]#Connect directly to the physical network (Bridged)#。选择 [.guimenuitem]#Share the host's internet connection (NAT)# 的话， VM 可以连接上网络，但是不能从外面访问。

image::vmware-freebsd12.png[]

在你修改完设定之后，就可以从新安装的 FreeBSD 虚拟机器启动了。

[[virtualization-guest-vmware-configure]]
==== 配置运行于 Mac OS(R) X/VMware 上的 FreeBSD

在 Mac OS(R) X 上的 VMware 上安装完 FreeBSD 之后，有些配置的步骤可用来优化虚拟系统。

[.procedure]
====
. 设置 boot loader 变量
+ 
最重要的步骤是降低 `kern.hz` 来减少 VMware 上 FreeBSD 的 CPU 使用率。这需要在 [.filename]#/boot/loader.conf# 里加入以下这行设定：
+
[.programlisting]
....
kern.hz=100
....
+ 
如果没有这项设定，VMware 上的 FreeBSD 客户 OS 空闲时将占用 iMac(R) 上一个 CPU 大约 15% 的资源。在修改此项设定之后仅为 5%。
. 创建一个新的内核配置文件
+ 
你可以去掉所有的 FireWire, USB 设备的驱动程序。 VMware 提供了一个 man:em[4] 支持的虚拟网络适配器，所以除了 man:em[4] 之外的网卡驱动都可以被剔除。
. 设置网络
+ 
最基本的网络设定包括简单的使用 DHCP 把你的虚拟机器连接到宿主 Mac(R) 相同的本地网络上。 在 [.filename]#/etc/rc.conf# 中加入： `ifconfig_em0="DHCP"`。 更多有关网络的设置可以参阅 crossref:advanced-networking[advanced-networking,高级网络]。
====

[[virtualization-host]]
== 作为宿主 OS 的 FreeBSD

在过去的几年中 FreeBSD 并没有任何可用的并被官方支持的虚拟化解决方案。 一些用户曾时使用过利用 Linux(R) 二进制兼容层运行的 VMware 陈旧并多半已过时的版本 (比如 package:emulators/vmware3[])。 在 FreeBSD 7.2 发布不久， Sun 开源版本 (Open Source Edition OSE) 的 VirtualBox(TM) 作为一个 FreeBSD 原生的程序出现在了 Ports Collection 中。

VirtualBox(TM) 是一个开发非常活跃， 完全虚拟化的软件， 并且可在大部份的操作系统上使用， 包括 Windows(R)， Mac OS(R)， Linux(R) 和 FreeBSD。同样也能把 Windows(R) 或 UNIX(R) 作为客户系统运行。 它有一个开源和一个私有两种版本。 从用户的角度来看， OSE 版本最主要的限制也许是缺乏 USB 的支持。 其他更多的差异可以通过链接 http://www.virtualbox.org/wiki/Editions[http://www.virtualbox.org/wiki/Editions] 查看 "Editions" 页面。 目前， FreeBSD 上只有 OSE 版本可用。

[[virtualization-virtualbox-install]]
=== 安装 VirtualBox(TM)

VirtualBox(TM) 已作为一个 FreeBSD port 提供， 位于 package:emulators/virtualbox-ose[]， 可使用如下的命令安装：

[source,shell]
....
# cd /usr/ports/emulators/virtualbox-ose
# make install clean
....

在配置对话框中的一个有用的选项是 `GusetAdditions` 程序套件。 这些在客户操作系统中提供了一些有用的特性， 比如集成鼠标指针 (允许在宿主和客户系统间使用鼠标， 而不用事先按下某个特定的快捷键来切换) 和更快的视频渲染， 特别是在 Windows(R) 客户系统中。 在安装了客户操作系统之后， 客户附加软件可在 menu:Devices[] 菜单中找到。

在第一次运行 VirtualBox(TM) 之前还需要做一些配置上的修改。port 会安装一个内核模块至 [.filename]#/boot/modules# 目录， 此模块需要事先加载：

[source,shell]
....
# kldload vboxdrv
....

可以在 [.filename]#/boot/loader.conf# 中加入以下的配置使此模块在机器重启之后能自动加载：

[.programlisting]
....
vboxdrv_load="YES"
....

在 3.1.2 之前版本的 VirtualBox(TM) 需要挂接 [.filename]#proc# 文件系统。 在新版本中不再有此要求， 因为它们使用了由 man:sysctl[3] 库提供的功能。

当使用旧版本的 port 时， 需要使用下面的步骤来挂载 [.filename]#proc#：

[source,shell]
....
# mount -t procfs proc /proc
....

为了使配置能在重启后始终生效， 需要在 [.filename]#/etc/fstab# 中加入以下这行：

[.programlisting]
....
proc	/proc	procfs	rw	0	0
....

[NOTE]
====
如果在运行 VirtualBox(TM) 的终端中发现了类似如下的错误消息：

[source,shell]
....
VirtualBox: supR3HardenedExecDir: couldn't read "", errno=2 cchLink=-1
....

此故障可能是由 [.filename]#proc# 文件系统导致的。 请使用 `mount` 命令检查文件系统是否正确挂载。
====

在安装 VirtualBox(TM) 时会自动创建 `vboxusers` 组。 所有需要使用 VirtualBox(TM) 的用户必须被添加为此组中的成员。 可以使用 `pw` 命令添加新的成员：

[source,shell]
....
# pw groupmod vboxusers -m yourusername
....

运行 VirtualBox(TM)， 可以通过选择你当前图形环境中的 [.guimenuitem]#Sun VirtualBox#， 也可以在虚拟终端中键入以下的命令:

[source,shell]
....
% VirtualBox
....

获得更多有关配置和使用 VirtualBox(TM) 的信息， 请访问官方网站 http://www.virtualbox.org[http://www.virtualbox.org]。 鉴于 FreeBSD port 非常新， 并仍处于开发状态。请查看 FreeBSD wiki 上的相关页面 http://wiki.FreeBSD.org/VirtualBox[http://wiki.FreeBSD.org/VirtualBox] 以获取最新的信息和故障排查细则。
