SCST在SAN网络环境中的应用
2015-08-24 13:53
661 查看
问题描述
在SAN网络环境中,Linux服务器上的SCSI设备,如何通过HBA卡,走光纤网络,让其他的服务器使用到这些设备?本文采用SCST - Generic SCSI Target Subsystem for Linux,试图解决该问题。查看HBA卡的信息
# lspci | grep -i fibre 01:00.0 Fibre Channel: QLogic Corp. ISP2432-based 4Gb Fibre Channel to PCI Express HBA (rev 03) 01:00.1 Fibre Channel: QLogic Corp. ISP2432-based 4Gb Fibre Channel to PCI Express HBA (rev 03)
一块卡上有2个端口。
在/sys/class/fc_host/目录下,可以查看HBA卡信息
# cd /sys/class/fc_host/ # ls host0 host1 # 有两个端口 # cat ./host1/port_name # 查看端口1的名称 0x2101001b3235b031 # cat ./host1/port_state # 查看端口1的状态 Online # cat ./host1/speed # 查看端口1的速率 4 Gbit
通过查看host0,host1目录下的属性文件,可以查看HBA的各种信息。
安装systool工具,可以方便的查看HBA信息,该工具在sysfsutils包中。
# rpm -ivh libsysfs-2.1.0-7.el6.x86_64.rpm # rpm -ivh sysfsutils-2.1.0-7.el6.x86_64.rpm 查看端口名称 # systool -c fc_host -v | grep "port_name" port_name = "0x2100001b3215b031" port_name = "0x2101001b3235b031" 查看端口速率 # systool -c fc_host -v | grep "speed" speed = "unknown" supported_speeds = "1 Gbit, 2 Gbit, 4 Gbit" speed = "4 Gbit" supported_speeds = "1 Gbit, 2 Gbit, 4 Gbit" 查看端口状态 # systool -c fc_host -v Class = "fc_host" ...... Class Device = "host1" Class Device path = "/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.1/host1/fc_host/host1" dev_loss_tmo = "45" fabric_name = "0xffffffff" issue_lip = <store method only> max_npiv_vports = "127" node_name = "0x2001001b3235b031" npiv_vports_inuse = "0" **port_id = "0x0000ef"** **port_name = "0x2101001b3235b031"** **port_state = "Online"** port_type = "Point-To-Point (direct nport connection)" **speed = "4 Gbit"** supported_classes = "Class 3" supported_speeds = "1 Gbit, 2 Gbit, 4 Gbit" symbolic_name = "QLE2462 FW:v7.03.00 DVR:v8.07.00.08.06.6-k1" system_hostname = "" tgtid_bind_type = "wwpn (World Wide Port Name)" uevent = vport_create = <store method only> vport_delete = <store method only> Device = "host1" Device path = "/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.1/host1" fw_dump = nvram = "ISP " optrom = optrom_ctl = <store method only> reset = <store method only> sfp = "" uevent = "DEVTYPE=scsi_host" vpd = "."
将HBA卡修改为Target模式
把HBA开装到服务器上,因为Linux操作系统内核已经支持了qla2xxx的驱动,所以不需要去Qlogic去下载特殊的驱动,就可以使用HBA,只是该HBA卡处理initiator模式。# lsmod | grep qla2xxx qla2xxx 469784 0 scsi_transport_fc 55075 1 qla2xxx
CentOS 6.x的内核版本是2.6.32,只支持Qlogic的HBA卡的init模式,不支持Target模式。
解决办法有两个,都需要重新编译内核,第一个办法,在Linux kernel 2.6.32内核上,把HBA卡的驱动换成支持Target模式的驱动;第二个办法,将Linux内核版本升级到3.x。
在这里,采用第一个办法,更换HBA的驱动。
准备工作
构建本地YUM源创建DVD挂载点 # mkdir -p /mnt/centos # mount -o loop CentOS-6.6-x86_64-bin-DVD1.iso /mnt/centos 修改YUM源配置文件 # cd /etc/yum.repos.d/ # vi CentOS-Media.repo ... [c6-media] name=CentOS-$releasever - Media baseurl=file:///mnt/centos/ gpgcheck=0 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
还有一些必要的软件,本地源无法提供,采用163的YUM进行安装
在http://mirrors.163.com/.help/centos.html下载CentOS6的YUM源配置文件CentOS6-Base-163.repo,将该文件上传到服务器上的/etc/yum.repos.d/目录下。
移去当前正在使用的由系统提供的qla2xxx模块,并在下次启动时屏蔽:
# rmmod qla2xxx # echo blacklist qla2xxx >/etc/modprobe.d/blacklist-qla2xxx.conf # reboot
编译内核
查看内核代码# uname -r 2.6.32-504.el6.x86_64
下载内核源代码:kernel-2.6.32-504.el6.src.rpm
安装内核源代码
# groupadd mockbuild #解决warning: group mockbuild does not exist - using root问题 # useradd mockbuild -g mockbuild #解决warning: user mockbuild does not exist - using root 问题 # rpm -ivh kernel-2.6.32-504.el6.src.rpm
安装后,会生成rpmbuild目录。
产生随机数
# yum install rng-tools # 安装rngd # rngd -r /dev/urandom # 生成随机数,否则下面的rpmbuild的过程会很漫长
执行kernel.spec的”%prep”部分,主要是解开源代码并打相应补丁
安装必要的软件 # yum install patchutils xmlto elfutils-libelf-devel elfutils-devel binutils-devel python-devel # yum install asciidoc newt-devel perl-ExtUtils-Embed # yum install audit-libs-devel bison hmaccalc # yum install gcc rpm-build # cd /root/rpmbuild/SPECS # rpmbuild -bp kernel.spec
SCST打补丁
在modprobe scst_changer的时候,如果出现错误FATAL: Error inserting scst_changer: … Invalid argument, 可以通过查看/var/log/messages文件,看看错误在哪里。# tail -f messages ...... Aug 14 16:10:57 mhvtl kernel: scst: ***ERROR***: Pass-through dev handlers (handler "dev_changer") not supported. Consider applying on your kernel patch scst_exec_req_fifo-<kernel-version>
从SCST网站上下载 scst-3.0.1.tar.bz2
解压scst-3.0.1.tar.bz2 # tar xvfj scst-3.0.1.tar.bz2 打补丁 # cd /root/rpmbuild/BUILD/kernel-2.6.32-504.el6/linux-2.6.32-504.el6.x86_64 # patch -p1 < /root/scst-3.0.1/kernel/scst_exec_req_fifo-2.6.32.patch patching file block/blk-map.c Hunk #2 succeeded at 275 (offset 3 lines). patching file include/linux/blkdev.h Hunk #1 succeeded at 695 (offset -13 lines). Hunk #2 succeeded at 809 (offset -5 lines). patching file include/linux/scatterlist.h Hunk #2 succeeded at 223 (offset 4 lines). patching file lib/scatterlist.c Hunk #1 succeeded at 591 (offset 98 lines). # cd /root/rpmbuild/BUILD/kernel-2.6.32-504.el6/linux-2.6.32-504.el6.x86_64/block # vi blk-map.c 397行 int res = 0; # 对res进行初始化,否则,编译不通过
替换驱动
从SCST网站上下载 qla2x00t-3.0.1.tar.bz2解压qla2x00t-3.0.1.tar.bz2 # tar xvfj qla2x00t-3.0.1.tar.bz2 将原有的kernel source自带的qla2xxx目录改名保存 # cd /root/rpmbuild/BUILD/kernel-2.6.32-504.el6/linux-2.6.32-504.el6.x86_64/drivers/scsi # mv qla2xxx/ qla2xxx.bak 创建链接,替换驱动 # ln -s /root/qla2x00t-3.0.1 qla2xxx
配置内核
# yum install ncurses ncurses-devel # cd /root/rpmbuild/BUILD/kernel-2.6.32-504.el6/linux-2.6.32-504.el6.x86_64 # cp .config config.bak # make menuconfig
选择菜单: “Device Drivers -> SCSI device support,采用默认配置即可。
比较内核配置的前后差异 # diff .config config.bak diff .config config.bak 4c4 < # Fri Aug 14 13:29:52 2015 --- > # Fri Aug 14 13:05:49 2015 1475d1474 < CONFIG_SCSI_QLA2XXX_TARGET=y 内核版本,增加扩展版本号 # vi Makefile EXTRAVERSION = -504-scst 编译 # make # make modules # mkdir -p /lib/modules/2.6.32-504-scst # make modules_install # make install 编译完毕后重启 # reboot 在GRUB启动界面,选择新内核,启动系统。
查看qla2xxx驱动模块信息
# modinfo qla2xxx ...... parm: qlini_mode:Determines when initiator mode will be enabled. Possible values: "exclusive" (default) - initiator mode will be enabled on load, disabled on enabling target mode and then on disabling target mode enabled back; "disabled" - initiator mode will never be enabled; "enabled" - initiator mode will always stay enabled. (charp) ...... 有qlini_mode参数,允许选择target mode 设置为exclusive 和 enabled,处于initiator模式; 设置为disabled,处于Target模式 装载模块 # modprobe qla2xxx 查看模块的参数设置 # systool -m qla2xxx -v ...... qlini_mode = "exclusive" # 处于initiator模式 ...... 卸载模式 # modprobe -r qla2xxx
设置qla2xxx驱动处理target模式
编辑qla2xxx.conf # vi qla2xxx.conf options qla2xxx qlini_mode=disabled 装载模块 # modprobe qla2xxx 查看模块的参数设置 # systool -m qla2xxx -v ...... qlini_mode = "disabled" # 处于target模式 ......
安装SCST
安装介质: scst-3.0.1.tar.bz2# tar xvfj scst-3.0.1.tar.bz2 # cd scst-3.0.1 # make all # make install 安装完成后,可以看到SCST生成的内核模块 # ls -l /lib/modules/`uname -r`/extra drwxr-xr-x. 2 root root 4096 Aug 7 21:43 dev_handlers -rw-r--r--. 1 root root 4180135 Aug 7 21:43 scst.ko # ls -l /lib/modules/`uname -r`/extra/dev_handlers -rw-r--r--. 1 root root 291902 Aug 7 21:43 scst_cdrom.ko -rw-r--r--. 1 root root 282334 Aug 7 21:43 scst_changer.ko -rw-r--r--. 1 root root 295411 Aug 7 21:43 scst_disk.ko -rw-r--r--. 1 root root 295494 Aug 7 21:43 scst_modisk.ko -rw-r--r--. 1 root root 282358 Aug 7 21:43 scst_processor.ko -rw-r--r--. 1 root root 282286 Aug 7 21:43 scst_raid.ko -rw-r--r--. 1 root root 301992 Aug 7 21:43 scst_tape.ko -rw-r--r--. 1 root root 628155 Aug 7 21:43 scst_user.ko -rw-r--r--. 1 root root 909397 Aug 7 21:43 scst_vdisk.ko
安装qla2x00t
安装介质:qla2x00t-3.0.1.tar.bz2# tar xvfj qla2x00t-3.0.1.tar.bz2 # cd qla2x00t-3.0.1 # cd qla2x00-target 修改SCST的include和src文件的路径 # vi Makefile SCST_INC_DIR := $(shell if [ -e "$$PWD/../../scst" ]; \ then echo "$$PWD/../../scst-3.0.1/include"; \ else echo "$(DESTDIR)$(PREFIX)/include/scst"; fi) SCST_DIR := $(shell if [ -e "$$PWD/../../scst-3.0.1" ]; \ then echo "$$PWD/../../scst-3.0.1/src"; \ else echo "$(DESTDIR)$(PREFIX)/include/scst"; fi) # make # make install
安装mhVTL
安装依赖包
# yum install mtx mt-st lsscsi zlib-devel lzo-devel
mhVTL内核部分安装
# tar xvfz mhvtl-2015-04-14.tgz # cd mhvtl-1.5/ # cd kernel # make # make install
mhVTL用户空间部分安装
创建用户以及组# groupadd vtl # useradd -g vtl vtl
mhVTL的目录说明:
/etc/mhvtl 配置文件路径
/opt/mhvtl 虚拟带库存储路径
安装mhVTL
# cd mhvtl-1.5 # make # make install # chown -R vtl:vtl /opt/mhvtl 这一步是必需的,要不然,启动mhvtl的时候,会报make_vtl_media failed.的错误 # /etc/init.d/mhvtl start 启动mhVTL的后台进程
查看虚拟带库信息
# lsscsi -g [2:0:0:0] disk ATA ST3500413AS HP63 /dev/sda /dev/sg0 [8:0:0:0] mediumx STK L700 0105 /dev/sch0 /dev/sg9 [8:0:1:0] tape IBM ULT3580-TD5 0105 /dev/st0 /dev/sg1 [8:0:2:0] tape IBM ULT3580-TD5 0105 /dev/st1 /dev/sg2 [8:0:3:0] tape IBM ULT3580-TD4 0105 /dev/st2 /dev/sg3 [8:0:4:0] tape IBM ULT3580-TD4 0105 /dev/st3 /dev/sg4 [8:0:8:0] mediumx STK L80 0105 /dev/sch1 /dev/sg10 [8:0:9:0] tape STK T10000B 0105 /dev/st4 /dev/sg5 [8:0:10:0] tape STK T10000B 0105 /dev/st5 /dev/sg6 [8:0:11:0] tape STK T10000B 0105 /dev/st6 /dev/sg7 [8:0:12:0] tape STK T10000B 0105 /dev/st7 /dev/sg8
配置SCST
装载驱动模块
# modprobe scst # modprobe scst_changer # modprobe scst_tape # modprobe qla2xxx # modprobe qla2x00tgt 查看系统日志 # /var/log # tail -f messages ...... Aug 14 19:20:21 mhvtl kernel: qla2x00t: Initializing QLogic Fibre Channel HBA Driver target mode addon version 3.0.1 Aug 14 19:20:21 mhvtl kernel: scst: Target **21:00:00:1b:32:15:b0:31** for template qla2x00t registered successfully Aug 14 19:20:21 mhvtl kernel: qla2x00t(0): using 64 Bit PCI addressing Aug 14 19:20:21 mhvtl kernel: scst: Target **21:01:00:1b:32:35:b0:31** for template qla2x00t registered successfully Aug 14 19:20:21 mhvtl kernel: qla2x00t(1): using 64 Bit PCI addressing Aug 14 19:20:21 mhvtl kernel: qla2x00t: Target mode driver for QLogic 2x00 controller registered successfully Aug 14 19:20:21 mhvtl kernel: scst: Target template qla2x00t registered successfully
此时,就可以在SAN网络的其他主机上能够看到输出的SCSI设备。(客户机可能需要重新启动,或是重新扫描硬件)。
相关文章推荐
- 通过扩展让ASP.NET Web API支持JSONP -摘自网络
- DNN结构演进History—LSTM网络
- httpd: unrecognized service 的解决方案
- tcpdump summary
- 网络扫描工具学习
- Azure SLB + httpd + ILB + HAProxy + Atlas + MySQL
- 基于CentOS 6.5构建KVM服务器平台、网络和存储、公钥和私钥的建立
- Http 协议请求方法分析
- java代码实现如jsp页面的form请求方式一HttpURLConnection请求
- BP神经网络与ELM极限学习机的对比
- TCP 出现大量 LAST_ACK 导致apache不能重启解决小结
- 各类 HTTP 返回状态代码详解
- Excel 2007表格内输入http取消自动加上超链接的功能
- httpclient实例
- Android笔记:HTTP相关
- System.Net网络编程--AuthenticationManager和IAuthenticationModule
- 计算机网络系统--Microsoft Lync 与 腾讯通RTX 对比(转载)
- 关于监听网络状态变化,记录而已
- System.Net.HttpWebRequest.GetRequestStream超时问题
- 网络划分与寻址三要素: IP地址、子网掩码和地址分类