gpart

我在2025年初组装了一台 纳斯NASSE C246 ITX主板 ,内置了2个 NVMe存储 M.2接口。由于主板支持 PCIe bifurcation ,可以将主板伤的PCIe 3.0 X16拆分成 X8X8X4X4X8 ,所以我最终购买了一个 PCIe X16转x8+x4+x4拆分卡 为主机构建了 4块 铠侠KIOXIA EXCERIA G2 NVMe SSD存储 NVMe存储 存储:

  • 第一块nvme存储已经安装了最小化 FreeBSD ,我特意仅划分了较小的分区用于 zroot ZFS pool,这样磁盘后半部分空白分区可以后后续其他nvme磁盘的分区共同组件 RAIDZ ( zdata pool)

  • 2-4 块nvme磁盘,每个磁盘划分为2个分区,第一个分区较小,和第一块nvme的系统分区大小相当,用于后续构建物理磁盘上的 Gluster 冗余安全存储数据;后一个分区则为剩余磁盘空间,用于构建 RAIDZ ( zdata pool)

  • 一共有 4 个较大的分区分布在 4 块nvme上,为了能够最大化使用空间,采用了 RAIDZ0 模式,这样能够获得最大空间和最高性能(生产环境不可采用这种无安全保障的RAIDZ,生产环境请使用 RAIDZ5 )

磁盘

  • 列出主机上安装的磁盘,使用 geom (universal control utility for GEOM classes):

使用 geom 列出磁盘
geom disk list
使用 geom 列出磁盘可以看到4块nvme设备 ndaX
Geom name: nda0
Providers:
1. Name: nda0
   Mediasize: 2000398934016 (1.8T)
   Sectorsize: 512
   Mode: r0w0e0
   descr: KIOXIA-EXCERIA G2 SSD
   lunid: 00000000000000008ce38e03009ae4ee
   ident: 54UA4062K7AS
   rotationrate: 0
   fwsectors: 0
   fwheads: 0

Geom name: nda1
Providers:
1. Name: nda1
   Mediasize: 2000398934016 (1.8T)
   Sectorsize: 512
   Mode: r0w0e0
   descr: KIOXIA-EXCERIA G2 SSD
   lunid: 00000000000000008ce38e0300a242e3
   ident: X4GA30KZKQJP
   rotationrate: 0
   fwsectors: 0
   fwheads: 0

Geom name: nda2
Providers:
1. Name: nda2
   Mediasize: 2000398934016 (1.8T)
   Sectorsize: 512
   Mode: r0w0e0
   descr: KIOXIA-EXCERIA G2 SSD
   lunid: 00000000000000008ce38e03009ae512
   ident: 54UA4072K7AS
   rotationrate: 0
   fwsectors: 0
   fwheads: 0

Geom name: nda3
Providers:
1. Name: nda3
   Mediasize: 2000398934016 (1.8T)
   Sectorsize: 512
   Mode: r1w1e3
   descr: KIOXIA-EXCERIA G2 SSD
   lunid: 00000000000000008ce38e030091c40e
   ident: Y39B70RTK7AS
   rotationrate: 0
   fwsectors: 0
   fwheads: 0

请注意,这里的磁盘命名是 ndaX ,根据 FreeBSD handbook: 3.6. Disk Organization ,磁盘类型 NVMe storage 的设备命名是 nvdnda ,所以这里 nda0 表示第一块 NVMe存储 存储,而 nda3 表示第4块NVMe存储。

磁盘分区

分区工具 gpart 可以显示和划分磁盘分区,这个工具的命令 show 可以显示磁盘分区:

使用 gpart show ndaX 命令分别检查磁盘的分区
root@xcloud:~ # gpart show nda0
=>        34  3907029101  nda0  GPT  (1.8T)
          34  3907029101        - free -  (1.8T)

root@xcloud:~ # gpart show nda1
=>        34  3907029101  nda1  GPT  (1.8T)
          34  3907029101        - free -  (1.8T)

root@xcloud:~ # gpart show nda2
=>        34  3907029101  nda2  GPT  (1.8T)
          34  3907029101        - free -  (1.8T)

root@xcloud:~ # gpart show nda3
gpart: No such geom: nda3.

这里遇到一个非常奇怪的问题,虽然 geom disk list 显示有 nda3 ,但是当使用 gpart show nda3 时候是报错的,显示并不存在这个设备

直接使用 gpart show 命令,不带任何参数,可以看到如下输出:

直接使用 gpart show 输出
=>        34  3907029101  nda0  GPT  (1.8T)
          34  3907029101        - free -  (1.8T)

=>        34  3907029101  diskid/DISK-54UA4062K7AS  GPT  (1.8T)
          34  3907029101                            - free -  (1.8T)

=>        34  3907029101  nda1  GPT  (1.8T)
          34  3907029101        - free -  (1.8T)

=>        34  3907029101  nda2  GPT  (1.8T)
          34  3907029101        - free -  (1.8T)

=>        34  3907029101  diskid/DISK-X4GA30KZKQJP  GPT  (1.8T)
          34  3907029101                            - free -  (1.8T)

=>        34  3907029101  diskid/DISK-54UA4072K7AS  GPT  (1.8T)
          34  3907029101                            - free -  (1.8T)

=>        40  3907029088  diskid/DISK-Y39B70RTK7AS  GPT  (1.8T)
          40      532480                         1  efi  (260M)
      532520        2008                            - free -  (1.0M)
      534528     4194304                         2  freebsd-swap  (2.0G)
     4728832   536870912                         3  freebsd-zfs  (256G)
   541599744  3365429384                            - free -  (1.6T)

不过,另一个工具 diskinfo 可以查看所有的 ndaX 设备,例如 nda3 :

使用 diskinfo 检查磁盘
diskinfo -v nda3

输出信息显示 nda3 正常:

使用 diskinfo 检查磁盘
nda3
	512         	# sectorsize
	2000398934016	# mediasize in bytes (1.8T)
	3907029168  	# mediasize in sectors
	0           	# stripesize
	0           	# stripeoffset
	KIOXIA-EXCERIA G2 SSD	# Disk descr.
	Y39B70RTK7AS	# Disk ident.
	nvme3       	# Attachment
	Yes         	# TRIM/UNMAP support
	0           	# Rotation rate in RPM

磁盘分区: nda0

  • 首先创建GPT分区(这里会提示失败,因为实际上之前已经创建过GPT分区表):

如果磁盘首次使用,需要创建GPT分区表
gpt create -s GPT nda0

这里输出显示GPT分区表已经存在,原因是磁盘已经构建过GPT分区表

如果已经存在GPT分区表
gpart: geom 'nda0': File exists
  • 创建一个分区,分配 256G ( -s )并且设置以 1M 大小进行对齐( -a 1M ):

添加分区1
gpart add -t freebsd-ufs -a 1M -s 256G nda0

然后检查 gpart show nda0 可以看到如下:

添加了一个分区之后的输出情况
=>        34  3907029101  nda0  GPT  (1.8T)
          34        2014        - free -  (1.0M)
        2048   536870912     1  freebsd-ufs  (256G)
   536872960  3370156175        - free -  (1.6T)

这里对比已经安装了 FreeBSD 操作系统的磁盘分区 gpart show diskid/DISK-Y39B70RTK7AS :

已经安装了FreeBSD的磁盘分区情况
=>        40  3907029088  diskid/DISK-Y39B70RTK7AS  GPT  (1.8T)
          40      532480                         1  efi  (260M)
      532520        2008                            - free -  (1.0M)
      534528     4194304                         2  freebsd-swap  (2.0G)
     4728832   536870912                         3  freebsd-zfs  (256G)
   541599744  3365429384                            - free -  (1.6T)

可以看到 gpart 分区的 -s 参数实际上是指分区最后边界的位置256G ,所以可以看到我手工划分的分区1和之前通过FreeBSD安装时划分的分区边界(大小)是一样的。

  • 接下来再给 nda0 添加分区2,这里因为是完全分配剩余空间,所以不指定 -s 参数:

添加分区2
gpart add -t freebsd-zfs -a 1M nda0

完成后检查 gpart show nda0 输出如下:

完成添加分区2之后检查 nda0 的分区表
=>        34  3907029101  nda0  GPT  (1.8T)
          34        2014        - free -  (1.0M)
        2048   536870912     1  freebsd-ufs  (256G)
   536872960  3370156032     2  freebsd-zfs  (1.6T)
  3907028992         143        - free -  (72K)

磁盘分区 diskid/DISK-Y39B70RTK7AS

  • 对于已经安装了FreeBSD系统的磁盘 diskid/DISK-Y39B70RTK7AS ,现在添加一个分区来分配所有剩余空间,类型是 freebsd-zfs 用于后续构建 zdata zpool:

在系统磁盘 diskid/DISK-Y39B70RTK7AS 添加分区2
gpart add -t freebsd-zfs -a 1M diskid/DISK-Y39B70RTK7AS
  • 完成后检查 gpart show diskid/DISK-Y39B70RTK7AS 显示分区如下:

系统磁盘分区情况
=>        40  3907029088  diskid/DISK-Y39B70RTK7AS  GPT  (1.8T)
          40      532480                         1  efi  (260M)
      532520        2008                            - free -  (1.0M)
      534528     4194304                         2  freebsd-swap  (2.0G)
     4728832   536870912                         3  freebsd-zfs  (256G)
   541599744  3365429248                         4  freebsd-zfs  (1.6T)
  3907028992         136                            - free -  (68K)

磁盘分区 nda1nda2

  • 参考 nda0 划分分区方法,为 nda1nda2 划分同样大小的分区:

nda1nda2 划分分区
# 划分256G分区1和剩余空间分区2
gpart add -t freebsd-ufs -a 1M -s 256G nda1
gpart add -t freebsd-zfs -a 1M nda1

gpart add -t freebsd-ufs -a 1M -s 256G nda2
gpart add -t freebsd-zfs -a 1M nda2
  • 现在所有划分分区工作完成,最后使用 gpart show 显示和验证所有分区如下:

显示完成后的所有分区
=>        34  3907029101  nda0  GPT  (1.8T)
          34        2014        - free -  (1.0M)
        2048   536870912     1  freebsd-ufs  (256G)
   536872960  3370156032     2  freebsd-zfs  (1.6T)
  3907028992         143        - free -  (72K)

=>        34  3907029101  nda1  GPT  (1.8T)
          34        2014        - free -  (1.0M)
        2048   536870912     1  freebsd-ufs  (256G)
   536872960  3370156032     2  freebsd-zfs  (1.6T)
  3907028992         143        - free -  (72K)

=>        34  3907029101  nda2  GPT  (1.8T)
          34        2014        - free -  (1.0M)
        2048   536870912     1  freebsd-ufs  (256G)
   536872960  3370156032     2  freebsd-zfs  (1.6T)
  3907028992         143        - free -  (72K)

=>        40  3907029088  diskid/DISK-Y39B70RTK7AS  GPT  (1.8T)
          40      532480                         1  efi  (260M)
      532520        2008                            - free -  (1.0M)
      534528     4194304                         2  freebsd-swap  (2.0G)
     4728832   536870912                         3  freebsd-zfs  (256G)
   541599744  3365429248                         4  freebsd-zfs  (1.6T)
  3907028992         136                            - free -  (68K)

=>        34  3907029101  diskid/DISK-54UA4062K7AS  GPT  (1.8T)
          34        2014                            - free -  (1.0M)
        2048   536870912                         1  freebsd-ufs  (256G)
   536872960  3370156032                         2  freebsd-zfs  (1.6T)
  3907028992         143                            - free -  (72K)

=>        34  3907029101  diskid/DISK-X4GA30KZKQJP  GPT  (1.8T)
          34        2014                            - free -  (1.0M)
        2048   536870912                         1  freebsd-ufs  (256G)
   536872960  3370156032                         2  freebsd-zfs  (1.6T)
  3907028992         143                            - free -  (72K)

=>        34  3907029101  diskid/DISK-54UA4072K7AS  GPT  (1.8T)
          34        2014                            - free -  (1.0M)
        2048   536870912                         1  freebsd-ufs  (256G)
   536872960  3370156032                         2  freebsd-zfs  (1.6T)
  3907028992         143                            - free -  (72K)

后续工作

参考