如何构建可通过 UEFI 启动的镜像 vdev?

如何构建可通过 UEFI 启动的镜像 vdev?

我有一台带有两个相同磁盘的服务器。我想从这些磁盘创建一个 ZFS 镜像 vdev,在其上创建一个 ZFS 文件系统,将其用作根文件系统并从中启动。

我过去曾使用旧引导机制成功地完成了此操作。不过,这一次,我想通过 EFI 启动。因此,我在每个磁盘上创建了以下分区布局:

Device          Start        End    Sectors  Size Type
/dev/sda1     1048576 4000780287 3999731712  1.9T Solaris /usr & Apple ZFS
/dev/sda2          40    1048575    1048536  512M EFI System
/dev/sda9  4000780288 4000797326      17039  8.3M Solaris reserved 1

请注意,这/dev/sda2是包含 EFI 引导加载程序的分区。它的格式为FAT32.

第二个磁盘具有/dev/sdb相同的分区布局。

当我尝试通过创建镜像 vdev 时

zpool create -o ... -O ... rpool mirror /dev/disk/by-id/ata-disk1 /dev/disk/by-id/ata-disk2

我收到以下错误消息:

invalid vdev specification
use '-f' to override the following errors:
/dev/disk/by-id/ata-disk1 contains a filesystem of type 'vfat'
/dev/disk/by-id/ata-disk2 contains a filesystem of type 'vfat'

当然,我也研究了很长时间如何解决这个问题,但没有结果。有两种常见的解决方案,我都无法应用:

  1. 删除 FAT 分区或使用不同的文件系统类型对其进行格式化。就我而言,这是没有意义的,因为这是 EFI 系统分区必须存在并且必须使用 FAT 变体之一进行格式化;否则,我无法将 EFI 引导加载程序放入磁盘,或者 UEFI BIOS 将找不到引导加载程序。

  2. 使用zpool create -f ...,即添加-f到上面显示的命令中。这也没有意义,因为它会zpool破坏该分区,导致同样的问题。

我自己的另一个想法是首先创建没有分区 2 的分区布局,但为其留出足够的空间,然后创建镜像 vdev,然后添加分区 2。我非常确定这会起作用,但我也了解到这会导致各种问题,例如在更换其中一个磁盘并尝试重新同步时。基本上,它可以归结为 ZFS 不喜欢其磁盘上的此类分区,如果我在最初创建 vdev 时设法解决该问题,那么我将在以后付费,可能无法执行救援操作或更换有缺陷的磁盘。

那么,将 EFI 系统分区放入我想用作镜像 vdev 一部分的磁盘上的正确方法是什么?

相关内容