本文以 NVMe SSD 磁盘初始化为例详细介绍使用 LVM(Logical Volume Manager) 初始化磁盘的完整流程,涵盖物理卷(PV)、卷组(VG)、逻辑卷(LV)的创建与配置,以及磁盘的格式化与挂载。适用于 OceanBase 数据库 V3.x/V4.x 等高可用、高性能场景下的存储管理需求。 目前 OAT(OceanBase 管理者工具)最新版本已有磁盘初始化功能,本文全部操作可通过 OAT 轻松完成,在创建新集群时建议通过 OAT 完成磁盘初始化操作。
详细说明
环境准备与检查
测试环境如下。 操作系统: Kylin Linux Server V10 SP3。 磁盘: NVMe 1.5 TB * 6 = 19 TB。 内存: 32 GB * 16 = 512 GB。
查看磁盘类型及数量
通过如下命令查看文件系统使用情况。
df -hT
通过如下命令检查磁盘类型及数量。
lsblk -d -p -o name,rota,tran,size,model
如下输出结果中,通过 TRAN 列可知有 6 块 NVMe SSD,总大小约 3.5 TB * 6 = 19 TB。
# lsblk -d -p -o name,rota,tran,size,model
NAME ROTA TRAN SIZE MODEL
/dev/sda 0 sata 223.6G INTEL_SSDMODELNAME
/dev/nvme4n1 0 nvme 3.5T SAMSUNG DISKMODELNAME-XXXX
/dev/nvme3n1 0 nvme 3.5T SAMSUNG DISKMODELNAME-XXXX
/dev/nvme5n1 0 nvme 3.5T SAMSUNG DISKMODELNAME-XXXX
/dev/nvme2n1 0 nvme 3.5T SAMSUNG DISKMODELNAME-XXXX
/dev/nvme1n1 0 nvme 3.5T SAMSUNG DISKMODELNAME-XXXX
/dev/nvme0n1 0 nvme 3.5T SAMSUNG DISKMODELNAME-XXXX
选择文件系统
16 TB 以下建议使用 ext4 文件系统,16 TB 及以上建议使用 xfs 文件系统。 根据上述 lsblk 命令输出结果,19 TB 磁盘应选择 xfs 文件系统。
查看内存大小
通过如下命令查看内存大小。
free -h
dmidecode -t 17|grep Size
从输出结果中,可以看出内存大小为 512 GB(32 GB * 16)。
# free -h
total used free shared buff/cache available
Mem: 502Gi 1.8Gi 499Gi 13Mi 611Mi 495Gi
Swap: 0B 0B 0B
# dmidecode -t 17|grep Size
Size: 32 GB
Size: 32 GB
Size: 32 GB
Size: 32 GB
Size: No Module Installed
Size: No Module Installed
Size: 32 GB
Size: 32 GB
Size: 32 GB
Size: 32 GB
Size: No Module Installed
Size: No Module Installed
Size: 32 GB
Size: 32 GB
Size: 32 GB
Size: 32 GB
Size: No Module Installed
Size: No Module Installed
Size: 32 GB
Size: 32 GB
Size: 32 GB
Size: 32 GB
Size: No Module Installed
Size: No Module Installed
# echo $((32*16))
512
磁盘及文件系统格式规划
根据以上信息及官网服务器配置要求,OBServer 节点的磁盘挂载点如下表所示。
| 挂载点 | 大小 | 用途 | 文件系统格式 |
|---|---|---|---|
| /data/log1 | 内存大小的 4 倍,即 512 GB * 4 = 2 TB | observer 日志盘 | 根据上述 选择文件系统 章节内容,即 xfs |
| /data/1 | 取决于所需存储的数据大小 | OBServer 数据盘 | 根据上述 选择文件系统 章节内容,即 xfs |
检查 LVM 工具是否安装
LVM 相关软件一般默认已安装,可以通过如下命令确认。
# CentOS/RHEL 下检查 lvm2 包是否安装
rpm -qa | grep lvm2
# 或检查 lvcreate 命令是否存在
which lvcreate
输出示例如下。
# CentOS/RHEL
yum install -y lvm2
# Ubuntu/Debian
apt install -y lvm2
如未安装可以安装一下,安装示例如下。
# CentOS/RHEL
yum install -y lvm2
# Ubuntu/Debian
apt install -y lvm2
物理卷 (PV) 初始化
创建物理卷
初始化单个设备。
pvcreate /dev/nvme0n1
初始化多个设备。
pvcreate /dev/nvme0n1 /dev/nvme2n1 /dev/nvme5n1 /dev/nvme4n1 /dev/nvme3n1 /dev/nvme1n1
批量初始化多个设备(如多个 NVMe 磁盘)。
pvcreate /dev/nvme[012345]n1
输出示例如下。
# pvcreate /dev/nvme[012345]n1
Physical volume "/dev/nvme0n1" successfully created.
Physical volume "/dev/nvme1n1" successfully created.
Physical volume "/dev/nvme2n1" successfully created.
Physical volume "/dev/nvme3n1" successfully created.
Physical volume "/dev/nvme4n1" successfully created.
Physical volume "/dev/nvme5n1" successfully created.
验证物理卷
使用如下命令检查物理卷是否创建成功。
# 简要信息
pvs
# 详细信息
pvdisplay
输出示例如下。
# pvs
PV VG Fmt Attr PSize PFree
/dev/nvme0n1 lvm2 --- 3.49t 3.49t
/dev/nvme1n1 lvm2 --- 3.49t 3.49t
/dev/nvme2n1 lvm2 --- 3.49t 3.49t
/dev/nvme3n1 lvm2 --- 3.49t 3.49t
/dev/nvme4n1 lvm2 --- 3.49t 3.49t
/dev/nvme5n1 lvm2 --- 3.49t 3.49t
# pvdisplay
"/dev/nvme5n1" is a new physical volume of "3.49 TiB"
--- NEW Physical volume ---
PV Name /dev/nvme5n1
VG Name
PV Size 3.49 TiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID hg0axo-XAN0-OOdW-O8Ee-3eeR-v5J5-LtIfHe
"/dev/nvme4n1" is a new physical volume of "3.49 TiB"
--- NEW Physical volume ---
PV Name /dev/nvme4n1
...
卷组(VG)创建与管理
检查 volume_list 是否启用
通过如下命令检查 volume_list 是否启用(一般 volume_list 未启用)。
grep -E '^[[:space:]]*volume_list[[:space:]]*=[[:space:]]*' /etc/lvm/lvm.conf
以上命令输出结果为空则未启用。 如 volume_list 处于启用状态,需要将要新创建的卷组名 (如 vgob) 加入其中。
创建卷组
卷组名: vgob。
# 创建卷组并指定物理卷
vgcreate -y vgob /dev/nvme0n1 /dev/nvme2n1 /dev/nvme5n1 /dev/nvme4n1 /dev/nvme3n1 /dev/nvme1n1
# 批量创建
vgcreate -y vgob /dev/nvme[012345]n1
验证卷组
# 简要信息
vgs
# 详细信息
vgdisplay -v vgob
输出示例如下。
# vgs
VG #PV #LV #SN Attr VSize VFree
vgob 6 0 0 wz--n- <20.96t <20.96t
# vgdisplay
--- Volume group ---
VG Name vgob
System ID
Format lvm2
Metadata Areas 6
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 6
Act PV 6
VG Size <20.96 TiB
PE Size 4.00 MiB
Total PE 5494242
Alloc PE / Size 0 / 0
Free PE / Size 5494242 / <20.96 TiB
VG UUID pr4TaC-4yBq-G2h2-a9xy-jF5h-pvGn-zmKzcD
扩展卷组
如有需要添加新磁盘,可通过如下命令操作。
# 添加新物理卷到现有卷组
vgextend vgob /dev/nvme5n1 /dev/nvme4n1
逻辑卷(LV)创建与优化
条带化配置建议
通过 LVM 管理多个物理卷(且多个物理卷空间大小相同或差异小于 10GB),lvcreate 创建逻辑卷时建议指定条带化参数 --stripes (-i) 和 --stripesize (-I),条带化参数说明。
--stripes:条带数(等于物理卷数量)
--stripesize:每个条带的大小
前面通过如下命令可知有 6 块 NVMe SSD,则 lvcreate 命令中需要指定 --stripes 6。
lsblk -d -p -o name,rota,tran,size,model
创建逻辑卷
由于有 6 块 NVMe SSD,则 lvcreate 命令中指定 --stripes 6。
ext4 文件系统
ext4 文件系统下 stripesize 建议设置为 128k。 首先创建日志盘逻辑卷(卷名 log),根据前面 磁盘大小及文件系统格式规划 章节内容,指定大小为 2TB。
lvcreate -n log -L 2T vgob --stripes=6 --stripesize=128 -y
然后创建数据盘逻辑卷(卷名 data),可以通过 -L 参数指定大小为 10T。
lvcreate -n data -L 10T vgob --stripes=6 --stripesize=128 -y
也可以通过 -l 参数将所有剩余空间分配给数据盘。
lvcreate -n data -l 100%FREE vgob --stripes=6 --stripesize=128 -y
如只有一个物理卷或多个物理卷空间大小差异大于 10GB,建议不指定条带化参数,相关命令示例如下。
# 日志盘
lvcreate -n log -L 2T vgob -y
# 数据盘, 将所有剩余空间分配给数据盘
lvcreate -n data -l 100%FREE vgob -y
xfs 文件系统
xfs 文件系统下 stripesize 建议设置为 1024k。 首先创建日志盘逻辑卷(卷名 log),根据前面 磁盘大小及文件系统格式规划 章节内容,指定大小为 2TB。
lvcreate -n log -L 2T vgob --stripes=6 --stripesize=1024 -y
然后创建数据盘逻辑卷(卷名 data),可以通过 -L 参数指定大小为 10T。
lvcreate -n data -L 10T vgob --stripes=6 --stripesize=1024 -y
也可以通过 -l 参数将所有剩余空间分配给数据盘。
lvcreate -n data -l 100%FREE vgob --stripes=6 --stripesize=1024 -y
如只有一个物理卷或多个物理卷空间大小差异大于 10GB,建议不指定条带化参数,相关命令示例如下。
# 日志盘
lvcreate -n log -L 2T vgob -y
# 数据盘, 将所有剩余空间分配给数据盘
lvcreate -n data -l 100%FREE vgob -y
格式化逻辑卷
ext4 文件系统
ext4 文件系统通过如下命令格式化逻辑卷。
mkfs.ext4 -O 64bit /dev/vgob/data
mkfs.ext4 -O 64bit /dev/vgob/log
注意: mkfs.ext4 命令中通过指定参数 -O 64bit 启用 64 位支持(64-bit feature),允许存储大于 2TB 的单个文件,最大支持 16TB,若未启用 64bit 特性,文件系统可能无法正确识别或使用超过 2TB 的磁盘。
xfs 文件系统
xfs 文件系统通过如下命令格式化逻辑卷。
mkfs.xfs -f -n ftype=1 -l su=4k /dev/vgob/data
mkfs.xfs -f -n ftype=1 -l su=4k /dev/vgob/log
查看逻辑卷
使用如下命令查看逻辑卷。
lvs
lvdisplay
输出示例如下。
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
data vgob -wi-a----- <18.96t
log vgob -wi-a----- 2.00t
# lvdisplay
--- Logical volume ---
LV Path /dev/vgob/log
LV Name log
VG Name vgob
LV UUID 4OlcHl-tEBO-L0MO-YK5s-mTiS-zg9t-30CPxv
LV Write Access read/write
LV Creation host, time obs4, 2025-06-09 20:17:46 +0800
LV Status available
# open 0
LV Size 2.00 TiB
Current LE 524292
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 24576
Block device 253:0
--- Logical volume ---
LV Path /dev/vgob/data
LV Name data
VG Name vgob
LV UUID Xkla19-5Tn7-5gKR-7PWv-AOuG-iZb1-eR7Nxv
LV Write Access read/write
LV Creation host, time obs4, 2025-06-09 20:17:55 +0800
LV Status available
# open 0
LV Size <18.96 TiB
Current LE 4969950
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 24576
Block device 253:1
挂载逻辑卷
创建挂载点
mkdir -p /data/1 /data/log1
配置开机自启动挂载
如未配置开机自启动挂载,当服务器重启后需要手动挂载磁盘。
编辑 /etc/fstab。
vim /etc/fstab
ext4 文件系统挂载配置 /etc/fstab 示例如下。
/dev/ob_vg/data /data/1 ext4 defaults,noatime,nodiratime,nodelalloc,barrier=0 0 0
/dev/ob_vg/log /data/log1 ext4 defaults,noatime,nodiratime,nodelalloc,barrier=0 0 0
xfs 文件系统挂载配置 /etc/fstab 示例如下。
/dev/vgob/data /data/1 xfs defaults,noatime,nodiratime 0 0
/dev/vgob/log /data/log1 xfs defaults,noatime,nodiratime 0 0
挂载逻辑卷
挂载方法一: 按 /etc/fstab 中的配置挂载。
mkdir -p /data/1 /data/log1
挂载后通过如下命令查看。
df -hT
挂载方法二: 手动指定配置挂载。
ext4 文件系统手动挂载命令如下。
mount -t ext4 -o 'defaults,noatime,nodiratime,nodelalloc,barrier=0' /dev/vgob/data /data/1
mount -t ext4 -o 'defaults,noatime,nodiratime,nodelalloc,barrier=0' /dev/vgob/log /data/log1
xfs 文件系统手动挂载命令如下。
mount -t xfs -o 'defaults,noatime,nodiratime' /dev/vgob/data /data/1
mount -t xfs -o 'defaults,noatime,nodiratime' /dev/vgob/log /data/log1
挂载后通过如下命令查看。
df -hT
至此磁盘初始化完成。 输出示例如下。
# df -hT
Filesystem Type Size Used Avail Use% Mounted on
...
/dev/mapper/vgob-data xfs 19T 136G 19T 1% /data/1
/dev/mapper/vgob-log xfs 2.0T 15G 2.0T 1% /data/log1
删除逻辑卷和卷组
如需要删除集群,需要先在 /etc/fstab 中删除或注释掉相应的自动挂载条目,避免服务器重启时卡住,示例如下。
# /dev/vgob/data /data/1 ...
# /dev/vgob/log /data/log1 ...
停止 OceanBase 数据库集群后,查看并卸载挂载点。
df -hT
umount /data/1
umount /data/log1
df -hT
查看并删除逻辑卷。
lvs
lvdisplay
lvremove /dev/vgob/data
lvremove /dev/vgob/log
查看并删除卷组。
vgs
vgdisplay
vgremove vgob
查看并删除物理卷。
pvs
pvdisplay
# 删除单个物理卷
pvremove /dev/nvme0n1
# 批量删除物理卷
pvremove /dev/nvme[012345]n1
清除磁盘分区表等信息
如需要通过 OAT 进行磁盘初始化,由于 OAT 不会列出已经存在分区表的磁盘,可以通过如方法清除磁盘分区表等信息。 首先确认已按上述步骤 删除逻辑卷和卷组 章节内容,删除完成后如下面命令预期不输出任何结果,即磁盘分区表等信息已清除。
pvs
pvdisplay
如上述命令预期仍输出任何结果,可按如下步骤清除磁盘分区表等信息 。 使用如下命令查看磁盘分区表信息(此命令仅查看,不清除信息)。
# 仅查看磁盘分区表等信息
wipefs /dev/nvme0n1
如果上述命令有输出信息,且确认不再使用,可执行如下命令清除。
# 清除单个物理卷
wipefs -a /dev/nvme0n1
# 批量清除物理卷
wipefs -a /dev/nvme[012345]n1
适用版本
OceanBase 数据库 V3.x、V4.x 版本。