python写的一个iscsi target端。(Linux内核版的有IET了, Windows版的Windows Storage带了,就用python写吧,呵呵)。源码和Windows下可执行档都在:
目前最新版: pyTarget-1.5.4, 非常欢迎大家参与讨论以及改进!
一、目前支持如下功能:
1、 支持多Target,多Session, 多Connect (MC/s)
2、 各个Target可以配置独立的协商关键字,相互独立
3、 支持通过Text来协商关键字
4、 支持Initiator/Target多端CHAP认证
5、 支持Login时通过C_Bit连包
6、 支持Header及Data Digest
7、 Lun设备是采用文件模拟方式
8、 所有配置都过xml文件形式保存,方便修改及阅读
9、 支持模拟各种暂时/永久SCSI磁盘错误
10、支持模拟磁盘plist,glist坏块查询
11、支持坏块重映射Reassign_blocks
12、支持Start_Stop_Unit启停设备
13、支持SES
14、支持在线Web管理(如添加Target,等)
15、支持高级错误恢复(ERL=2)
16、支持VTL(虚拟磁带库)
17、支持高级错误恢复(ERL=2)
18、支持iSNS(SCN, ESI)
19、其它
二、安装与配置:
如果你下载的是Windows下二进制可执行包,可直接执行。
如果直接运行python源码,需要安装python 2.6.1运行环境。
三、配置说明:打开编辑 config.xml文件
1.
# ip为空表示侦听本机所有IP中的指定port, 如果指定了ip, 则只侦听该IP。
# debug_level控制调试信息显示等级,如果嫌console打得太多,就把值改小点,文件里有详细说明。
2.
# 配置Target, name为TargetName,ip, port及portal组成TargetAddress, 这些Initiator Discovery时
# 会返回给Initiator
3.
# 配置host, host附属于Target,name为IQN, target_pwd为Login时Target端认证密码,initiator_pwd为
# Initiator端身份认证密码,为空时不进行CHAP认证。
4.
# 配置Lun, lun附属于host, Initiator用哪个IQN登陆,会连接到相应的host,同时能看到该host下的所有
# Lun设备。 id为Lun ID号,host内独立; type为Lun类型,0为Disk, 1为Tape,path为模拟Lun设备的文件名; capability为设定Lun设备容量,
# 单位为block,1M=2*1024=2048
5.
# 这些为iSCSI Login协商关键字,附属于Target, 看看RFC3720吧,照着协议实现的。
# MaxConnections,InitialR2T,ImmediateData, FirstBurstLength
# MaxBurstLength,MaxRecvDataSegmentLength 这几个比较好玩。
四、实际应用
1、由于python的本质决定了,这不是一个高效能的iscsi target
2、Initiator与Target最好分开在两台机器上
3、提供这么多功能,如果当成个测试功具,应该是个不错的选择。当然,你也可根据需要来进行修改。
4、如果你了解协议,大部修改都相当容易。比如你想让一个Lun变成只读的,只须增加两行:
在scsi_lib.py的__ModeSenseRsp(cmd)函数中增加两行(注释那两行):
5、其它一些功能,像快照之类的,都相当好实现。
阅读(1305) | 评论(4) | 转发(0) |