成功的安装是指能够达到预期目的的安装。
default file——默认文件
universal configuration language——UCL,通用配置语言
run FreeBSD in the real world, doing real work, in a real environment.
FreeBSD将配置文件分为默认文件(default file)和自定义文件(customization file)。默认文件包含变量赋值,不打算被编辑;相反,它们被设计为由另一个同名文件覆盖。
默认配置保存在名为defaults的目录中。例如,引导加载程序配置文件是/boot/loader.conf,默认配置文件是/boot/defaults/loader.conf。此默认配置文件中包含加载程序变量的完整列表。
在升级过程中,安装程序会替换默认配置文件,但不会触及你的本地配置文件。这种分离确保了你的本地更改保持不变,同时仍然允许将新值添加到系统中。FreeBSD在每个版本中都添加了功能,其开发人员不遗余力地确保对这些文件的更改是向后兼容的。这意味着你不必经历升级后的配置并手动合并更改;最多,你必须查看新的默认文件,以了解漂亮的配置机会和新的系统功能。
加载器配置文件就是这些文件的一个很好的例子。/boot/defaults/loader.conf文件包含数十个类似的条目:
xxxxxxxxxx
verbose_loading="NO" # Set to YES for verbose loader output
变量verbose_loading默认为NO。要更改此设置,请不要编辑/boot/defaults/loader.conf,而是将改行添加到/boot/loader.conf并在那里进行更改。你的/boot/loader.conf条目会覆盖默认设置,你的本地设置只包含你的本地更改。系统管理员可以很容易地看到所做的更改,以及此系统与开箱即用的配置有何不同。
建议将配置文件保存到版本控制系统中。可以借助第三方全局配置管理系统,如Ansible。或者使用svn(1)或者git(1)的集中式存储库。即使是像rcs(1)这样的本地版本控制系统,总有一条也可以保存你的隐藏。
默认配置机制出现在整个FreeBSD中,特别是在核心系统配置中。
不要复制默认设置。
一个常见的错误是将默认配置复制到覆盖文件,然后直接在那里进行修改。这种复制将在系统的某些部分造成重大问题。例如,将/etc/defaults/rc.conf复制到/etc/rc.conf将阻止你的系统启动。
UCL是一个用于管理Unix风格配置文件的通用库。FreeBSD使用UCL作为核心功能,如打包系统。
UCL中的任何文件都可以以多种格式之一出现,例如大多数Unix程序使用的传统变量=设置格式、YAML或JSON。如果你以前配置过任何Unix软件,UCL都不会有问题。
我们将在本书中看到UCL风格配置的示例。此时你不需要知道UCL的细节,只需要知道UCL是FreeBSD中的一件事。
FreeBSD支持大多数RAID控制器,并包含管理大多数RAID控制器的软件。但不建议使用硬件RAID控制器,尤其是对于使用ZFS的系统。ZFS希望直接访问硬盘。硬件RAID控制器会禁用ZFS的大部分自愈和纠错能力。如果必须使用RAID控制器,应禁用RAID并将其用作存储控制器。在部署ZFS之前,请验证您的RAID控制器是否可以切换到仅一堆磁盘(just-a-bunch-of-disks——JBOD)或主机总线适配器(host-bus-adapter——HBA)模式。
本书以amd64为参考平台。
一些硬件供应商坚持对硬件接口保密。此类设备称为专有硬件。
在大多数情况下,不受支持的专有硬件可以很容易地用更便宜、更开放的选项替换。
强烈建议尽可能避免使用二进制驱动程序,并避免使用需要此类驱动程序的硬件。
FreeBSD官网的版本发行说明中有HCL——Hardware Compatibility List。
大多数硬件要求都已经成为过去。任何生产过的amd64系统都可以运行FreeBSD。
A piece of hardware should work doesn’t mean it will work.
“Inexpensive” is not the same as “cheap.”
FreeBSD在虚拟机上运行良好,如VMware、VirtualBox、Xen和KVM。
FreeBSD集成了bhyve(8) 虚拟机和OpenBSD的vmm(8)。
128MB的RAM和1GB的磁盘可以进行基本安装。
BIOS(basic input/output system)源自1980s的IBM,用来处理低级硬件任务。
EFI(Extensible Firmware Interface——扩展固件接口)比BIOS更灵活、更强大。
使用EFI允许FreeBSD做一些有趣的事情,比如全磁盘加密。
如果硬件支持EFI,就使用它。只有当FreeBSD在你的硬件EFI实现中暴露了错误时,才回到BIOS模式。遇到这种情况,建议提交错误报告。
硬件设置实用程序可能会将BIOS模式成为“legacy boot”或“ancient crap”,或类似的东西。
安装系统最关键的部分也许是如何分配磁盘空间和使用哪种文件系统。
FreeBSD支持UFS和ZFS。
UFS由来已久,并一直在不断开发中。
ZFS由Solaris于2005年推出,并于2007年集成到FreeBSD中。
不建议在32位系统中使用ZFS。不建议在RAM小于4GB的主机上运行ZFS。
UFS比ZFS更适合小型和嵌入式系统。
ZFS为虚拟化服务器提供了一个很好的存储系统,但它不一定适合使用磁盘映像的虚拟机。
许多虚拟机没有足够的内存来有效运行ZFS。迁移也会有问题。
如果您想在虚拟化客户端上使用ZFS,请确保您的虚拟化系统在安装大量主机之前支持恢复和迁移ZFS磁盘映像。
ZFS不依赖ECC,没有ECC的ZFS并不比有ECC的UFS差。尽量使用ECC,如果硬件支持的话。
使用RAID卷作为磁盘会干扰ZFS的自愈功能。许多RAID控制器声称提供原始磁盘(raw disks),但它们真正提供的是单磁盘RAID容器(one-disk RAID containers)。
修复UFS文件系统中的每TB需要700MB的RAM。如果你在6GB RAM的系统上创建7TB的文件系统,FreeBSD无法自动修复它。
简而言之,在现代amd64笔记本电脑或服务器上,推荐ZFS。i386硬件或RAM小于4G的64位主机上使用UFS。
对于正在运行高负载、高容量的应用程序和数据库,请在生产机上尝试UFS和ZFS,看看哪种在应用程序中效果更好。
尝试不同的磁盘排列、ZFS池类型和GEOM RAID方法。有些应用程序与UFS的配合比ZFS更好。例如,Netflix的所有内容都来自FreeBSD主机,这些主机具有大量用UFS格式化的存储空间。
在安装大型存储服务之前,请查看第十二章以了解ZFS部署注意事项。
所有建议都是次要的,而不是铁律:选择最适合你环境的文件系统。
FreeBSD支持两种磁盘加密系统:基于GEOM的磁盘加密(GEOM-Based Disk Encryption——GBDE)和GELI。
本书不涵盖gbde(8)。
geli(8)加密系统可以防止常见的风险。销毁加密密钥后,磁盘将无法读取。
建议加密整个系统或不加密任何系统。部分加密的磁盘为熟练的入侵者提供了破坏系统和破坏加密的机会。
在继续之前,请确定是否需要加密。
所谓分区——partitioning,就是将磁盘或磁盘阵列划分为逻辑单元。
分区方案——partitioning scheme,是用于组织磁盘上分区的系统。
FreeBSD使用gpart(8)管理MBR和GPT。
在任何支持GPT的系统上使用GPT,无论磁盘大小如何。仅当系统不支持GPT时才使用MBR。
使用UFS需要考虑文件系统分区。FreeBSD安装程序不会试图预测你希望如何对系统进行分区。
至少,将操作系统与数据分开。如果此主机用于用户账户,请创建单独的/home分区。
老手通常创建独立的/usr、/usr/local、/var、/var/log、/home分区。以及一个用于root的分区和一个用于交换空间的分区,还有一个用于服务器应用程序数据的单独分区。但这种做法已经过时了。
现代FreeBSD的基本安装大约需要半GB,为操作系统和相关程序分配20GB应该足够了。
不过,如果你在现代硬件上运行FreeBSD,强烈建议使用ZFS。
多引导安装不如虚拟化。
bhyve(8)管理程序允许你在FreeBSD上运行其他操作系统。
其他操作系统具有管理程序允许你在其上运行FreeBSD。
如果你的主机上有多个硬盘驱动器,应该使用它们来创建某种存储冗余。
如果使用ZFS,可考虑镜像或某种RAID-Z;如果使用UFS,可考虑软RAID。
经验法则仍然是将操作系统与应用程序数据分开。
如果有足够多的磁盘,建议将操作系统安装到镜像的两个硬盘上,并将其他硬盘用于存储数据。这样做虽有争议,但不是非常糟糕的主意。
理想情况下,将镜像操作系统磁盘连接到不同的驱动器控制器上会更安全。
SATA磁盘控制器将其所有数据吞吐量分配给与其连接的所有硬盘驱动器。如果SATA控制器上有两个磁盘,则每个磁盘的平均工作速度大约是单独在同一通道上工作速度的一半。端口数增加虽然可以提供更多的硬盘连接,但降低了每个磁盘的性能。
永远不要低估程序吞噬RAM的能力。
虚拟系统可能会分配非常少的RAM。
长久以来,人们一直认为主机的交换量应该是物理内存的两倍。但现在这种想法不仅过时了,而且很危险。当一个进程开始灾难性地分配内存时,一旦系统用完虚拟内存,内核就会杀死该进程。i386平台将每个进程的内存使用限制在512MB,这意味着内核会很快停止此类失控的进程。但amd64系统具有巨大的虚拟内存空间。一个在磁盘和RAM之间来回切换千兆字节内存的系统将极其缓慢。现代主机应该只有足够的交换空间来执行其任务。
现代系统上交换的主要用途是在系统死机和崩溃时有一个存储内存转储的地方。FreeBSD使用内核迷你转储,因此它们只转储内核内存。迷你转储比完整转储小得多。对于大多数情况,每10GB RAM提供1GB的交换空间应该就足够了。
对于特殊场景,应考虑采用特殊手段。
FreeBSD官网通常提供两个用于生产的版本。
两个生产版本通常是当前版本和前一代版本。前一代版本虽然缺乏一些当前版本所具有的功能,但许多人已经在生产环境使用几个月或几年,任何明显的问题都得到了解决。
每个FreeBSD版本最终都会达到生命周期结束(End of Life——EoF),并失去支持。在到达EoF之前,应将旧版本升级到新版本。
FreeBSD平均一次发布两个生产版本。这不是一条不可侵犯的规则,只是观察到的行为。
有人认为.0版本不可靠,大概率是因为他们被坑过。
对于以前从未使用过FreeBSD的人,建议安装最新的生产版本。它具有最新的设备驱动程序和最新的功能。
所有安装介质都提供了一个.xz压缩版。如果你可以很方便地提取.xz文件,建议下载压缩版本。这可以节省捐赠的带宽并减少下载时间。
FreeBSD提供了两种安装介质,一种用于网络安装,安装过程中需要连接网络从镜像站点下载必要文件;另一种包含操作系统文件。
安装程序有光盘(.iso)和闪存(.img)两种格式。.img格式通常不能用于虚拟机安装。
旧文档强调了选择一个好的镜像站点进行安装的重要性。但当前不需要再理会这一操作。
FreeBSD还提供了更大的DVD镜像。它包含了所有FreeBSD和一大堆软件包。这是为那些没有互联网接入的情况下使用FreeBSD的人准备的。
请记住,FreeBSD项目的所有带宽都是捐赠的;除非你真的需要,否则不要下载大容量的DVD映像。
一旦你有了安装映像,你需要在实际的启动介质上获取它。使用操作系统的内置工具将映像刻录到物理磁盘。虽然Windows现在将CD刻录作为内置功能,但它不包括闪存盘映像。FreeBSD项目推荐Windows版Image Writer(https://sourceforge.net/projects/win32diskimager/),一个非常好的选择。打开程序,选择闪存驱动器和图像,然后单击开始。
如果您的安装介质仅引导安装程序,并且您需要通过网络获取FreeBSD发行版文件,则需要在安装程序运行时配置网络。如果您的网络运行DHCP,安装程序应该只是获取您的网络配置。如果没有,您的FreeBSD主机将需要有效的网络配置。启动安装程序之前,请收集:
如果你必须使用代理服务器来访问互联网,你也需要它的配置。
有了这些信息,你就可以安装FreeBSD了。