Ubuntu 24.04 设置 NVMe over TCP 连接到 PowerFlex 4.6 详细步骤

前提条件

  • 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

  1. 配置主机 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
  • 进入 StorageProtection 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

可以写个脚本信息

第五部分:验证连接

  1. 查看已连接的 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