前提条件
-
Dell PowerFlex 4.6 存储系统已配置好 NVMe over TCP 目标端
-
Ubuntu 24.04 LTS 主机(作为 Initiator)
-
网络连通性已确认(建议使用高速网络,如 25GbE/100GbE)
-
已获取 PowerFlex 存储端的 NQN、IP 地址、端口等信息
第一部分:Ubuntu 24.04 主机端配置
1. 安装必要的软件包
-
更新系统
sudo apt update && sudo apt upgrade -y
安装 nvme-cli 工具
sudo apt install -y nvme-cli
确认版本
nvme version
-

2. 加载内核模块
加载 NVMe over TCP 所需的内核模块
sudo modprobe nvme
sudo modprobe nvme-core
sudo modprobe nvme-fabrics
sudo modprobe nvme-tcp
验证模块已加载
lsmod | grep nvme

3. 设置模块开机自动加载
创建模块自动加载配置文件
sudo tee /etc/modules-load.d/nvme-tcp.conf << 'EOF'
nvme
nvme-core
nvme-fabrics
nvme-tcp
EOF
- 配置主机 NQN(Host NQN)
查看系统自动生成的 Host NQN
cat /etc/nvme/hostnqn
如果文件不存在,生成一个
sudo mkdir -p /etc/nvme
sudo nvme gen-hostnqn | sudo tee /etc/nvme/hostnqn
查看生成的 NQN
cat /etc/nvme/hostnqn
输出示例
nqn.2014-08.org.nvmexpress:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
第二部分:网络配置优化
1. 配置网络接口(Netplan 示例)
network:
version: 2
ethernets:
NVMe/TCP 专用网络接口(根据实际接口名称修改)
ens192:
addresses:
- 192.168.100.10/24
mtu: 9000 # 推荐启用巨型帧
dhcp4: false
routes: \[\]
如有第二条路径(多路径场景)
ens224:
addresses:
- 192.168.200.10/24
mtu: 9000
dhcp4: false
routes: \[\]
应用网络配置
sudo netplan apply
验证 MTU 设置
ip link show ens192
2. TCP 网络性能调优
sudo tee -a /etc/sysctl.d/99-nvme-tcp.conf << 'EOF'
NVMe/TCP 网络调优
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.rmem_default = 1048576
net.core.wmem_default = 1048576
net.ipv4.tcp_rmem = 4096 1048576 16777216
net.ipv4.tcp_wmem = 4096 1048576 16777216
net.core.netdev_max_backlog = 30000
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
EOF
应用参数
sudo sysctl --system

3. 验证网络连通性
Ping PowerFlex 存储端 NVMe/TCP 目标 IP
ping -c 4 192.168.100.1 # PowerFlex SDT 端 IP(路径1)
ping -c 4 192.168.200.1 # PowerFlex SDT 端 IP(路径2)
2. 配置 NVMe Hosts / Host Groups
PowerFlex Manager UI:
→ NVMe → Hosts
→ Add Host
→ 输入 Ubuntu 主机的 Host NQN(从 /etc/nvme/hostnqn 获取)
→ 设置 Host 名称

3. 创建并映射 Volume
PowerFlex Manager UI:
→ Volumes → Create Volume
→ 设置容量、名称、存储池
→ 将 Volume 映射到对应的 NVMe Host
4. 记录 Target 信息
从 PowerFlex 管理界面获取以下关键信息:
| 参数 | 示例值 |
|------|--------|
| Target NQN | `nqn.2014-08.com.dell:powerflex:xxxxx` |
| Target IP(SDT 端口地址)| `192.168.100.1`, `192.168.200.1` |
| Transport Port | `4420`(默认端口) |
| Transport Type | `tcp` |
第四部分:发现并连接 NVMe Subsystem
1. 发现 NVMe over TCP 目标
发现存储端的 NVMe subsystem(单路径)
sudo nvme discover -t tcp -a 192.168.100.1 -s 4420

示例输出:
Discovery Log Number of Records 1, Generation counter 1
=====Discovery Log Entry 0======
trtype: tcp
adrfam: ipv4
subtype: nvme subsystem
treq: not required
portid: 0
trsvcid: 4420
subnqn: nqn.2014-08.com.dell:powerflex:xxxxxxxxxxxxxxx
traddr: 192.168.100.1
sectype: none
发现第二条路径(如配置多路径)
sudo nvme discover -t tcp -a 192.168.200.1 -s 4420

-
Dell PowerFlex 4.6 存储系统已配置好 NVMe over TCP 目标端
-
Ubuntu 24.04 LTS 主机(作为 Initiator)
-
网络连通性已确认(建议使用高速网络,如 25GbE/100GbE)
-
已获取 PowerFlex 存储端的 NQN、IP 地址、端口等信息
3. 验证网络连通性
-
Ping PowerFlex 存储端 NVMe/TCP 目标 IP
ping -c 4 192.168.100.1 # PowerFlex SDT 端 IP(路径1)
ping -c 4 192.168.200.1 # PowerFlex SDT 端 IP(路径2)
第三部分:PowerFlex 4.6 存储端配置
1. 在 PowerFlex Manager 中启用 NVMe/TCP
- 登录 PowerFlex Manager Web UI
- 进入 Storage → Protection Domains → 选择目标 Protection Domain
- 确认 SDT(Storage Data Target) 已部署并配置
2. 连接到 NVMe Subsystem
单路径连接
sudo nvme connect \
-t tcp \
-a 192.168.100.1 \
-s 4420 \
-n nqn.2014-08.com.dell:powerflex:xxxxxxxxxxxxxxx \
--hostnqn=$(cat /etc/nvme/hostnqn) \
--hostid=$(cat /etc/nvme/hostid)
多路径连接(推荐)
连接路径 1
sudo nvme connect \
-t tcp \
-a 192.168.100.1 \
-s 4420 \
-n nqn.2014-08.com.dell:powerflex:xxxxxxxxxxxxxxx \
--hostnqn=$(cat /etc/nvme/hostnqn) \
--hostid=$(cat /etc/nvme/hostid) \
--ctrl-loss-tmo=3600 \
--reconnect-delay=10
连接路径 2
sudo nvme connect \
-t tcp \
-a 192.168.200.1 \
-s 4420 \
-n nqn.2014-08.com.dell:powerflex:xxxxxxxxxxxxxxx \
--hostnqn=$(cat /etc/nvme/hostnqn) \
--hostid=$(cat /etc/nvme/hostid) \
--ctrl-loss-tmo=3600 \
--reconnect-delay=10
| 参数 | 说明 |
|------|------|
| `-t tcp` | 传输类型为 TCP |
| `-a` | 目标 IP 地址(SDT 地址) |
| `-s 4420` | 目标服务端口(默认 4420) |
| `-n` | 目标子系统 NQN |
| `--ctrl-loss-tmo` | 控制器丢失超时时间(秒),-1 为永不放弃 |
| `--reconnect-delay` | 自动重连间隔(秒) |
3. 使用 connect-all 批量连接
通过 discover 自动连接所有发现的 subsystem
sudo nvme connect-all \
-t tcp \
-a 192.168.100.1 \
-s 4420 \
--ctrl-loss-tmo=3600 \
--reconnect-delay=10
可以写个脚本信息

第五部分:验证连接
- 查看已连接的 NVMe 控制器
sudo nvme list
通常的显示案例
Node SN Model Namespace Usage Format
/dev/nvme0n1 XXXXXXXX Dell PowerFlex 1 107.37 GB 512 B + 0 B
2. 查看详细控制器信息
列出所有 NVMe 控制器
sudo nvme list-subsys

查看特定控制器详情
sudo nvme id-ctrl /dev/nvme0
查看命名空间信息
sudo nvme id-ns /dev/nvme0n1
3. 验证多路径状态
sudo nvme list-subsys
多路径输出示例:
nvme-subsys0 - NQN=nqn.2014-08.com.dell:powerflex:xxxxxxx
\
+- nvme0 tcp traddr=192.168.100.1,trsvcid=4420 live
+- nvme1 tcp traddr=192.168.200.1,trsvcid=4420 live
4. 检查 NVMe 原生多路径
确认 NVMe 原生多路径已启用
cat /sys/module/nvme_core/parameters/multipath
输出应为 Y

如果未启用:
启用 NVMe 原生多路径
echo "options nvme_core multipath=Y" | sudo tee /etc/modprobe.d/nvme-multipath.conf
更新 initramfs 并重启
sudo update-initramfs -u
sudo reboot
第六部分:配置持久化连接(开机自动连接)
方法一:使用 nvme connect-all 配置文件(推荐)
创建持久化发现配置
sudo mkdir -p /etc/nvme
sudo tee /etc/nvme/discovery.conf << 'EOF'
PowerFlex Path 1
-t tcp -a 192.168.100.1 -s 4420
PowerFlex Path 2
-t tcp -a 192.168.200.1 -s 4420
EOF
方法二:使用 systemd 服务
sudo tee /etc/systemd/system/nvme-tcp-connect.service << 'EOF'
Unit
Description=NVMe over TCP Connection to PowerFlex
After=network-online.target
Wants=network-online.target
Service
Type=oneshot
RemainAfterExit=yes
路径 1
ExecStart=/usr/sbin/nvme connect -t tcp -a 192.168.100.1 -s 4420 -n nqn.2014-08.com.dell:powerflex:xxxxxxxxxxxxxxx --ctrl-loss-tmo=3600 --reconnect-delay=10
路径 2
ExecStart=/usr/sbin/nvme connect -t tcp -a 192.168.200.1 -s 4420 -n nqn.2014-08.com.dell:powerflex:xxxxxxxxxxxxxxx --ctrl-loss-tmo=3600 --reconnect-delay=10
断开连接
ExecStop=/usr/sbin/nvme disconnect-all
Install
WantedBy=multi-user.target
EOF
启用服务
sudo systemctl daemon-reload
sudo systemctl enable nvme-tcp-connect.service
sudo systemctl start nvme-tcp-connect.service
查看状态
sudo systemctl status nvme-tcp-connect.service
方法三:使用 nvme-cli 内置的 udev/systemd 自动连接
持久化发现控制器(nvme-cli 2.x+ 支持)
sudo nvme discover -t tcp -a 192.168.100.1 -s 4420 --persistent
sudo nvme discover -t tcp -a 192.168.200.1 -s 4420 --persistent
启用 nvme 自动连接服务
sudo systemctl enable nvmefc-boot-connections.service
sudo systemctl enable nvmf-autoconnect.service
第七部分:文件系统和使用
1. 分区和格式化
查看新的 NVMe 设备
lsblk
创建分区(可选)
sudo fdisk /dev/nvme0n1
格式化为 ext4 或 xfs
sudo mkfs.ext4 /dev/nvme0n1
或
sudo mkfs.xfs /dev/nvme0n1
2. 挂载
创建挂载点
sudo mkdir -p /mnt/powerflex
挂载
sudo mount /dev/nvme0n1 /mnt/powerflex
配置 fstab 持久挂载(使用 UUID)
UUID=$(sudo blkid -s UUID -o value /dev/nvme0n1)
echo "UUID=$UUID /mnt/powerflex ext4 _netdev,defaults 0 0" | sudo tee -a /etc/fstab
第八部分:监控与故障排查
1. 实时监控
查看 NVMe 控制器状态
sudo nvme list-subsys
查看控制器健康信息
sudo nvme smart-log /dev/nvme0
查看连接详细信息
sudo nvme show-regs /dev/nvme0
2. 日志检查
检查内核日志中 NVMe 相关信息
sudo dmesg | grep -i nvme
sudo journalctl -k | grep -i nvme
查看系统日志
sudo journalctl -u nvme-tcp-connect.service
3. 常见故障排查
| 问题 | 排查方法 |
|------|----------|
| `discover` 无响应 | 检查防火墙:`sudo ufw allow 4420/tcp`,检查网络连通性 |
| `connect` 失败 | 确认 Host NQN 已在 PowerFlex 端注册 |
| 设备不可见 | 检查 Volume 是否已映射到 Host |
| 多路径未生效 | 确认 `nvme_core multipath=Y`,检查 `nvme list-subsys` |
| 性能不佳 | 检查 MTU、TCP 调优参数、网络带宽 |
| 连接中断后未恢复 | 确认 `--ctrl-loss-tmo` 和 `--reconnect-delay` 参数 |
4. 断开连接
断开特定控制器
sudo nvme disconnect -n nqn.2014-08.com.dell:powerflex:xxxxxxxxxxxxxxx
断开所有连接
sudo nvme disconnect-all
第九部分:防火墙配置
如果使用 UFW
sudo ufw allow 4420/tcp comment "NVMe over TCP"
sudo ufw allow 8009/tcp comment "NVMe Discovery"
如果使用 iptables
sudo iptables -A INPUT -p tcp --dport 4420 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 8009 -j ACCEPT
