在linux系统中配置NVMe over FC
在linux系统中配置NVMe over FC与配置NVMe over TCP类似,前5步操作请参考《在linux系统中配置NVMe over TCP》,网页连接如下:
https://www.cnblogs.com/JamesLi/p/11399054.html
注意事项:
以Emulex卡举例,在内核加载lpfc模块时,需要给模块参数赋值,包括:lpfc_enable_nvmet 和 lpfc_enable_fc4_type
例如:
modprobe lpfc lpfc_enable_nvmet=0x1234567890ABCDEF lpfc_enable_fc4_type=3
解释描述:
lpfc lpfc_enable_nvmet赋值的是做target端的FC端口wwpn(从/sys/class/fc_host/hostx/port_name获得),设置多个时请用逗号分开(当前版本最大支持32个)。
lpfc_enable_fc4_type可以赋值1或2或3,这里3表示既支持SCSI又支持NVMe。
从第6步向后,请按下边步骤操作。
6. 创建NVMe over FC的Transport层
进入/sys/kernel/config/nvmet/ports目录进行操作。
mkdir 123
进入/sys/kernel/config/nvmet/ports/123/目录,此目录自动包含了如下内容
开始设置这些属性:
echo fc > addr_adrfam
addr_trsvcid //注意:这个字段在FC类型中暂时未用到
8. 使用host主机进行Discovery
在host端执行命令:
nvme discover -t fc -a nn-0x1234567890ABCDEF-pn-0xABCDEF0123456789 -w nn-0x2345678901ABCDEF-pn-0x1234567890FEDCBA
参数:
-a是指定的target端FC端口的node_name和port_name
-w是指定的host_traddr,与target相连接的本地FC端口的node_name和port_name
9. 连接
在host主机端执行命令
nvme connect -t fc -a nn-0x1234567890ABCDEF-pn-0xABCDEF0123456789 -w nn-0x2345678901ABCDEF-pn-0x1234567890FEDCBA -n nqn.2014-08.org.nvmexpress.mytest
参数:
-n指定target端将要连接的NVM subsystem的NQN。
连接成功后,请用nvme list命令确认下是否已经看到连接的nvme盘。
其他操作,与NVMe over TCP的操作相同。
例如:
nvme id-ctrl /dev/nvme0n1
nvme id-ns /dev/nvme0n1
10. 其他
target端设备重启一次,或许主机再次连接时遇到问题,提示找不到/dev/nvme-fabrics设备。
解决:
a)使用 ls -l /dev/nvme-fabrics查看,确认是存在此设备的(如果不存在则用lsmod |grep nvme_fabrics确认是不是内核模块异常了);
b)用dmesg查看内核日志,如果出现“nvme_fc_create_ctrl combination not found”,可能是nvme_fc_create_ctrl函数return ERR_PTR(-ENOENT);这个错误码导致的误报成了找不到文件或目录。
c)如果是上一步的原因,则可以echo 1 >/sys/class/fc_host/hostx/issue_lip 或者重启一次主机来解决此问题。
######
服务器器上查看FC连接情况(wwn关系对),执行如下脚本:
#!/bin/bash HOST_DIR="/sys/class/fc_host/" RPORT_DIR="/sys/class/fc_remote_ports/" host_list=`ls -A $HOST_DIR` rport_list=`ls -A $RPORT_DIR`
#echo title echo -e "host\twwwnn:wwwpn \tremote_port\tremote_wwnn:remote_wwpn" echo "--------------------------------------------------------------------"
#list all link pair about wwnn:wwpn for rport in ${rport_list[@]} do rp=${rport%%:*} #rport-10:0-1 ==> rport-10 h_id=${rp##rport-} #rport-10 ==> 10 hostx="host${h_id}" nn=`cat ${HOST_DIR}/${hostx}/node_name` pn=`cat ${HOST_DIR}/${hostx}/port_name` r_nn=`cat ${RPORT_DIR}/${rport}/node_name` r_pn=`cat ${RPORT_DIR}/${rport}/port_name` echo -e "${hostx}\t${nn}:${pn}\t{rport}\t${r_nn}:${r_pn}" done |