iSCSI initiator软件架构

SCSI分层

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


iSCSI initiator软件架构_第1张图片
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软件架构

iSCSI initiator软件架构_第2张图片
软件架构

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通信

你可能感兴趣的:(iSCSI initiator软件架构)