我有一台带有两个相同磁盘的服务器。我想从这些磁盘创建一个 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'
当然,我也研究了很长时间如何解决这个问题,但没有结果。有两种常见的解决方案,我都无法应用:
删除 FAT 分区或使用不同的文件系统类型对其进行格式化。就我而言,这是没有意义的,因为这是 EFI 系统分区必须存在并且必须使用 FAT 变体之一进行格式化;否则,我无法将 EFI 引导加载程序放入磁盘,或者 UEFI BIOS 将找不到引导加载程序。
使用
zpool create -f ...
,即添加-f
到上面显示的命令中。这也没有意义,因为它会zpool
破坏该分区,导致同样的问题。
我自己的另一个想法是首先创建没有分区 2 的分区布局,但为其留出足够的空间,然后创建镜像 vdev,然后添加分区 2。我非常确定这会起作用,但我也了解到这会导致各种问题,例如在更换其中一个磁盘并尝试重新同步时。基本上,它可以归结为 ZFS 不喜欢其磁盘上的此类分区,如果我在最初创建 vdev 时设法解决该问题,那么我将在以后付费,可能无法执行救援操作或更换有缺陷的磁盘。
那么,将 EFI 系统分区放入我想用作镜像 vdev 一部分的磁盘上的正确方法是什么?