gpart
我在2025年初组装了一台 纳斯NASSE C246 ITX主板 ,内置了2个 NVMe存储 M.2接口。由于主板支持 PCIe bifurcation ,可以将主板伤的PCIe 3.0 X16拆分成 X8X8
或 X4X4X8
,所以我最终购买了一个 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
的设备命名是 nvd
或 nda
,所以这里 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 create -s GPT nda0
这里输出显示GPT分区表已经存在,原因是磁盘已经构建过GPT分区表
gpart: geom 'nda0': File exists
创建一个分区,分配
256G
(-s
)并且设置以1M
大小进行对齐(-a 1M
):
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
:
=> 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
参数:
gpart add -t freebsd-zfs -a 1M nda0
完成后检查 gpart show nda0
输出如下:
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
添加分区2gpart 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)
磁盘分区 nda1
和 nda2
参考
nda0
划分分区方法,为nda1
和nda2
划分同样大小的分区:
nda1
和 nda2
划分分区# 划分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)
后续工作
参考
How to Use `gpart to Manage Partitions on FreeBSD Operating System <https://www.siberoloji.com/how-to-use-gpart-to-manage-partitions-on-freebsd/#google_vignette>`_