从全磁盘 ZFS 池启动 FreeBSD?

lar*_*sks 3 freebsd partition zfs boot-loader gpt

我有一个配置了一个从整个磁盘设备创建的 ZFS 池的 FreeBSD 文件服务器。也就是说,池是这样创建的:

zpool create pool0 raidz ada0 ada1 ada2
Run Code Online (Sandbox Code Playgroud)

这意味着磁盘具有 ZFS 磁盘标签,而不是 FreeBSD 磁盘标签。这是将磁盘与 ZFS 一起使用的推荐方法:

ZFS 可以使用单独的片或分区,但推荐的操作模式是使用整个磁盘。[来自zpool(1M)]

像这样格式化磁盘可以最大限度地提高文件系统在各种 ZFS 实现之间的可移植性。不幸的是,这意味着没有地方可以放置freebsd-boot包含 FreeBSD 加载程序的分区......或者至少,我认为这就是它的意思,但我正在寻找确认。

系统当前从包含嵌入式加载程序(以及/boot目录,尽管它可以存在于 ZFS 中)的 CF 卡启动。这工作得很好,但我很好奇 - 有没有办法将嵌入式加载程序安装到 ZFS 标记的磁盘上?

编辑:我一直试图自己回答这个问题。我想也许我可以非破坏性地将 GPT 标签应用到 ZFS 磁盘,然后尝试嵌入引导代码——但是虽然 GPT 标签不会导致 ZFS 出现问题,但 ZFS 似乎以某种方式在标签上进行了践踏。所以这里有一个不同的问题:OpenSolaris 是否支持 GPT 磁盘标签?这里的最终目标是拥有一个可以在 FreeBSD 和 OpenSolaris 下运行的磁盘池,同时能够从它引导到 FreeBSD。

lar*_*sks 6

好吧,看起来答案是“你不能那样做”。

此答案的其余部分适用于碰巧遇到此条目并对其设置方式感到好奇的任何人:

我在 CF 卡上有我的启动代码,/boot在 ZFS上有其他所有东西(也就是 目录)。CF卡是这样分区的:

# gpart show ad0
=>     34  7847213  ad0  GPT  (3.7G)
       34      128    1  freebsd-boot  (64K)
      162  7847085       - free -  (3.7G)
Run Code Online (Sandbox Code Playgroud)

我安装了这样的引导代码:

gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ad0
Run Code Online (Sandbox Code Playgroud)

bootfs在我的 ZFS 池上设置适当的属性:

zpool set bootfs=pool0/sys/freebsd pool0
Run Code Online (Sandbox Code Playgroud)

pool0/sys/freebsd我的 FreeBSD 根文件系统在哪里(并且包含/boot目录等)。