1. 准备环境

1.1 准备linux系统

要求的linux系统可以是运行在物理机上,也可以是虚拟机上;

建议有个linux系统,一个做host,一个做target,如果资源紧张也可以把host和target运行在一个linux系统里;

要求linux系统的内核版本为linux-4.1之后的版本,早期版本不支持NVMe over TCP;作者实验时用的是linux-5.0.7版本。

为host主机端准备NQN相关名称(连接target时使用):

注意设置主机的NQN,可以手动指定,也可以命令产生(nvme gen-hostnqn命令产生也可以。要求编译nvme命令时定义LIBUUID才能使用此命令)。

示例如下截图:

1.2 准备硬盘

如果使用的是物理机,则需要准备一个或多个硬盘资源,如果使用的是虚拟机,则可以多添加几块盘;

对硬盘类型无要求,只要能够被linux系统所识别的,任何类型接口的硬盘都可以。

1.3 系统运行检查

登陆linux系统后,做如下检查:

  • 在target环境上,使用lsmod |grep nvme命令,查看nvmet内核模块和nvmet_tcp内核模块确保都已经被正常加载;
  • 在target环境上,使用ls /sys/kernel/config/命令确保此目录中已经有了nvmet目录;
  • 在host环境上,使用lsmod |grep nvme命令,查看nvme内核模块和nvme_core内核模块,确保都已经被正常加载;
  • 在host环境上,区别已经安装了可执行的nvme命令,可以使用nvme -h查看帮助。

作者实验时使用了一个虚拟机,既做host也做target,模块加载示例如下:

查看目录示例如下:

2. 在target环境上创建NVM subsys

进入/sys/kernel/config/nvmet/subsystems目录执行mkdir nqn.2014-08.org.nvmexpress.mytest命令

注意:nqn.2014-08.org.nvmexpress.mytest是新建NVM subsystem随便写的NQN名字,但实际应用时需要按规范定义。

3. 设置NVM subsystem允许访问的主机

进入/sys/kernel/config/nvmet/subsystems/nqn.2014-08.org.nvmexpress.mytest目录中操作。

本示例中,echo 1 > attr_allow_any_host 设置了允许所有主机访问:

4. 申请NSID

在/sys/kernel/config/nvmet/subsystems/nqn.2014-08.org.nvmexpress.mytest/namespaces目录中操作。

直接使用准备申请的NSID作为目录名创建目录即可。

5. 向NSID上挂载存储设备

在/sys/kernel/config/nvmet/subsystems/nqn.2014-08.org.nvmexpress.mytest/namespaces/1/目录中操作

在上一步以NSID为目录名创建目录中,能够看到device_path,这里就是用此路径让NSID关联上存储媒介。

echo /dev/sda2 > device_path

然后

echo 1 > enable

注意:例子中/dev/sda2是一个示例,请根据自己环境准备的块设备名来执行此命令。

6. 创建NVMe over TCP的Transport层

进入/sys/kernel/config/nvmet/ports目录进行操作。

mkdir 1234

进入/sys/kernel/config/nvmet/ports/1234/目录,此目录自动包含了如下内容

开始设置这些属性:

echo tcp > addr_trtype
echo ipv4 > addr_adrfam
echo 127.0.0.1 > addr_traddr
echo 4420 > addr_trsvcid
设置tcp链路相关的参数。
注意:由于实验室host和target使用了同一个linux系统,所以tcp服务地址使用了127.0.0.1,帧听端口号为4420。

7. 让Transport与NVM subsystem建立关联

进入/sys/kernel/config/nvmet/ports/1234/subsystems目录进行操作。
使用ln -s 把刚才创建的NVM subsystem在此目录中建立一个软连接。

注意:例子中软连接的名字tcpsubsys,实际是对应的前边创建的NVM subsystem。

如果都执行成功,此时使用netstat -ltnp命令就可以看到4420端口正在运行着帧听服务。

8. 使用host主机进行Discovery

在host端执行命令:

nvme discover -t tcp -a 127.0.0.1 -s 4420 -q nqn.xxx......

9. 连接

在host主机端执行命令

nvme connect -t tcp -a 127.0.0.1 -s 4420 -n nqn.2014-08.org.nvmexpress.mytest

连接成功后,执行nvme list就能看到NVMe over TCP相关的盘。

10. 其他操作

请参照nvme -h提供的帮助,可以进行其他操作了。

 

在linux系统中配置NVMe over TCP的更多相关文章

  1. 在linux系统中配置NVMe over FC

    在linux系统中配置NVMe over FC与配置NVMe over TCP类似,前5步操作请参考<在linux系统中配置NVMe over TCP>,网页连接如下: https://w ...

  2. Linux系统中配置jdk

    在Linux系统下安装jdk 1.到Oracle公司的官网里下载好jdk,网址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8 ...

  3. 『动善时』JMeter基础 — 57、Linux系统中运行JMeter脚本

    目录 1.Linux系统中安装Java环境 (1)解压Java安装包 (2)配置Java环境变量 (3)验证Java环境是否配置成功 2.Linux系统中安装JMeter (1)下载JMeter (2 ...

  4. 在新安装的Linux系统中,防火墙默认是被禁掉的,一般也没有配置过任何防火墙的策略,所有不存在/etc/sysconfig/iptables文件。

    原因:在新安装的Linux系统中,防火墙默认是被禁掉的,一般也没有配置过任何防火墙的策略,所有不存在/etc/sysconfig/iptables文件. 解决办法: .随便写一条iptables命令配 ...

  5. Linux系统中ElasticSearch搜索引擎安装配置Head插件

    近几篇ElasticSearch系列: 1.阿里云服务器Linux系统安装配置ElasticSearch搜索引擎 2.Linux系统中ElasticSearch搜索引擎安装配置Head插件 3.Ela ...

  6. linux系统中Nginx+FFmPeg+vlc实现网页视频播放配置过程

    linux系统中Nginx+FFmPeg实现网页监控视频播放配置过程 1.安装好的nginx上添加模块nginx-http-fiv-module-master 此模块是rtmp模块的升级版,有它所有的 ...

  7. linux系统中给mysql配置环境变量

    安装过程就不写了,记得安装的路径就行,接下来要用到. 修改配置文件 vim /etc/profile 设置环境变量 写一个MYSQL_HOME,值为“mysql的安装路径” 在PATH后面加上$MYS ...

  8. (转)浅谈 Linux 系统中的 SNMP Trap

    原文:https://www.ibm.com/developerworks/cn/linux/l-cn-snmp/index.html 简介 本文讲解 SNMP Trap,在介绍 Trap 概念之前, ...

  9. 2017-03-04 dotnet core网站发布到Linux系统中

    今天开始学习dotnet core的开发,距离Visual Stuio 2017正式版的发布,也就是VS20周岁的生日还有三天,在我的电脑上安装的是VS2017 Enterprise RC版, 在VS ...

随机推荐

  1. C#7.3 新增功能

    连载目录    [已更新最新开发文章,点击查看详细] C# 7.3 版本有两个主要主题. 第一个主题提供使安全代码的性能与不安全代码的性能一样好的功能. 第二个主题提供对现有功能的增量改进. 此外,在 ...

  2. [OpenGL] 绘制并且判断凹凸多边形、自相交多边形。

    #include <iostream> #include <ctime> #include <GL/glut.h> #include <math.h> ...

  3. JSP一二章笔试题

    一. 什么是B/S架构,什么是C/S架构B/S(Browser/Server) 浏览器/服务器 C/S(Client/Server) 客户端/服务器 二. B/S架构的工作原理 浏览器请求服务器 通过 ...

  4. django中通过文件和Ajax来上传文件

    一.通过form表单来上传文件 1.在html模板中 <form action="/index/" method="post" enctype=" ...

  5. NLP(十二)依存句法分析的可视化及图分析

      依存句法分析的效果虽然没有像分词.NER的效果来的好,但也有其使用价值,在日常的工作中,我们免不了要和其打交道.笔者这几天一直在想如何分析依存句法分析的结果,一个重要的方面便是其可视化和它的图分析 ...

  6. 【Python-Django】Jinja2模板引擎配置教程详解!!!!

    Jinjia2的官方文档:http://jinja.pocoo.org/docs/2.10/ 1. 安装Jinja2扩展包 $ pip install Jinja2 2. 配置Jinja2模板引擎 T ...

  7. 传输层的TCP和UDP协议

    作者:HerryLo 原文永久链接: https://github.com/AttemptWeb... TCP/IP协议, 你一定常常听到,其中TCP(Transmission Control Pro ...

  8. HashMap常见面试题整理

    花了三天时间来仔细阅读hashMap的源码,期间补了下不少数据结构的知识,刷了不少相关的面试题并进行了整理 1.谈一下HashMap的特性? 1.HashMap存储键值对实现快速存取,允许为null. ...

  9. 5.Go-封装、继承、接口、多态和断言

    面向对象 Go语言开发者认为:面向对象就是特定类型(结构体)有着自己的方法,利用这个方法完成面向对象编程, 并没有提封装.继承.多态.所以Go语言进行面向对象编程时,重点在于灵活使用方法. Go语言有 ...

  10. python自动化测试框架unittest

    对于刚学习python自动化测试的小伙伴来说,unittest是一个非常适合的框架: 通过unittest,可以管理测试用例的执行,自动生成简单的自动化测试报告: 首先我们尝试编写编写一个最简单的un ...