iSCSI initiator软件架构

SCSI分层

Linux内核中SCSI代码结构分为三层,它们和块设备驱动的关系如下图所示:


SCSI分层

iscsi initiator要实现SCSI底层,即负责将scsi命令封装成网络报文发送给target。

Open-iSCSI

Open-iSCSI 是Linux内核支持的标准iSCSI Initiator,它包括:

  • 用户态下的iscsid, iscsiadm等工具
  • 内核模块iscsi_tcp.ko, libiscsi_tcp.ko, libiscsi.ko, scsi_transport_iscsi.ko
  • /etc/iscsi/initiatorname.iscsi和/etc/iscsi/iscsid.conf

iscsid守护进程

iscsid主要负责根据配置在系统启动时发起到target的登录,在 /var/lib/iscsi/send_targets 目录下包含iSCSI portals的配置信息,每个portal对应一个文件,例如192.168.36.212,3260

iscsiadm

用来管理(更新、删除、插入、查询)iSCSI配置数据库文件的命令行工具,能够对iSCSI nodes、sessions、connections和discovery records进行一系列的操作

Open-iSCSI软件架构

软件架构

Open-iSCSI的整个流程为

  1. iscsid守护进程读取配置文件,创建本地socket和netlink socket
  2. 执行Iscsiadm命令,通过本地socket连接iscsid
  3. iscsid建立和target之间的TCP connection,完成login
  4. iscsid通过netlink socket通知内核,进入iSCSI内核代码
  5. iSCSI触发Linux的通用SCSI层以及块设备层,向内核中注册块设备/dev/sdb及其request queue
  6. 用户访问块设备时,通过request queue的回调函数进入SCSI通用层,最后调用iSCSI注册的回调函数
  7. iscsi_tcp.ko完成和target之间的TCP通信
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容