学习ZFS的整个要点是在机器上使用文件系统。让我们讨论一下在ZFS上安装FreeBSD 10。
如果您必须安装一整套FreeBSD机器,例如在服务器场,建议使用PC-BSD安装程序。像我们在这里演示的脚本对于偶尔安装一些机器很好,但如果您是按机架配置机器,那么您确实需要一个基于PXE的安装程序。
您的硬件限制了您的选择。除了极少数例外,笔记本电脑只有一个硬盘驱动器。运行FreeBSD意味着使用单个条带化虚拟设备池进行存储。如果您有数百个磁盘,则需要考虑如何分隔池。
当您有许多磁盘时,请将操作系统与数据分开。FreeBSD和一个很好的附加软件选择非常适合镜像池或RAID-Z。您不需要RAID-Z3来仅用于操作系统!如果您有数百个数据存储磁盘,请为操作系统和数据使用单独的池。有了数百个磁盘,Lucas想要几个单独的池,但他是个老顽固。Jude会把它们全部倒进一个大池子里。唯一错误的选择是为你做更多的工作。
本章假设您熟悉GPT分区、FreeBSD工具(如 gpart(8) )和FreeBSD分区类型。如果不是,请查看FreeBSD文档,或者阅读 《FreeBSD Mastery:Storage Essentials》。(FMSE 还涵盖安装脚本和其他高级安装技术。)
安装基于ZFS的系统需要配置存储池、分配数据集并将FreeBSD安装到数据集。您可以在每个步骤中做出单独的选择,因此我们将分别考虑每个步骤。
但从参考FreeBSD安装开始。
在安装自定义FreeBSD系统之前,请安装一个小型FreeBSD ZFS虚拟机作为参考平台。这提供了关于标准FreeBSD安装的许多信息。安装自己的系统很好,但不要放弃安装程序使用的所有仔细考虑的默认设置。您的目标可能是以安装程序不允许的方式调整安装,而不是放弃所有FreeBSD标准。
启动参考平台,成为 root 用户,然后运行 zpool history 记录,以查看该ZFS是如何创建的。
xxxxxxxxxx# zpool historyHistory for 'zroot':2015-04-08.07:18:30 zpool create -o altroot=/mnt -O compress=lz4 -O atime=off -m none -f zroot raidz1 da0p3.nop da1p3.nop da2p3.nop2015-04-08.07:18:30 zfs create -o mountpoint=none zroot/ROOT2015-04-08.07:18:30 zfs create -o mountpoint=/ zroot/ROOT/default2015-04-08.07:18:30 zfs create -o mountpoint=/tmp -o exec=on -o setuid=off zroot/tmp...我们将在整个安装过程中使用这些信息来调整我们的安装。
以下是FreeBSD14.1安装的情况:
xxxxxxxxxx2024-09-11.18:21:03 zpool create -o altroot=/mnt -O compress=lz4 -O atime=off -m none -f zroot ada0p32024-09-11.18:21:03 zfs create -o mountpoint=none zroot/ROOT2024-09-11.18:21:03 zfs create -o mountpoint=/ zroot/ROOT/default2024-09-11.18:21:03 zfs create -o mountpoint=/home zroot/home2024-09-11.18:21:03 zfs create -o mountpoint=/tmp -o exec=on -o setuid=off zroot/tmp2024-09-11.18:21:03 zfs create -o mountpoint=/usr -o canmount=off zroot/usr2024-09-11.18:21:03 zfs create -o setuid=off zroot/usr/ports2024-09-11.18:21:03 zfs create zroot/usr/src2024-09-11.18:21:03 zfs create -o mountpoint=/var -o canmount=off zroot/var2024-09-11.18:21:03 zfs create -o exec=off -o setuid=off zroot/var/audit2024-09-11.18:21:03 zfs create -o exec=off -o setuid=off zroot/var/crash2024-09-11.18:21:03 zfs create -o exec=off -o setuid=off zroot/var/log2024-09-11.18:21:03 zfs create -o atime=on zroot/var/mail2024-09-11.18:21:03 zfs create -o setuid=off zroot/var/tmp2024-09-11.18:21:03 zfs set mountpoint=/zroot zroot2024-09-11.18:21:03 zpool set bootfs=zroot/ROOT/default zroot2024-09-11.18:21:04 zpool set cachefile=/mnt/boot/zfs/zpool.cache zroot2024-09-11.18:21:04 zfs set canmount=noauto zroot/ROOT/default==以下是在安装过程中创建了第一个账户,安装脚本为此用户创建家目录,并做相关配置==2024-09-11.10:24:21 zfs create -u zroot/home/lidapeng2024-09-11.10:24:21 zfs set mountpoint=legacy zroot/home/lidapeng2024-09-11.10:24:21 zfs allow lidapeng create,destroy,mount,snapshot zroot/home/lidapeng2024-09-11.10:24:21 zfs inherit mountpoint zroot/home/lidapeng引导到FreeBSD安装程序映像,然后选择 install 。当您到达分区磁盘的位置时,请选择命令行,而不是任何自动或引导方法。如果方便的话,您还可以为所需的版本使用类似mfsBSD的东西。
当计算机引导时,它会在存储介质上查找操作系统。对于FreeBSD,这是一个引导加载程序。FreeBSD提供了 gptzfsboot(8) 引导加载程序,专门用于从ZFS池引导。硬件BIOS引导引导加载程序,该加载程序激活池并激发FreeBSD内核。引导池中每个虚拟设备中的每个磁盘都应该安装ZFS引导加载程序,这意味着必须对磁盘进行分区。由于某种愚蠢的(daft)原因,FreeBSD引导加载程序分区的最大大小仅略大于512KB,因此为引导加载程序分配512KB。然后,我们放入1 GB FreeBSD交换分区,并为ZFS分配剩余空间。交换分区和ZFS分区以1 MB边界对齐。
虽然出于教学目的,我将这些短名称用于GPT标签,但我们强烈建议您使用第0章中讨论的基于位置的标签。
xxxxxxxxxx# zpool labelclear -f ada0==以上命令删除ada0上的zfs信息==# gpart destroy -F ada0# gpart create -s gpt ada0==以上两行销毁ada0上现有的分区,并创建gpt分区==# gpart add –a 1m -t freebsd-boot -s 512k -l zfsboot da0da0p1 added# gpart add –a 1m -t freebsd-swap -s 1g -l swap0 da0da0p2 added# gpart add –a 1m -t freebsd-zfs -l zfs0 da0da0p3 added现在将FreeBSD ZFS引导加载程序安装到此磁盘上。可以从中引导的每个磁盘都需要引导加载程序。
xxxxxxxxxx# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0bootcode written to da0对存储池中涉及到的每个磁盘重复以上操作。
仍然在磁盘格式化命令提示符下,将磁盘组装到根存储池中。通常将根池称为 system 或 zroot ,或者可以以主机的名字命名。做任何适合你的环境的事情。我将示例