1. 簡介
Linux通用的SCSI 目標子系統(SCST)是一個為Linux SCSI目標子系統的另一種實現。它是由英國著名存儲開發團隊ID7研發,目前由SanDisk管理(收購了Fusion IO)。它的出現要早於LIO,功能也比LIO完善,目前的用戶是許多提供存儲解決方案的大公司如EMC,IBM,HP采用。它提供Linux內核之間和處理和SCSI目標驅動程序的統一的,一致的接口,同時提供Linux內核與存儲后端句柄連接,連接真實或模擬的存儲后端與目標驅動程序。SCST支持主流的SCSI數據傳輸方式,包括光纖通道,iSCSI,SAS,InfiniBand和並行(寬)的SCSI。
2. 架構
虛線上方主要是用戶態管理工具,scst core實現在內核中,中間藍色為核心子系統(位於SCSI top layer),其代碼框架設計合理,將target具體驅動封裝成可注冊的插件驅動,如我們經常會用到的就是iscsi-scst插件,通過這個驅動程序我們可以在以太網上做iscsi協議的訪問,即iscsi over tcp/ip,后續會繼續分析initiator端開源驅動open-iscsi,再詳細介紹iscsi協議。
同時,除了必備的target插件驅動,scst內核核心系統也支持了幾個存儲設備驅動,從外部使用上就是我們經常在配置scsi設備導出時可選擇的導出方式,比如blockio 或者 fileio導出,或者 pass through,這幾種導出方式在scst 內核其實是由幾個專用的存儲驅動完成的,它們也實現為可注冊插件的形式。
SCST core:實現了協議無關的SCSI處理功能。
Target drivers:實現了SCSI協議的傳輸層功能。
Storage drivers:實現了SCST的后端存儲驅動
3. 安裝、使用和配置
3.1 安裝
1)下載源碼,因為scst的代碼使用svn托管在sourceforge上,所以需要安裝svn軟件
svn co https://scst.svn.sourceforge.net/svnroot/scst/trunk scst
2)准備kernel,因為scst沒有加入到linux的內核中,所以為了達到很好的性能,需要在向內核中打入scst自己的patch並重新編譯內核。
-
-
-
-
-
Select Networking support -> Networking options -> TCP/IP networking
-
Select Networking support -> Networking options -> TCP/IP zero-copy transfer completion notification
-
Select Device Drivers -> SCSI device support -> SCSI disk support
-
Select Enable the block layer -> IO Schedulers -> CFQ I/O Scheduler
-
Set Enable the Block layer -> IO Schedulers -> Default I/O Scheduler to 'CFQ'
-
Set Processor type and features -> Preemption Model to 'No Forced Preemption (Server)'
-
-
-
-
-
-
3)編譯安裝
-
# make 2perf
-
# make scst scst_install -j24
-
# make iscsi iscsi_install -j24
-
# make scstadm scstadm_install -j24
-
<pre name="code" class="plain">
-
-
-
-
-
isert_scst 51996 4
-
iscsi_scst 92286 5 isert_scst
-
scst_vdisk 93522 0
-
scst 869809 2 iscsi_scst,scst_vdisk
-
rdma_cm 44234 2 isert_scst,ib_iser
-
ib_core 88413 7 isert_scst,ib_iser,rdma_cm,ib_cm,iw_cm,ib_sa,ib_mad
-
libcrc32c 12644 4 iscsi_scst,scst_vdisk,dm_persistent_data,xfs
-
1a) 創建block設備
-
scstadmin -open_dev disk03 -handler vdisk_blockio -attributes filename=/dev/sdc1
-
1b) 創建target
-
scstadmin -add_target iqn.2011-08.nl.feka:storage.vdisk1 -driver iscsi
-
1c) 創建lun
-
scstadmin -add_lun 0 -driver iscsi -target iqn.2011-08.nl.feka:storage.vdisk1 -device disk03
-
1d) 啟動target
-
scstadmin -enable_target iqn.2011-08.nl.feka:storage.vdisk1 -driver iscsi
-
1e) 使用iscsi driver
-
scstadmin -set_drv_attr iscsi -attributes enabled=1
-
1f) 寫入配置文件
-
scstadmin -write_config /etc/scst.conf
2)通過配置文件配置
# cat /etc/scst.conf
-
HANDLER vdisk_blockio {
-
DEVICE disk01 {
-
filename /dev/iscsilun/iscsilun0
-
}
-
DEVICE disk02 {
-
filename /dev/iscsilun/iscsilun1
-
}
-
}
-
TARGET_DRIVER iscsi {
-
enabled 1
-
TARGET iqn.2007-05.com.example:storage.disk1.scst.jevon {
-
LUN 0 disk01
-
LUN 1 disk02
-
enabled 1
-
}
-
}
-
# /etc/init.d/scst start
-
# iscsi-scstd
注意如果改變了scst的配置一定要重啟scst。
3.3 使用
按照以上的配置,你可以得到一個iscsi target。通過iscsiadm就可以訪問這個target,具體訪問方式在之前的文章已經介紹過,這里就不再贅述了。