--- 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] 以获取最新的信息和故障排查细则。