ZFS 分区类型和 GPT 分区标签

ZFS 分区类型和 GPT 分区标签

之前,我使用 FSTYPE 创建了一个新分区zfs_member,并且(我认为)我将 GPT 分区标签设置为 ZFS 池的新名称,然后在这个分区中创建了 ZFS 池(zpool create ... /dev/disk/by-partuuid/...)。看起来像:

$ lsblk --output NAME,FSTYPE,MODEL,LABEL,PTTYPE,SIZE -e 7
NAME        FSTYPE     MODEL                        LABEL       PTTYPE   SIZE
sda                    Samsung_SSD_860_QVO_1TB                  gpt    931,5G
└─sda1      zfs_member                              my-zfs-pool gpt    931,5G

我在几个地方看到,使用 GPT 分区进行 ZFS 应该没问题。在旧的 Sun ZFS 文档中,曾有建议使用整个磁盘,但这似乎早已过时,尤其与 ZFS-on-Linux 无关。(关于这个主题的一些讨论:例如这里

现在我读到,如果您将整个磁盘传递给,ZFS-on-Linux 无论如何都会自动使用 GPT 对磁盘进行分区zpool create。(这里是实际禁用自动分区行为的选项的问题。)

请注意,无论如何,我都希望有一些 GPT 分区。因为例如,也许我想稍后缩小分区并在其上放置其他分区。或者其他什么。我认为没有理由不在磁盘上设置 GPT 分区表。

所以我认为自动分区可能会更好。也许 ZFS 的分区方式略有不同,不管出于什么巧妙的原因,这也许更好。所以我在另一个新磁盘上做了这个(zpool create ... /dev/disk/by-id/...(whole-disk))。

但现在看起来是这样的:

$ lsblk --output NAME,FSTYPE,MODEL,LABEL,PTTYPE,SIZE -e 7
NAME        FSTYPE     MODEL                        LABEL       PTTYPE   SIZE
sdb                    WDC_WD60EZAZ-00ZGHB0                     gpt      5,5T
├─sdb1                                                          gpt      5,5T
└─sdb9                                                          gpt        8M

FSTYPE所以,ZFS 确实按照我的要求创建了 GPT 分区表。但是,它没有在分区上设置,也没有设置 GPT 分区标签。

现在来谈谈我真正的问题:

为什么它没有设置 FSTYPE 以及 GPT 分区标签?

之后设置 FSTYPE 是否安全?例如zfs_member

之后设置 GPT 分区标签安全吗?例如设置为 zpool 的名称?

答案1

警告:确保您有备份,因为如果您不小心做了“错事”,您可能会丢失所有数据。

这样做可能根本不值得冒险,因为您可以通过其他方式跟踪该分区的类型(例如在物理驱动器上写入)。

通常我们在将数据写入新分区之前执行此操作,这样就没有风险了。

我实际上还没有对正在使用的磁盘进行过此操作,但我确信可以做到。

您可以使用 gdisk (https://www.rodsbooks.com/gdisk/gdisk.html) 设置 GPT 分区名称(又名“标签”)。Gdisk 非常小心地帮助您避免破坏性事故,但是为了确保避免这些事故,您仍然需要了解它的工作原理。

很可能其他分区工具也可以做到这一点,但对于 GPT,我只使用了 gdisk 和 sgdisk。

不必担心分区类型,因为 Linux 不需要它。您可以在名称/标签中包含“ZFS”。

顺便说一句,lsblk(在 Manjaro 上)显示我的 zfs 镜像如下。
分区是通过将整个磁盘交给 ZFS 完成的(2015 年,在 Ubuntu 上)。
我后来可能将名称更改为“zp0”,但通过 zpool,而不是通过其他工具,使用:
zpool export [poolname]
zpool import [poolname] [newpoolname]

$ lsblk -f
NAME   FSTYPE     FSVER LABEL  UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
sda
|-sda1 zfs_member 5000  zp0    17149246668572983114
`-sda9
sdb
|-sdb1 zfs_member 5000  zp0    17149246668572983114
`-sdb9

使用你的 lsblk 参数:

$ lsblk --output NAME,FSTYPE,MODEL,LABEL,PTTYPE,SIZE -e 7
NAME   FSTYPE     MODEL                     LABEL  PTTYPE   SIZE
sda               ST4000DM000-1F2168               gpt      3.6T
|-sda1 zfs_member                           zp0    gpt      3.6T
`-sda9                                             gpt        8M
sdb               ST4000DM000-1F2168               gpt      3.6T
|-sdb1 zfs_member                           zp0    gpt      3.6T
`-sdb9                                             gpt        8M

编辑:

回答您的“实际问题”:

  1. 我不知道。ZFS 为我创建了这些条目。
  2. 别费心了,不值得付出努力/冒险。
  3. 如果您尝试,请小心(如上所述)。

作为一个更安全更改 GPT 中的标签的替代方法:
尝试更改 ZFS 中的池名称,看看它是否会更改 lsblk 显示的内容:
zpool export [poolname]
然后
zpool import [poolname] [newpoolname]
这是重命名池的正常方法,而且非常安全。
(方括号仅表示要替换的文本;不要包含它们。)

关于 sdx9 分区,我还是不知道,也不太在意,抱歉。只有当您为 ZFS 提供整个原始磁盘时才会发生这种情况。尝试OpenZFS 文档

我正准备创建另一个 ZFS 镜像,在研究如何最好地做到这一点时看到了这个帖子。这次我将使用 sgdisk 创建 GPT,然后在匹配的 GPT 分区上创建 zpool 镜像(每个驱动器上一个)。我期待着制作一个带有 ZFS 数据分区的 EFI 启动驱动器的可能性,并且这种两步方法对于这种情况是必需的。(除非操作系统是 FreeBSD,在这种情况下我将让操作系统安装程序创建一个 ZFS 启动驱动器。)

相关内容