从全盘ZFS池启动FreeBSD?

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

zpool create pool0 raidz ada0 ada1 ada2 

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

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

像这样格式化磁盘可最大限度地提高各种ZFS实现之间文件系统的可移植性。 不幸的是,这意味着无处可放freebsd-boot分区包含FreeBSD加载器……或者至less我认为这意味着什么,但是我正在寻求确认。

系统目前从包含embedded式加载器的CF卡(以及/boot目录,尽pipe这可以在ZFS中生活)。 这工作得很好,但我好奇 – 有没有办法将embedded式加载程序安装到ZFS标签的磁盘上?

编辑 :我一直在试图自己回答这个问题。 我想也许我可以将非破坏性的GPT标签应用于ZFS磁盘,然后尝试embedded引导代码 – 但是,当GPT标签没有引起ZFS问题时,ZFS似乎以某种方式在标签上发生了变化。 所以这里有一个不同的问题:OpenSolaris是否支持GPT磁盘标签? 这里的最终目标是拥有一个在FreeBSD和OpenSolaris下工作的磁盘池,同时可以从FreeBSD启动。

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

这个答案的其余部分是碰巧遇到这个条目的任何人,并且对如何设置好奇:

我有一个CF卡上的启动代码,以及ZFS上的其他所有内容(也就是/boot目录)。 CF卡被这样分区:

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

我安装了这样的启动代码:

 gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ad0 

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

 zpool set bootfs=pool0/sys/freebsd pool0 

其中pool0/sys/freebsd是我的FreeBSD根文件系统(并且包含/boot目录)。

看起来可以从整个磁盘设备创build的ZFS池中引导。

只需根据zfsboot手册页安装zfsboot:

通常使用dd(1)安装zfsboot。 要在ada0驱动器上安装zfsboot,请执行以下操作:

  dd if=/boot/zfsboot of=/dev/ada0 count=1 dd if=/boot/zfsboot of=/dev/ada0 iseek=1 oseek=1024 

1.4节:ZFS规范的引导块表示3.5MB的保留空间在这个位置。 这就解释了为什么64k的zfsboot可以在不影响文件系统的情况下适用。

我还没有亲自尝试过。

资料来源: