Linux中三种SCSI target的介绍之LIO
1. 简介
Linux-IO Target在Linux内核中(linux 2.6.38后),用软件实现各种SCSI
Target,其支持的SAN技术中所有流行的存储协议包括Fibre
Channel(Qlogic,linux3.5)、FCoE(linux3.0)、iSCSI(linux 3.1)、iSER (Mellanox
InfiniBand,linux3.10), SRP (Mellanox InfiniBand,linux3.3),
USB等,同时还能为本机生成模拟的SCSI设备,以及为虚拟机提供基于virtio的SCSI设备。Linux-IO
Target使用户能够使用相对廉价的Linux系统实现SCSI、SAN的各种功能,而不用购买昂贵的专业设备。
2. 架构
上图显示了Linux-IO
Target的各个组件。LIO模拟了通用的SCSI设备,并且实现了SPC-3和4。接着,通过各种各样的backstore对象,来导入真正的后端存储,最后连接上各种前端Fabric模块,来导出模拟的SCSI设备。无论是Fibre
Channel、FCoE、iSCSI还是vhost(即virtio),都只是一种Fabric技术,我们可以将其理解成传输协议,而在这些传输协议中传输的SCSI命令则总是由核心的SCSI设备处理的。要支持新的Fabric技术,并不需要修改核心的SCSI设备和后端存储模块,只需要按照该Fabric技术的规范实现对SCSI命令的传输就可以了。iSCSI技术就是把SCSI命令放在TCP/IP中传输,vhost技术就是把SCSI命令放在virtio队列中传输。
Generic Target Engine:实现了SAM中规定的一个SCSI
target的功能,主要是SCSI协议的解析。它通过Fabric模块和initiator通信,通过backstore和具体的存储设备通信。Fabric
modules:实现了LIO的前端,即SCSI协议传输层的模块。可以通过Fabric Hardware Abstraction
Layer(F-HAL)来为LIO增加新的fabric模块。
Backstores:实现了LIO的后端,即访问磁盘数据的方式。可以通过Storage Hardware Abstraction Layer(S-HAL)在LIO中增加新的存储硬件的支持。通常使用BLOCKIO和FILEIO。
3. 使用方法
Linux-IO
Target则在内核态实现了对Target的模拟,配置管理则采用了更为“现代化”的基于sysfs的方式,提供了友好的用户态管理工具。从内核的2.6.38版起,Linux内核都包含Linux-IO
Target的相关模块。在用户态,各大发行版都打包了targetcli和rtslib,其中targetcli程序用于配置、管理,rtslib则提供Python编程接口。
1)targetcli
targetcli是Linux-IO
Target的用户态的管理配置工具。用户可以使用yum或apt-get直接从各大发行版的官方仓库安装,对于较老的linux版本需要自己编译源码安装。targetcli提供一个类似shell的界面,各种Target、TPG、LUN、backstore对象则被组织成目录树的形式,用户可以用ls、cd命令来浏览目录树,用create、delete命令来创建和删除各种对象。浏览配置,就是浏览目录树,创建删除各种对象,就是在目录树的各级节点中创建新的节点。同时targetcli还提供了常见的shell命令辅助编辑功能,例如TAB智能补全、上下键切换命令历史、Ctrl
+ R搜索命令历史。凡是有不熟悉的命令,都可以用help命令查询使用说明。
其实,对于我们来说,配置LIO主要就是使用targetcli,具体使用步骤如下:
- 1a)root权限运行targetcli
- 1b)浏览存储对象, ls查看目录树信息,cd到执行目录
- 1c)创建文件存储对象
- cd /backstores/fileio
- create disk0 /tmp/disk0.img 10MB
- cd /backstores/ramdisk
- create rd0 10MB
- 1d)创建iSCSI目标
- cd /iscsi
- create
- cd iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.6b448471ba5e/tpg1/
- luns/ create /backstores/fileio/disk0
- luns/ create /backstores/ramdisk/rd0
- portals/ create 0.0.0.0
- set attribute authentication=0 demo_mode_write_protect=0 generate_node_acls=1 cache_dynamic_acls=1
- cd /
- ls
- saveconfig
- 1e)启动iscsi target服务
- [root@localhost ~]# service target start
- [root@localhost ~]# service target status
- 1f)装载iSCSI Target
- [root@localhost ~]# iscsiadm -m discovery -t sendtargets -p 127.0.0.1
- 127.0.0.1:3260,1 iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.6b448471ba5e
- [root@localhost ~]# iscsiadm –mode node \
- > –targetname iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.6b448471ba5e \
- > –portal 127.0.0.1 –login
- [root@localhost dennis]# lsscsi
- [2:0:0:0] disk ATA ST3160815AS A /dev/sda
- [6:0:0:0] disk LIO-ORG disk0 4.0 /dev/sdb
- [6:0:0:1] disk LIO-ORG rd0 4.0 /dev/sdc
- 1g)卸载并删除iSCSI目标
- iscsiadm –mode node –targetname iqn.2003-01.org.linux-iscsi.localhost.x8664:sn. 6b448471ba5e –portal 127.0.0.1 –logout
- targetcli iscsi/ delete iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.6b448471ba5e
除了targetcli,LIO还提供python的编程接口。
2)rtslib
rtslib是一个Python程序库,让用户可以以编程的方式配置Linux-IO
Target的各项功能。rtslib中的对象也被组织成树状结构,并且与我们在targetcli中熟悉的各种对象也很相似。熟悉了targetcli的操作之后,用rtslib编程就变得十分容易。首先,我们需要安装python-rtslib的RPM包。还可以安装python-rtslib-doc的RPM包,里面包含了接口的说明文档。下面以iSCSI为例,展示如何用rtslib创建Target。下面的例子是使用rtslib创建iSCSI
target。
- import rtslib
- def createTarget():
- fio = rtslib.FileIOStorageObject(
- 'disk0', dev='/tmp/disk0.img', size=100 * 1024 * 1024)
- iscsiMod = rtslib.FabricModule('iscsi')
- tgt = rtslib.Target(iscsiMod, mode='create')
- tpg = rtslib.TPG(tgt, tag=None, mode='create')
- rtslib.LUN(tpg, lun=None, storage_object=fio)
- tpg.set_attribute('generate_node_acls', '1')
- tpg.set_attribute('cache_dynamic_acls', '1')
- tpg.set_attribute('authentication', '0')
- tpg.set_attribute('demo_mode_write_protect', '0')
- tpg.enable = True
- rtslib.NetworkPortal(tpg, '0.0.0.0', mode='create')
- return tgt.wwn
- print createTarget()
Linux中三种SCSI target的介绍之LIO的更多相关文章
- Linux中三种SCSI target的介绍之STGT
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/scaleqiao/article/deta ...
- Linux中三种SCSI target的介绍之各个target的优劣
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/scaleqiao/article/deta ...
- Linux中三种SCSI target的介绍之SCST
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/scaleqiao/article/deta ...
- 在Linux中三种让crontab每秒执行任务的方法
第一种方法: 1.创建脚本文件 cat phplog.sh 2.编辑脚本内容 #!/bin/bash while : ;do /home/scripts.sh 2>/dev/null & ...
- Linux 的三种软件安装包介绍
通过RPM软件包来安装 说起RPM(RedHat Package Management)标准的软件包,大家可能都会想起大名鼎鼎的REDHAT公司,正是RPM软件包发行方式的出现,使Linux中的应用软 ...
- HTML中使用js的三种方式及优缺点介绍
1.内部js: 在直接在页面的<script></script>标签内写js代码 优点:相对于使用行内js,内部js代码较为集中,与页面结构的实现代码耦合度较低,比较便于维护 ...
- Ubuntu Linux系统三种方法添加本地软件库
闲着没事教教大家以Ubuntu Linux系统三种方法添加本地软件库,ubuntu Linux使用本地软件包作为安装源——转2007-04-26 19:47新手重新系统的概率很高,每次重装系统后都要经 ...
- Spring中三种配置Bean的方式
Spring中三种配置Bean的方式分别是: 基于XML的配置方式 基于注解的配置方式 基于Java类的配置方式 一.基于XML的配置 这个很简单,所以如何使用就略掉. 二.基于注解的配置 Sprin ...
- 深入浅出spring IOC中三种依赖注入方式
深入浅出spring IOC中三种依赖注入方式 spring的核心思想是IOC和AOP,IOC-控制反转,是一个重要的面向对象编程的法则来消减计算机程序的耦合问题,控制反转一般分为两种类型,依赖注入和 ...
随机推荐
- SpringCloud之Zuul网关简介、映射vs过滤配置使用
目的: Zuul路由网关简介及基本使用 Zuul路由映射配置 Zuul请求过滤配置 Zuul路由网关简介及基本使用 Zuul简介: Zuul是从设备和网站到Netflix流应用程序后端的所有请求的前门 ...
- python-django中使用事务以及小坑
django中使用事务 一.导入事务模块 from django.db import transaction 二.对相应的业务进行事务操作 方式一:为整个函数进行事务操作 @transaction.a ...
- 删除注册在Eureka的服务(无效,多余)
例子:http://140.143.67.146:8000/eureka/eureka/apps/ZKR-PRODUCT/172.21.0.10:zkr-product:6868 Request Me ...
- 【转载】 C#中List集合使用First()方法获取第一个元素
在C#的List集合操作过程中,如果要获取List集合中的第一个元素对象,则一般会先通过获取到list[0]这种方式来获取第一个元素.其实在List集合中提供了获取最后一个元素的First()方法,调 ...
- HTTP缓存字段总结
首部 通用首部:有些首部提供了与报文相关的最基本的信息,它们被称为通用首部. 请求首部:请求首部是只在请求报文中有意义的首部. 响应首部 实体首部: 用来描述HTTP报文的负荷,由于请求和响应报文中都 ...
- grant_type为client_credentials和password二者的区别
最近工作中需要使用到oauth,注意到oauth客户端的grant_type值可以指定为client_credentials和password两种,很好奇所以网上搜索了一下,发现stackoverfl ...
- 【Linux下Hadoop-eclipse-plus-3.2.0】编译Hadoop连接eclipse的插件遇见的一系列错误,崩溃的操作
2019-09-02 23:35:22 前言:首先,我想吐槽下自己,居然花费了4到5个夜晚和中午的时间来做这件事情,直到刚才才顺利解决,我也挺佩服自己的! 我在这个过程中参考其他人的博客,非常感谢他们 ...
- MySQL Partition Table--分区表优缺点
分区表历史 1.MySQL 5.1版本开始支持基于整数列的分区表, 2.MySQL 5.5版本开始支持RANGE和LIST分区,支持TRUNCATE分区,新增COLUMNS关键词简化分区定义. 3.M ...
- 阿里云SOP
阿里云SOP 摘要 注册阿里云账号. 领取及配置ECS. 领取及配置RDS. 部署网站. 注册阿里云账号 在主页点击注册 填入相应的信息 领取及配置ECS 注册后领取免费的ECS,RDS. 打开控制台 ...
- c# 常见文件操作