从应用的视角,iscsi展现为一个块设备,即一块硬盘。在Linux操作系统中可以通过fdisk -l
看到这块磁盘。iscsi协议所涉及的一系列的组件经过层层虚拟化,在多个层次上其操作与本地硬盘无异。这实际上是一个性能、可靠性、实现多个角度权衡的结果。事实上,在所经历的各层次中,有一些次层对于iscsi磁盘来说是多余的,但操作系统的设计者为了共用SCSI实现层,将scsi initiator对接到SCSI中间层以下,作为一个scsi传输层实现。因此,自scsi层以上,iscsi提供的块设备与sas、SATA提供的块设备所经历的IO流转一致。
本文所涉及的iscsi集中考虑iscsi协议承接块设备应用说起。事实上,iscsi作为一个承载SCSI协议的传输层,除能够支持基于磁盘价值的块设备外,还可以支持其他的SCSI设备。比如磁 带、CDROM。业界也有通过iscsi实现为磁带的应用,如VTL。虚拟为其他设备时,其IO流转略有区别。scsi子系统通过
INQUIRY
探测LUN的设备类型,进而由上层驱动“认领”对应的设备。
用户的数据在initiator节点上依次经过文件系统层、块设备层、SCSI层。理论上我们也可以将通过裸scsi设备直接发送IO相关SCSI指令到SCSI中间层,但这条路径的初衷并非如此,没有针对IO处理进