网络存储/文件共享
SCSI Small Computer System Interface小型计算机系统接口(英语:Small Computer System Interface; 简写:SCSI),一种用于计算机和智能设备之间(硬盘、软驱、光驱、打印机、扫描仪等)系统级接口的独立处理器标准。 SCSI是一种智能的通用接口标准。
SCSI 协议
SCSI协议主要是在主机和存储设备之间传送命令、状态和块数据。在各类存储技术中,SCSI协议可谓是最重要的脊梁。 操作系统对外部设备(如磁盘、磁带、光存储、打印机和扫描仪)的I/O操作,可以通过SCSI协议来实现,一般情况下SCSI协议都嵌入到设备驱动器或者主机适配器的板载逻辑中。 因为SCSI协议层位于操作系统和外部资源之间,它具有不同的功能组件。例如,应用程序一般将数据作为文件或者记录来访问。尽管数据最终都将在磁盘或者磁带介质上以数据块的方式存放,但是文件的检索需要一系列功能将未加工的块数据装配成应用程序能够操作的连续文件。 (SCSI协议可以理解它为块级别的存储协议。它是一种I/O技术,让数据以块的方式进行传输的一种协议规范。这个术语也常被用来指称运行该协议的并行线缆机制,将磁盘和磁带设备连接到应用服务器上的一种总线机制 。) (SCSI 实现了一种客户机/服务器风格的通信架构。发起者向目标设备发送命令请求。该目标处理此请求并向发起者返回响应。发起者可以是托管计算机中的一个 SCSI 设备,而 SCSI 目标则可以是一个磁盘、光盘和磁带设备或特殊设备)
SCSI通信模型:
SCSI通信过程:
SCSI 协议模型
为了便于实现和理解SCSI的各个协议,SCSI 采取了分层结构。 SCSI 大致可分为三层,即SCSI应用层,SCSI 传输层和SCSI 互连层。 SCSI中的各个具体协议一般都位于其中的某一层,可以可能跨越两层。
- 应用层,SCSI 体系结构把发起方(主机)和目标方(如磁盘)的通信定义为客户/服务器交换。SCSI 客户位于主机中,代表上层应用程序,文件系统和操作系统I/O请求。 SCSI 设备服务器位于目标设备中,对请求做出响应。客户/服务器请求和响应通过某种形式的底层协议进行传输。
- 传输协议层,SCSI 设备之间通过一系列的命令实现数据的传送,大致分成三个阶段:命令的执行,数据的传送和命令的确认。
- SCSI 互联层完成SCSI设备对总线的连接以及发送方和目标方的选择等功能。
scsi总线
把磁盘和磁带设备连接到应用服务器或文件服务器,最常用的方法就是通过传统的 SCSI总线。尽管 SCSI主要是一个块协议,但这个术语也被用来指称运行该协议的并行线缆机制。 最初的 SCSI物理层传输介质是一种并行电缆,由 8根数据线和一些控制线构成。在每个发送时钟里传输 8 位数据,传输速率相对说来是比较高的;但是由于电气方面的问题,使得多数SCSI设备所允许的传输距离被限制在 15-25 m左右。随着时间的推移,SCSI 并行总线的性能一直在提高,并通过提供更多的数据通路 (例如采用 16 位数据线和32位数据线)和更快的时钟,得到了更大的带宽。 作为一种介质,SCSI定义了一个并行总线,用于数据传输和通信控制。总线本身可以是印制导线的形式,也可以是一根电缆。外部 SCSI设备使用电缆以菊花链的形式连接到服务器上的控制器。在菊花链中,每个设备都跟其他设备串接。由于这个原因,外部 SCSI设备典型地都有两个 SCSI连接器,可以分别连接到链中的前一个设备和后一个设备。现在的一个 SCSI 总线可以连接多至 16个设备。其中包括1 个SCSI控制器和 15个存储装置。 SCSI链的最后一个SCSI设备要用终结器,中间设备是不需要终结器的。一旦中间设备使用了终结器,那么SCSI卡就无法找到以后的SCSI设备了。而如果最后一个设备没用终结器,SCSI也是无法正常工作的。终结器是由电阻组成的,位于SCSI总线的末端,用来减小相互影响的信号,维持SCSI链上的电压恒定。
SCSI 类型
SCSI有三个基本规范:
- SCSI-1:SCSI-1是在1986年开发的原始规范,现已不再使用。它规定总线宽度为8位,时钟速度为5MHz。
- SCSI-2:1994年采用,此规范包括通用指令集(CCS)——支持任何SCSI设备所必需的18个命令。在此规范中,可以选择将时钟速度提高一倍,达到10MHz(Fast),将总线宽度增加为原来的两倍,即16位,将设备数增加为15个(Wide),或者同时实现上述两种升级(Fast/Wide)。SCSI-2还增加了命令队列,允许设备存储命令,并从主机排列命令优先级。
- SCSI-3:此规范于1995年正式出台,包括一系列较小范围的标准。涉及SCSI并行接口(SPI)的一组标准在SCSI-3中得到了继续发展,SPI是SCSI设备之间的通信方式。大多数SCSI-3规范都以Ultra开头,如Ultra for SPI规范、Ultra2 for SPI-2规范和Ultra3 for SPI-3规范。名称中的Fast和Wide的含义与SCSI-2中的一样。SCSI-3是当前正在使用的标准。
所有这些SCSI类型都是并行的——数据通过总线同时传输,而不是一次传输一种数据。最新的SCSI类型称为串行连接SCSI(SAS:Serial Attached SCSI),这种连接使用SCSI命令,但以串行方式传输数据。SAS使用点对点串行连接,以3.0千兆位每秒的速度传输数据,每个SAS端口可以支持多达128个设备或扩展设备。
工作流程:
iSCSI系统由SCSI适配器发送一个SCSI命令。 命令封装到TCP/IP包中并送入到以太网络。 接收方从TCP/IP包中抽取SCSI命令并执行相关操作。 把返回的SCSI命令和数据封装到TCP/IP包中,将它们发回到发送方。 系统提取出数据或命令,并把它们传回SCSI子系统。 通过iscsi实现存储共享,创建IQN用于识别启动器和目标,然后建立tpg共享存储组,设置相应的访问控制权限,然后在共享存储组添加lun逻辑单元(存储设备),然后建立实现共享portals入口(ip port)3260
概念:
- TPG:共享存储组,某个特定iSCSI目标要侦听的接口IP地址和TCP端口的集合。可以将目标配置添加到TPG以协调多个LUN的设置。
- ACL:访问权限控制列表,一种使用节点IQN(通常是启动器名称)来验证启动器的访问权限的访问限制
- IQN:iSCSI限定名称,全球唯一名称,用于以强制命名格式来识别启动器和目标。
IQN格式如下: iqn.YYYY-MM.com.reversed.domain[:optional_string] - iqn:表示此名称使用域为标识符。
- YYYY-MM:表示拥有域名的年月时间。
- com.reversed.domain:拥有此iSCSI组织的逆向域名
- :optional_string:以冒号为前缀的可选字符串,全球唯一,由域所有者分配,其中可包含冒号为分割符的组织边界
- LUN:逻辑单元号,带有编号的块设备,连接到目标且通过目标来使用。可以有一个或多个LUN连接到单个目标,但通常一个目标提供一个LUN
- portals入口:目标或启动器上用于建立的IP地址和端口。 3260
目标端的配置使用targetcli命令
targetcli 菜单结构详解 /> ls
o- / … […] o- backstores … […] 后备存储 | o- block … [Storage Objects: 2] 块设备 | | | o- LUN1 … [/dev/sdb (10.0GiB) write-thru deactivated] | o- fileio … [Storage Objects: 0] 文件存储 | o- LUN0 … [/dev/sda5 (17.8GiB) write-thru deactivated] | o- pscsi … [Storage Objects: 0] 物理scsi | o- ramdisk … [Storage Objects: 0] 闪存 o- iscsi … [Targets: 2] 通过2create创建,两个分别将sdb sda5 共享出去 | o- iqn.2003-01.org.linux-iscsi.mail.x8664:sn.138cf1e3c10f … [TPGs: 1] 字符串 | | o- tpg1 … [no-gen-acls, no-auth] 共享存储的组 | | o- acls … [ACLs: 0] | | o- luns … [LUNs: 0] | | o- portals … [Portals: 1] | | o- 0.0.0.0:3260 … [OK] | o- iqn.2003-01.org.linux-iscsi.mail.x8664:sn.35c71b41d217 … [TPGs: 1] | o- tpg1 … [no-gen-acls, no-auth] | o- acls … [ACLs: 0] | o- luns … [LUNs: 0] | o-. portals … [Portals: 1] | o- 0.0.0.0:3260 … [OK] o- loopback … [Targets: 0]
实现
首先准备一块硬盘,并进行分区 如下: 安装软件
[root@redhat ~]
mount: /mnt: WARNING: device write-protected, mounted read-only.
[root@redhat ~]
配置 使用targetcli命令
[root@redhat ~]
targetcli shell version 2.1.53
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
/> ls
o- / ............................................................................... [...]
o- backstores .................................................................... [...]
| o- block ........................................................ [Storage Objects: 0]
| o- fileio ....................................................... [Storage Objects: 0]
| o- pscsi ........................................................ [Storage Objects: 0]
| o- ramdisk ...................................................... [Storage Objects: 0]
o- iscsi .................................................................. [Targets: 0]
o- loopback ............................................................... [Targets: 0]
块设备下添加逻辑单元,并指定dev和name
/> cd backstores/block
/backstores/block> create
dev= name= readonly= wwn=
/backstores/block> create dev=/dev/sda1 name=lu0
Created block storage object lu0 using /dev/sda1.
/backstores/block> create dev=/dev/sda2 name=lun1
Created block storage object lun1 using /dev/sda2.
/backstores/block> ls
o- block ............................................................ [Storage Objects: 2]
o- lu0 ..................................... [/dev/sda1 (5.0GiB) write-thru deactivated]
| o- alua ............................................................. [ALUA Groups: 1]
| o- default_tg_pt_gp ................................. [ALUA state: Active/optimized]
o- lun1 .................................... [/dev/sda2 (5.0GiB) write-thru deactivated]
o- alua ............................................................. [ALUA Groups: 1]
o- default_tg_pt_gp ................................. [ALUA state: Active/optimized]
设置iscsi共享目录,添加共享存储组
/> cd iscsi
/iscsi> ls
o- iscsi .................................................................... [Targets: 0]
/iscsi> create
Created target iqn.2003-01.org.linux-iscsi.redhat.x8664:sn.3b8b5f5655e0.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
/iscsi> create iqn.2021-08.localdomain.redhat.x8664:sn.12345678
Created target iqn.2021-08.localdomain.redhat.x8664:sn.12345678.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
/iscsi> ls
o- iscsi .................................................................... [Targets: 2]
o- iqn.2003-01.org.linux-iscsi.redhat.x8664:sn.3b8b5f5655e0 .................. [TPGs: 1]
| o- tpg1 ....................................................... [no-gen-acls, no-auth]
| o- acls .................................................................. [ACLs: 0]
| o- luns .................................................................. [LUNs: 0]
| o- portals ............................................................ [Portals: 1]
| o- 0.0.0.0:3260 ............................................................. [OK]
o- iqn.2021-08.localdomain.redhat.x8664:sn.12345678 .......................... [TPGs: 1]
o- tpg1 ....................................................... [no-gen-acls, no-auth]
o- acls .................................................................. [ACLs: 0]
o- luns .................................................................. [LUNs: 0]
o- portals ............................................................ [Portals: 1]
o- 0.0.0.0:3260 ............................................................. [OK]
进入tpg1配置权限
/iscsi> cd iqn.2003-01.org.linux-iscsi.redhat.x8664:sn.3b8b5f5655e0/tpg1
/iscsi/iqn.20...5f5655e0/tpg1> set attribute authentication=0 demo_mode_write_protect=0 generate_node_acls=1 cache_dynamic_acls=1
Parameter authentication is now '0'.
Parameter demo_mode_write_protect is now '0'.
Parameter generate_node_acls is now '1'.
Parameter cache_dynamic_acls is now '1'.
添加第一共享的分区lun0
/iscsi/iqn.20...5f5655e0/tpg1> cd luns
/iscsi/iqn.20...5e0/tpg1/luns> create /backstores/block/lu0
Created LUN 0.
修改第二个共享存储组的配置信息 进入tgp1修改权限
/> cd iscsi/iqn.2021-08.localdomain.redhat.x8664:sn.12345678/tpg1
/iscsi/iqn.20...12345678/tpg1> set attribute authentication=0 demo_mode_write_protect=0 generate_node_acls=1 cache_dynamic_acls=1
Parameter authentication is now '0'.
Parameter demo_mode_write_protect is now '0'.
Parameter generate_node_acls is now '1'.
Parameter cache_dynamic_acls is now '1'.
进入luns共享目录,将第二个存储单元共享出去
/iscsi/iqn.20...12345678/tpg1> cd luns
/iscsi/iqn.20...678/tpg1/luns> create /backstores/block/lun1
Created LUN 0.
进入portals修改入口
/iscsi/iqn.20...678/tpg1/luns> cd..
/iscsi/iqn.20...12345678/tpg1> cd portals
/iscsi/iqn.20.../tpg1/portals> delete 0.0.0.0 3260
Deleted network portal 0.0.0.0:3260
/iscsi/iqn.20.../tpg1/portals> create 192.168.159.128 3261
Created network portal 192.168.159.128:3261.
ls查看
退出
/> exit
Global pref auto_save_on_exit=true
Configuration saved to /etc/target/saveconfig.json
重启服务、关闭防火墙、关闭selinux
[root@redhat ~]
[root@redhat ~]
[root@redhat ~]
通过Windows访问iscsi
搜索这个程序 点开点击发现,然后点击发现门户 输入共享的IP地址点击确定 发现目标 进行连接 点击确定 使用 点击计算机的管理中的磁盘管理就会发现共享的磁盘点击确定使用默认的格式,
当前还不可用,右击磁盘进行新建简单卷 一直右击下一页默认即可,最后点击完成 当前就可用了 这个盘是Linux基于windows进行创建共享的,使用的话,还是相当于使用Windows的盘 如果要取消共享的话不要直接断开连接,如果分区里面有数据则清除数据 然后在删除卷,再然后就是在发起程序中执行打开连接
通过Linux客户端访问
装包
[root@bogon ~]
关闭防火墙、关闭selinux
[root@bogon ~]
[root@bogon ~]
发现目标
[root@bogon ~]
192.168.159.128:3261,1 iqn.2021-08.localdomain.redhat.x8664:sn.12345678
192.168.159.128:3260,1 iqn.2003-01.org.linux-iscsi.redhat.x8664:sn.3b8b5f5655e0
连接指定的共享存储设备
这块特别注意必须关闭防火墙和selinux,否则无法连接
[root@bogon ~]
通过lsblk查看共享的块设备
|