Linux 上的 ZFS 是否支持跨越多个设备的启动分区?

Linux 上的 ZFS 是否支持跨越多个设备的启动分区?

我正在阅读有关 Linux 上的 ZFS 是否可以用于根文件系统本身的主题,其中有一个有趣的维基百科文章可用。但示例中的分区布局我不清楚。

# sgdisk     -n1:0:0      -t1:BF01 /dev/disk/by-id/scsi-SATA_disk1
Run this if you need legacy (BIOS) booting:
# sgdisk -a1 -n2:34:2047  -t2:EF02 /dev/disk/by-id/scsi-SATA_disk1
Run this for UEFI booting (for use now or in the future):
# sgdisk     -n3:1M:+512M -t3:EF00 /dev/disk/by-id/scsi-SATA_disk1
Run this in all cases:
# sgdisk     -n9:-8M:0    -t9:BF07 /dev/disk/by-id/scsi-SATA_disk1

在这个例子中,我不明白的是第一个分区。阅读磁盘我不清楚第一个分区是否只有一个块大小,或者它是否基本上覆盖了整个设备。在后一种情况下,这是否意味着所有其他创建的分区都是在第一个分区内创建的?让我感到疑惑的是手册页中的以下句子:

起始值或结束值为 0 指定默认值,即起始扇区的最大可用块的起始和结束扇区的相同块的结束。

“同一个块”听起来像是物理设备的一个块,所以例如 512 字节或 4k 字节的数据?或者它是否意味着一些连续的存储量,最终跨越多个逻辑/物理块?

对于我来说,理解这一点很重要,因为 wiki 中有以下这句话:

根池不必是单个磁盘;它可以具有镜像或 raidz 拓扑。在这种情况下,对将成为池一部分的所有磁盘重复分区命令。然后,使用 zpool create ... rpool mirror /dev/disk/by-id/scsi-SATA_disk1-part1 /dev/disk/by-id/scsi-SATA_disk2-part1 创建池(或将 mirror 替换为 raidz、raidz2 或 raidz3 并列出其他磁盘的分区)。

正如您所看到的,只有第一个分区被放入池中,上面创建的其他分区根本没有提及。我不明白的是,其他分区是否也是池的一部分part1,因此也隐式可用于池中,或者根本不用于池。例如,GRUB 安装在其他分区之一中,在这种情况下没有对 ZFS 池的引用:

# mkdosfs -F 32 -n EFI /dev/disk/by-id/scsi-SATA_disk1-part3
[...]
# echo PARTUUID=$(blkid -s PARTUUID -o value \
      /dev/disk/by-id/scsi-SATA_disk1-part3) \
      /boot/efi vfat nofail,x-systemd.device-timeout=1 0 1 >> /etc/fstab

在我看来,part3这就像不是 ZFS 池的一部分,因此需要单独使用。但是,这与的大小如何匹配part1?只有一个块的分区似乎没有多大意义,而如果以某种方式part3包含在中part1,则意味着它是 ZFS 池的一部分,但没有它也可以寻址?

我需要了解在具有多个设备和分区的设置中如何为引导分区提供冗余,如上例所示。相比之下mdadm,总体目标是 RAID10 设置,其中始终镜像两个设备,然后将这些设备的分区条带化到所有镜像中。最后,使用 6 个磁盘,可以为引导分区和根池提供 3 倍的存储空间。ZFS 通常能够做到这一点,我只是不确定池的哪个部分以及冗余是否也涵盖引导分区。

我目前的感觉是情况并非如此,我需要mdadm使启动分区冗余。原因很简单,因为上面的 GRUB 示例访问的是某个特定的磁盘和分区,即物理设备,而不是 ZFS 创建的某个逻辑镜像。此外,该分区是用 FAT32 而不是 ZFS 格式化的。这看起来并不像是 ZFS 关心这些分区中的任何一个。

那么最后,ZFS 是否支持与mdadm包括所有启动分区、根分区等在内的 RAID10 设置相当的设置,真的是一切吗?

答案1

每个磁盘(至少两个)都需要有一个启动分区,该分区不是ZFS 池的一部分,在发生硬件故障时提供冗余。

在上述说明中,它创建了一个 EFI 启动分区,作为针对未来变化的一种主动措施(EFI 启动分区基本上是 FAT 小型 FAT fat 文件系统,可链式加载驱动程序)。

无论如何,前三个分区都不属于 zpool - 只有最后一个(最大的)分区才属于 zpool。

这是 FreeBSD 上 Root 上 ZFS 的 HOWTO更详细地解释它。(但不同的命令可能会使其更加令人困惑......)

考虑以下:

  • 你的固件(BIOS、EFI 等等)知道没有什么但如何找到一双靴子
  • 只有 JBOD(一组磁盘)

您无法直接从 ZFS 启动,因为您的固件不知道 ZFS 是什么。因此需要有一个非 ZFS 分区供固件启动,而且由于该分区不受 ZFS 冗余保护,因此在许多地方保留它的副本是有意义的。

相关内容