iSCSI Targets on Linux

最近在研究 iSCSI Multipathing (DM Multipath) 因为需要了解 iSCSI 的工作方式,自己在 Linux 服务器上搭了 iSCSI Target 而不是图方便用 FreeNASOpenfiler 这样的 NAS 发行版。

目前 Linux 上主要有三个 iSCSI Target 实现:

  • Linux SCSI Target - STGT / tgt
  • Linux-IO Target - LIO
  • SCST - Generic SCSI Subsystem for Linux

Linux 2.6.38 为分界线,在此之前的标准是 Linux SCSI Target - STGT 之后迄今为止的标准是 Linux-IO Target - LIO 确切的说 Linus Torvalds 在 2011年1月15日将 LIO SCSI Target engine merge 到 Linux 2.6.38 中。

LIO 及其管理工具 targetcli 是由 Detera 这个公司开发和维护的。

SCST 更像是一个编外小众实现,主要由 Fusion-io 的某个工程师在维护。

这里是一个 SCST | STGT | IET | LIO/TCM 特性的比较 Feature Comparison between Linux SCSI Targets

目前 RHEL 7 / CentOS 7 / Oracle Linux 7 默认使用的是 LIO 实现,使用 targetcli 作为管理工具,是一个 Python 写的交互 shell 操作起来还算方便。被替代的 STGT 已经被踢到 EPEL for EL 7 里了。要安装的话得启用 EPEL 然后 yum install scsi-target-utils 这个包,做相关的配置配置,就不多说了。

推荐使用 LIO + targetcli ;-D

补充一下 Linux-IO / LIO 和传统的 STGT / tgt 还有 SCST 是不同的,没有服务重启的概念。其配置是用 targetcli 命令行工具通过 ConfigFS (一种 RAM-based 文件系统,类似于 sysfs 但用途不一样,两者是互补的)来和内核 API 交互。

ConfigFS 通常挂载为 /sys/kernel/config ;-D

NOTE: ConfigFS 是在 user-space 创建,管理和销毁内核对象。而 sysfs 是在 user-space 查看,操作由 kernel space 创建和销毁的对象。