前言:SCST是一个老版本的linux target实现了,现在基本已经被LIO取代
这是一个非常快速的HOWTO,旨在提供有关如何设置和配置iSCSI-SCST的快速参考。有关更深入的信息,请参阅SCST和iSCSI-SCST README文件。
使用scstadmin安装和使用iSCSI-SCST
==============================================
1.下载,构建和安装iSCSI-SCST。
首先下载iSCSI-SCST源代码。您可以从以下URL下载已发布的版本:
或者您可以通过在shell中运行以下命令来下载最新的开发版本:
虽然SCST和iSCSI-SCST与未修补的Linux内核一样可以与其他开源iSCSI目标具有相同或更快的速度,但如果您想获得更好的性能,则需要修补和重建内核。根据内核版本选择补丁(下例中为2.6.38.x):
cd /usr/src/kernels/linux-2.6.38.8
patch -p1 <$ HOME / scst / iscsi-scst / kernel / patches / put_page_callback-2.6.38.patch
make clean
如果你的内核找不到put_page_callback,那么就不需要修补了,所以你可以跳过这个和下一个(内核重建和重启)步骤。
接下来,构建并安装内核:
make && make modules
make modules_install && make install
对于某些Linux发行版(例如Ubuntu),上述步骤不会重建初始RAM磁盘。确保在重新引导之前重新生成RAM磁盘。请查看随发行版提供的update-initrd,update-initramfs或mkinitrd命令的文档。
现在重新启动系统,以便加载新构建的内核。
一旦系统再次启动并运行,下一步就是构建并安装SCST,iSCSI-SCST和scstadmin。对于大多数发行版(包括RHEL 6),您可以通过从SCST目录运行以下命令来执行此操作:
make 2release
make scst scst_install iscsi iscsi_install scstadm scstadm_install
使用RHEL 5或CentOS 5时,请改用以下命令:
make 2release
make enable_proc
make scst scst_install iscsi iscsi_install scstadm scstadm_install
iSCSI-SCST包括以下组件:
*内核模块:iscsi-scst.ko scst.ko scst_vdisk.ko
* iscsi-scstd - 守护进程
*手册
*删除位于 iscsi-scst/etc/obsolete下的配置文件,如果你想使用它们需要复制到/etc。在iSCSI-SCST 2.0中,建议使用scstadmin和SCST sysfs接口:
* initiators.allow - 用于为目标分配特定的启动器
* initiators.deny - 用于为目标分配特定的启动器
* iscsi-scstd.conf - 目标及其属性列表
2.设置/etc/scst.conf
scst.conf配置文件由系统引导时由shell脚本/etc/init.d/scst通过scstadmin加载。target,device 和LUN配置在此文件中定义。
通常,SCST及其组件(包括iSCSI-SCST)是内核模块,因此它们使用内核接口来配置sysfs。但是,直接使用sysfs接口很麻烦。 Scstadmin实用程序允许使用常规纯文本界面。您可以使用“scstadmin -config”将配置文件加载到SCST sysfs中,并使用“scstadmin -write_config”将当前运行的配置保存到scst.conf中。
如果要直接使用SCST sysfs接口,请参见下面的第二部分。
这是示例配置文件。将其复制到/etc/scst.conf中
HANDLER vdisk_fileio {
DEVICE disk01 {
filename / dev / ram0
nv_cache 1
}
DEVICE disk02 {
filename / dev / ram1
nv_cache 1
}
}
TARGET_DRIVER iscsi {
enabled 1
TARGET iqn.2006-10.net.vlnb:tgt {
LUN 0 disk01
LUN 1 disk02
enabled 1
}
}
请注意,对于每个启动器,LUN 0必须存在,因此您无法在没有LUN 0的情况下创建目标和启动程序组。这是SCSI协议所必需的,并且还记录在SCST的README文件中。
然后启动scst和iscsi-scst服务运行以下命令:
/etc/init.d/scst start
您现在应该拥有可用的iSCSI-SCST。如果以后需要更改scst.conf并重新加载它,可以直接运行scstadmin:
scstadmin -config /etc/scst.conf
或重新启动SCST:
/etc/init.d/scst restart
如果需要在重新引导时自动配置SCST,请执行以下步骤。
3.在/etc/init.d中创建软链接
这将使SCST在系统引导时自动启动。使用chkconfig或update-rc.d,具体取决于您使用的Linux发行版。对于Debian系统(如Ubuntu)的示例:
update-rc.d scst默认值
在openSUSE上,您可以通过以下命令让SCST自动启动:
insserv scst
4.重新启动SCST和iSCSI-SCST
如果您现在不想重新启动,可以通过以下命令使上述设置生效:
/etc/init.d/scst restart
不使用scstadmin via / sys接口安装和使用iSCSI-SCST
================================================== ========================
Scstadmin 应该足够您做基础的操作。仅当您需要为scstadmin执行过于高级的操作时才使用这些步骤。例如,保持配置是数据库而不是普通文件。
在iSCSI-SCST系统中,三个组件进行交互以将设备和文件系统导出到远程主机上的iSCSI启动器:Target,LUN和设备。 Target表示主机,并充当LUN的容器。 LUN(逻辑单元号)表示设备的地址,并为启动器提供访问控制,以及充当设备的容器。设备表示您希望提供给启动器的实际块设备或文件系统。您必须先创建目标,然后创建LUN,然后将LUN分配给目标,然后定义设备并将其分配给LUN。最后,您必须启用目标和SCST系统。完成步骤(如下)后,您应该能够从授权的远程启动器中查找和访问导出的设备。
首先在第一部分重复步骤1,但在步骤1中从make命令中省略“scstadm scstadm_install”。
接下来加载所需的内核模块,如下所示:
modprobe scst_disk
modprobe scst_vdisk
modprobe iscsi-scst
模块scst_disk允许以直通模式导出本地SCSI(SAS等)设备,scst_vdisk允许基于文件和块设备创建虚拟LUN,模块iscsi-scst是主要的iSCSI-SCST模块。
然后运行iSCSI-SCST用户空间服务:iSCSI的scstd
创建目标
----------------
echo“add_target iqn.2007-05.com.example:storage.iscsi-scst-1”> / sys / kernel / scst_tgt / targets / iscsi / mgmt
这将添加目标iqn.2007-05.com.example:storage.iscsi-scst-1。
改变目标的参数
----------------------------
echo“8192”> /sys/kernel/scst_tgt/targets/iscsi/iqn.2007-05.com.example:storage.iscsi-scst-1/MaxRecvDataSegmentLength
这会将目标iqn.2007-05.com.example:storage.iscsi-scst-1的MaxRecvDataSegmentLength参数更改为8192。
您可以通过以下方式阅读:
#cat /sys/kernel/scst_tgt/targets/iscsi/iqn.2007-05.com.example:storage.iscsi-scst-1/MaxRecvDataSegmentLength
8192
[key]
标记“[key]”显示高级管理工具,如scstadmin,该属性没有默认值。你可以忽略它。
添加虚拟磁盘设备
-----------------
dd if = / dev / zero of = / disk1 bs = 1M count = 1024
这将为我们未来的虚拟设备disk1创建后端文件/ disk1。
echo“add_device disk1 filename = / disk1; nv_cache = 1”> / sys / kernel / scst_tgt / handlers / vdisk_fileio / mgmt
这将添加新的FILEIO设备disk1,其中启用了后端文件/ disk1和NV_CACHE选项。
对于块设备,通常使用BLOCKIO处理程序更有效:
echo“add_device dev1 filename = / dev / dev1”> / sys / kernel / scst_tgt / handlers / vdisk_blockio / mgmt
列出当前注册的SCST设备
-----------------------------------------
您可以看到可用设备列表:
# ls -1 /sys/kernel/scst_tgt/devices
0:0:0:0
1:0:0:0
3:0:0:0
3:0:0:1
3:0:0:2
3:0:0:3
3:0:0:4
3:0:0:5
3:0:0:6
3:0:0:7
2:0:0:0
4:0:0:0
4:0:0:5
4:0:0:6
4:0:0:7
4:0:0:8
4:0:0:9
4:0:1:0
4:0:1:1
4:0:1:2
4:0:1:3
4:0:1:4
5:0:0:0
5:0:0:5
5:0:0:6
5:0:0:7
5:0:0:8
5:0:0:9
5:0:1:0
5:0:1:1
5:0:1:2
5:0:1:3
5:0:1:4
disk1
定义LUN掩码
--------------------
LUN掩码定义了哪个启动器可以看到哪些LUN。
要将特定LUN与目标iqn.2007-05.com.example:storage.iscsi-scst-1关联,请执行以下操作:
echo“add 4:0:0:8 0”> /sys/kernel/scst_tgt/targets/iscsi/iqn.2007-05.com.example:storage.iscsi-scst-1/luns/mgmt
这将为pass-through设备4:0:0:8分配LUN 0到目标iqn.2007-05.com.example:storage.iscsi-scst-1。
请注意,每个组必须具有LUN 0。这是SCSI要求(在SCST的自述文件中有记录)。
echo“add disk1 1 read_only = 1”> /sys/kernel/scst_tgt/targets/iscsi/iqn.2007-05.com.example:storage.iscsi-scst-1/luns/mgmt
这会将虚拟设备disk1的只读LUN 1分配给目标iqn.2007-05.com.example:storage.iscsi-scst-1。
从组中删除LUN
---------------------------
运行以下命令:
echo“del X”> /sys/kernel/scst_tgt/targets/iscsi/iqn.2007-05.com.example:storage.iscsi-scst-1/luns/mgmt
这将从目标iqn.2007-05.com.example:storage.iscsi-scst-1中删除LUN X.
有关LUN屏蔽的更多信息,请参阅SCST README,“访问和设备可见性管理(LUN屏蔽)”部分。
启用目标
----------------
创建并配置目标后,应启用它:
echo 1> /sys/kernel/scst_tgt/targets/iscsi/iqn.2007-05.com.example:storage.iscsi-scst-1/enabled
然后启用iSCSI-SCST驱动程序:
echo 1> / sys / kernel / scst_tgt / targets / iscsi / enabled
将目标分配给特定的启动器
----------------------------------------
为了将目标分配给特定的启动器,您应该使用上面定义的LUN掩码。如果将启动器分配给目标的空安全组,则启动器将不会在SendTargets发现中看到此目标,并且将无法连接到该目标。
此外,您可以使用allowed_portal sysfs属性仅通过选定的门户网站使目标可见。阅读iSCSI-SCST的README文件,了解有关此工具的更多详细信息。
不使用scstadmin via / proc接口安装和使用iSCSI-SCST
================================================== =========================
首先重复上一节中的步骤1和2,但在步骤1中从make命令中省略“scstadm scstadm_install”。
接下来设置/etc/iscsi-scstd.conf
你可以这样做,例如运行以下shell命令:
echo“Target $(sed -n's / InitiatorName = // p'/etc/iscsi/initiatorname.iscsi):storage”> /etc/iscsi-scstd.conf
cat /etc/iscsi-scstd.conf
接下来加载scst_disk内核模块,如下所示:
modprobe scst_disk
shell脚本/etc/init.d/iscsi-scst现在可用于启动/停止/重新启动或检查iSCSI-SCST的状态。
选择SCST使用的设备
------------------------------------
您可以看到可用设备列表:
# cat /proc/scsi_tgt/scsi_tgt
Device (host:ch:id:lun or name) Device handler
0:0:0:0 dev_disk
1:0:0:0 dev_disk
3:0:0:0 dev_disk
3:0:0:1 dev_disk
3:0:0:2 dev_disk
3:0:0:3 dev_disk
3:0:0:4 dev_disk
3:0:0:5 dev_disk
3:0:0:6 dev_disk
3:0:0:7 dev_disk
2:0:0:0 none
4:0:0:0 none
4:0:0:5 dev_disk
4:0:0:6 dev_disk
4:0:0:7 dev_disk
4:0:0:8 dev_disk
4:0:0:9 dev_disk
4:0:1:0 dev_disk
4:0:1:1 dev_disk
4:0:1:2 dev_disk
4:0:1:3 dev_disk
4:0:1:4 dev_disk
5:0:0:0 none
5:0:0:5 dev_disk
5:0:0:6 dev_disk
5:0:0:7 dev_disk
5:0:0:8 dev_disk
5:0:0:9 dev_disk
5:0:1:0 dev_disk
5:0:1:1 dev_disk
5:0:1:2 dev_disk
5:0:1:3 dev_disk
5:0:1:4 dev_disk
LUN屏蔽
-----------
SCST定义安全组。对于每个组,您可以添加LUN。
如果要将所有LUN都可用于所有目标,只需将它们添加到“默认”组:
# echo "add 5:0:0:8 0" >/proc/scsi_tgt/groups/Default/devices
# cat /proc/scsi_tgt/groups/Default/devices
Device (host:ch:id:lun or name) Virtual lun Options
5:0:0:8 0
现在,LUN“5:0:0:8”被添加到“默认”组作为LUN#0。
请注意,您必须具有LUN 0.这是SCSI要求(在SCST的README中记录)。
定义LUN掩码
--------------------
要将特定LUN与特定目标关联,请执行以下操作:
*为目标创建一个组:
echo“add_group Default_iqn.2007-05.com.example:storage.iscsi-scst-1”> / proc / scsi_tgt / scsi_tgt
*将LUN添加到组:
echo“add 4:0:0:8 0”> /proc/scsi_tgt/groups/Default_iqn.2007-05.com.example:storage.iscsi-scst-1/devices
这会将LUN“4:0:0:8”分配给目标iqn.2007-05.com.example:storage.iscsi-scst-1。同样,每个组必须具有LUN 0。
从组中删除LUN
---------------------------
运行以下命令:
echo“del 4:0:0:8 0”> /proc/scsi_tgt/groups/Default_iqn.2007-05.com.example:storage.iscsi-scst-1/devices
这将从目标iqn.2007-05.com.example:storage.iscsi-scst-1中删除LUN“4:0:0:8”。
删除组
----------------
运行以下命令:
echo“del_group Default_iqn.2007-05.com.example:storage.iscsi-scst-1”> / proc / scsi_tgt / scsi_tgt
有关LUN屏蔽的更多信息,请参阅SCST README,“访问和设备可见性管理(LUN屏蔽)”部分。
使用iscsi-scstd.conf创建目标
---------------------------------------
创建目标的最简单方法是在/etc/iscsi-scstd.conf中定义它们。可以在etc/ iscsi-scstd.conf中找到一个示例。在启动iSCSI-SCST之前,您需要在/ etc /下使用此文件。
将目标分配给特定的启动器
----------------------------------------
为了将目标分配给特定的启动器,您需要使用/etc/initiators.allow和/etc/initiators.deny。您可以在etc / initiators.allow和etc / initiators.deny中找到示例文件。
请注意,默认情况下所有目标都允许使用所有目标,因此如果要使用/etc/initiators.allow,则需要使用/etc/initiators.deny,如下所示:
ALL ALL
这将拒绝所有启动器对/etc/initiators.allow中定义的启动器的期望。
iscsi-scst-adm的有用示例:
显示特定目标:
# iscsi-scst-adm --op show --tid=1
QueuedCommands=0
显示特定目标的已配置参数:
# iscsi-scst-adm --op show --tid=1 --sid=0
InitialR2T=No
ImmediateData=Yes
MaxConnections=1
MaxRecvDataSegmentLength=2097152
MaxXmitDataSegmentLength=131072
MaxBurstLength=2097152
FirstBurstLength=262144
DefaultTime2Wait=2
DefaultTime2Retain=0
MaxOutstandingR2T=1
DataPDUInOrder=Yes
DataSequenceInOrder=Yes
ErrorRecoveryLevel=0
HeaderDigest=None
DataDigest=None
OFMarker=No
IFMarker=No
OFMarkInt=Reject
IFMarkInt=Reject
略