版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

1. 简介
Linux通用的SCSI 目标子系统(SCST)是一个为Linux
SCSI目标子系统的另一种实现。它是由英国著名存储开发团队ID7研发,目前由SanDisk管理(收购了Fusion
IO)。它的出现要早于LIO,功能也比LIO完善,目前的用户是许多提供存储解决方案的大公司如EMC,IBM,HP采用。它提供Linux内核之间和处理和SCSI目标驱动程序的统一的,一致的接口,同时提供Linux内核与存储后端句柄连接,连接真实或模拟的存储后端与目标驱动程序。SCST支持主流的SCSI数据传输方式,包括光纤通道,iSCSI,SAS,InfiniBand和并行(宽)的SCSI。

2. 架构

虚线上方主要是用户态管理工具,scst
core实现在内核中,中间蓝色为核心子系统(位于SCSI top
layer),其代码框架设计合理,将target具体驱动封装成可注册的插件驱动,如我们经常会用到的就是iscsi-scst插件,通过这个驱动程序我们可以在以太网上做iscsi协议的访问,即iscsi
over tcp/ip,后续会继续分析initiator端开源驱动open-iscsi,再详细介绍iscsi协议。

同时,除了必备的target插件驱动,scst内核核心系统也支持了几个存储设备驱动,从外部使用上就是我们经常在配置scsi设备导出时可选择的导出方式,比如blockio
或者 fileio导出,或者 pass through,这几种导出方式在scst
内核其实是由几个专用的存储驱动完成的,它们也实现为可注册插件的形式。

SCST core:实现了协议无关的SCSI处理功能。
Target drivers:实现了SCSI协议的传输层功能。
Storage drivers:实现了SCST的后端存储驱动

3. 安装、使用和配置
3.1 安装
1)下载源码,因为scst的代码使用svn托管在sourceforge上,所以需要安装svn软件
svn co https://scst.svn.sourceforge.net/svnroot/scst/trunk scst
2)准备kernel,因为scst没有加入到linux的内核中,所以为了达到很好的性能,需要在向内核中打入scst自己的patch并重新编译内核。

  1.  # cd /var/Jevon/linux-3.18.16
  2.  # patch -p1 < /root/scst/iscsi-scst/kernel/patches/put_page_callback-3.18.patch
  3.  # make clean
  4.  # make menuconfig
  5.  Select Networking support -> Networking options -> TCP/IP networking
  6.  Select Networking support -> Networking options -> TCP/IP zero-copy transfer completion notification
  7.  Select Device Drivers -> SCSI device support -> SCSI disk support
  8.   Select Enable the block layer -> IO Schedulers -> CFQ I/O Scheduler
  9.  Set Enable the Block layer -> IO Schedulers -> Default I/O Scheduler to 'CFQ'
  10.   Set Processor type and features -> Preemption Model to 'No Forced Preemption (Server)' 
  11. # make bzImage
  12.  # make modules
  13.  # make modules_install
  14.  # make install
  15.  # vim /etc/grub/grub.conf //设置启动新内核
  16.  # reboot

3)编译安装

  1.  # make 2perf
  2.  # make scst scst_install -j24
  3.  # make iscsi iscsi_install -j24
  4. # make scstadm scstadm_install -j24

4)启动相应的服务,假设这里使用iSCSI协议

  1.  <pre name="code" class="plain"># modprobe scst
  2.  # modprobe scst_disk
  3.  # modprobe scst_vdisk
  4.  # modprobe iscsi-scst
  5.  # lsmod |grep scst
  1.  isert_scst             51996  4
  2.  iscsi_scst             92286  5 isert_scst
  3.  scst_vdisk             93522  0
  4.  scst                  869809  2 iscsi_scst,scst_vdisk
  5.  rdma_cm                44234  2 isert_scst,ib_iser
  6.  ib_core                88413  7 isert_scst,ib_iser,rdma_cm,ib_cm,iw_cm,ib_sa,ib_mad
  7.  libcrc32c              12644  4 iscsi_scst,scst_vdisk,dm_persistent_data,xfs


3.2 配置1)通过scstadm配置iscsi target

  1.  1a) 创建block设备
  2.  scstadmin -open_dev disk03 -handler vdisk_blockio -attributes filename=/dev/sdc1
  3.  1b) 创建target
  4.  scstadmin -add_target iqn.2011-08.nl.feka:storage.vdisk1 -driver iscsi
  5.  1c) 创建lun
  6.  scstadmin -add_lun 0 -driver iscsi -target iqn.2011-08.nl.feka:storage.vdisk1 -device disk03
  7.  1d) 启动target
  8.  scstadmin -enable_target iqn.2011-08.nl.feka:storage.vdisk1 -driver iscsi
  9.  1e) 使用iscsi driver
  10.  scstadmin -set_drv_attr iscsi -attributes enabled=1
  11.  1f) 写入配置文件
  12.  scstadmin -write_config /etc/scst.conf

2)通过配置文件配置

# cat /etc/scst.conf

  1.  HANDLER vdisk_blockio {
  2.  DEVICE disk01 {
  3.  filename /dev/iscsilun/iscsilun0
  4.  }
  5.  DEVICE disk02 {
  6.  filename /dev/iscsilun/iscsilun1
  7.  }
  8.  }
  9.  TARGET_DRIVER iscsi {
  10.  enabled 1
  11.  TARGET iqn.2007-05.com.example:storage.disk1.scst.jevon {
  12.  LUN 0 disk01
  13.  LUN 1 disk02
  14.  enabled 1
  15.  }
  16.  }
  17.  # /etc/init.d/scst start
  18.  # iscsi-scstd

注意如果改变了scst的配置一定要重启scst。
3.3 使用
按照以上的配置,你可以得到一个iscsi target。通过iscsiadm就可以访问这个target,具体访问方式在之前的文章已经介绍过,这里就不再赘述了。                                     

Linux中三种SCSI target的介绍之SCST的更多相关文章

  1. Linux中三种SCSI target的介绍之STGT

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/scaleqiao/article/deta ...

  2. Linux中三种SCSI target的介绍之各个target的优劣

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/scaleqiao/article/deta ...

  3. Linux中三种SCSI target的介绍之LIO

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/scaleqiao/article/deta ...

  4. 在Linux中三种让crontab每秒执行任务的方法

    第一种方法: 1.创建脚本文件 cat phplog.sh 2.编辑脚本内容 #!/bin/bash while : ;do /home/scripts.sh 2>/dev/null & ...

  5. Linux 的三种软件安装包介绍

    通过RPM软件包来安装 说起RPM(RedHat Package Management)标准的软件包,大家可能都会想起大名鼎鼎的REDHAT公司,正是RPM软件包发行方式的出现,使Linux中的应用软 ...

  6. HTML中使用js的三种方式及优缺点介绍

    1.内部js: 在直接在页面的<script></script>标签内写js代码 优点:相对于使用行内js,内部js代码较为集中,与页面结构的实现代码耦合度较低,比较便于维护 ...

  7. Ubuntu Linux系统三种方法添加本地软件库

    闲着没事教教大家以Ubuntu Linux系统三种方法添加本地软件库,ubuntu Linux使用本地软件包作为安装源——转2007-04-26 19:47新手重新系统的概率很高,每次重装系统后都要经 ...

  8. Spring中三种配置Bean的方式

    Spring中三种配置Bean的方式分别是: 基于XML的配置方式 基于注解的配置方式 基于Java类的配置方式 一.基于XML的配置 这个很简单,所以如何使用就略掉. 二.基于注解的配置 Sprin ...

  9. 深入浅出spring IOC中三种依赖注入方式

    深入浅出spring IOC中三种依赖注入方式 spring的核心思想是IOC和AOP,IOC-控制反转,是一个重要的面向对象编程的法则来消减计算机程序的耦合问题,控制反转一般分为两种类型,依赖注入和 ...

随机推荐

  1. Markdown新手入门

    目录 Markdown新手入门 一.字体样式 二. 标题 三.列表 四.引用和代码块 五.插入图片和超链接 六.创建表格 七. 上标和下标 八.着重显示和高亮显示 我是尾巴 Markdown新手入门 ...

  2. Socket简单Demo

    Socket协议网上介绍的有很多了,就不在画蛇添足了,本文主要编写一个小Demo,介绍下它具体实现 一:Socket服务器端 package com.founderit; import java.io ...

  3. 基于MBT的自动化测试工具——GraphWalker介绍和实际使用

    GraphWalker是一个开源的基于模型的自动化测试工具,它可以用来通过图形测试模型来自动生成测试用例. 本文主要描述了使用yed画出FSM, EFSM模型图(常见的流程图),然后使用GraphWa ...

  4. java 堆 排序学习

    /** * <html> * <body> * <P> Copyright 1994 JsonInternational</p> * <p> ...

  5. (转)WEB服务器_IIS配置优化指南

    原文地址:https://www.cnblogs.com/heyuquan/p/deploy-iis-set-performance-guide.html 通常把站点发布到IIS上运行正常后,很少会去 ...

  6. python3-使用requests模拟登录网易云音乐

    # -*- coding: utf-8 -*- from Crypto.Cipher import AES import base64 import random import codecs impo ...

  7. python day 12: 选课系统

    目录 python day 12 1. 通过类来创建选课系统 1.1 类库models.py 2. 配置文件setting.py 3. administrator.py 4. student.py p ...

  8. mybatis返回map类型数据空值字段不显示的解决方法

    在日常开发中,查询数据返回类型为map,数据库中有些自动值为null,则返回的结果中没有值为空的字段,则如何显示值为空的字段呢? Spring boot + MyBatis返回map中null值默认不 ...

  9. 用于并发系统建模和验证的着色Petri网及其工具软件的CPN Tools(笔记整理)

    1.着色Petri网(CPNS)是一种建模和验证系统的语言,在这些熊中并发性,交互性和同步性扮演着主要的角色,着色Petri网是一种功能编程语言Standard ML结合起来的离散时间建模语言,Pet ...

  10. idea中添加web.xml配置文件与tomcat启动中遇到的web.xml文件找不到的问题

    1,如何在idea中向war项目中添加web.xml的配置文件 idea通过maven创建war项目时没有指定是webapp导致创建出来的项目没有webapp的文件夹.其实war项目中都是在" ...