第八章:安装到ZFS

此章讨论在ZFS上安装FreeBSD10。

此章演示的脚本适用于偶尔安装几台机器,对于机架配置机器,建议使用基于PXE的安装程序。

硬件限制了选择,比如笔记本电脑只有一个硬盘,运行FreeBSD意味着使用单个条带虚拟设备池。如果有数百个磁盘,需要考虑如何划分池。

如果有许多磁盘,应将操作系统和数据分开。

FreeBSD和一系列附加软件非常适合镜像池或RAID-Z。

不要把操作系统安装到RAID-Z3上。

安装基于ZFS的系统需要配置存储池、分配数据集,并为数据集安装FreeBSD。

FreeBSD 参考安装

在自定义安装FreeBSD系统之前,可以先安装一个小型的FreeBSD ZFS虚拟机作为参考平台。

安装程序提供了一些经过深思熟虑的默认设置,尽量不要错过。

启动参考平台,以root登录,运行zfs history命令查看此ZFS使如何创建的:

我们将在整个安装过程中使用这些信息来调整我们的安装。

关于FreeBSD14.1

以下是FreeBSD14.1安装的情况:

 

自定义ZFS安装分区

引导到FreeBSD安装程序映像,然后选择安装。

到对磁盘进行分区时,选择命令行,而不是任何自动或引导方法。

磁盘分区

当计算机启动时,它会在存储介质上查找操作系统。

对于FreeBSD,这是个引导加载程序(boot loader)。

FreeBSD提供了gptzfsboot引导加载程序,专门用于从ZFS池引导。

硬件BIOS启动引导加载程序,激活池并启动FreeBSD内核。

引导池中每个虚拟设备中的每个磁盘都应该安装ZFS引导加载程序,这意味着必须对磁盘进行分区。

基于某种愚蠢的原因,FreeBSD引导加载程序分区的最大大小仅略高于512KB,因此,引导加载程序分配512KB。

然后放入一个1GB的FreeBSD交换分区,并将剩余空间分配给ZFS。

交换分区和ZFS分区以1MB的边界对齐。

然后安装FreeBSD ZFS bootloader到磁盘上。每个可以启动的磁盘都需要bootloader:

对存储池中涉及到的每个磁盘重复以上操作。

创建池

仍然在磁盘格式化命令提示符处,将磁盘组装到跟存储池中。

通常将根池成为system或zroot,或者自行定义。

以下是默认FreeBSD安装时zpool history的信息,

这是FreeBSD10.1系统。

安装程序在/mnt临时挂载引导池。根据实际情况修改一些设置,比如将压缩设置lz4、禁用atime、-m none告诉zpool不要向该池分配挂载点、适用-f选项让zpool忽略磁盘上的任何其他ZFS信息、altroot属性提供一个临时挂载点。

10.1安装程序尚未更新以利用vfs.zfs.min_auto_ashift sysctl,我们要使用它:

ZFS现在使用4k字节扇区。使用以下命令创建池:

很有可能,FreeBSD的默认池安装选项很好。我们可能会想调整数据集。

数据集

参考FreeBSD安装的默认值,对于普通用户来说是明智的。

建议添加自己的数据集,但保持默认值不变。

以下是参考FreeBSD主机上zpool history的一些片段,省略了时间戳:

根据自己的需求创建一些自己数据集,比如zroot/var/mysql等。

参考FreeBSD Mastery: Storage Essentials创建安装脚本。

完成以上操作后退出命令行分区,安装程序将继续。

关于FreeBSD14.1

以下是按照FreeBSD14.1默认安装情况修改的:

 

安装后设置

安装程序完成将文件复制到磁盘、设置网络等操作,有机会进入已安装的系统并进行修改。

确保ZFS在/etc/rc.conf中启动,这将在启动时挂载文件系统数据集:

编辑/boot/loader.conf告诉FreeBSD在启动时加载ZFS:

完成后重启系统。

手动安装FreeBSD

如果必须去命令行对磁盘进行分区,也可以自己将FreeBSD安装到磁盘上。FreeBSD发行版文件位于/usr/FreeBSD-dist中,可以使用tar命令将它们写入到磁盘。

假设安装目标已经挂载在/mnt中:

可以安装其他分发集,但base和kernel时唯一关键的。

手动安装需要一个/etc/fstab文件,用于swap文件。在/mnt/etc/fstab中创建它。

还可以编辑关键系统文件。如/mnt/etc/rc.conf和/mnt/boot/loader.conf。

通过一些工作和测试,可以使ZFS安装变得简单或复杂。