SCST在SAN网络环境中的应用

来源:互联网 发布:arcgis批处理python 编辑:程序博客网 时间:2024/04/28 20:36

问题描述

在SAN网络环境中,Linux服务器上的SCSI设备,如何通过HBA卡,走光纤网络,让其他的服务器使用到这些设备?本文采用SCST - Generic SCSI Target Subsystem for Linux,试图解决该问题。

查看HBA卡的信息

# lspci | grep -i fibre01: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/# lshost0  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 -vClass = "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 qla2xxxqla2xxx               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 - Mediabaseurl=file:///mnt/centos/gpgcheck=0enabled=1gpgkey=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 -r2.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.cHunk #2 succeeded at 275 (offset 3 lines).patching file include/linux/blkdev.hHunk #1 succeeded at 695 (offset -13 lines).Hunk #2 succeeded at 809 (offset -5 lines).patching file include/linux/scatterlist.hHunk #2 succeeded at 223 (offset 4 lines).patching file lib/scatterlist.cHunk #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.c397行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.bakdiff .config config.bak 4c4< # Fri Aug 14 13:29:52 2015---> # Fri Aug 14 13:05:49 20151475d1474< 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`/extradrwxr-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 MakefileSCST_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.1Aug 14 19:20:21 mhvtl kernel: scst: Target **21:00:00:1b:32:15:b0:31** for template qla2x00t registered successfullyAug 14 19:20:21 mhvtl kernel: qla2x00t(0): using 64 Bit PCI addressingAug 14 19:20:21 mhvtl kernel: scst: Target **21:01:00:1b:32:35:b0:31** for template qla2x00t registered successfullyAug 14 19:20:21 mhvtl kernel: qla2x00t(1): using 64 Bit PCI addressingAug 14 19:20:21 mhvtl kernel: qla2x00t: Target mode driver for QLogic 2x00 controller registered successfullyAug 14 19:20:21 mhvtl kernel: scst: Target template qla2x00t registered successfully

此时,就可以在SAN网络的其他主机上能够看到输出的SCSI设备。(客户机可能需要重新启动,或是重新扫描硬件)。

0 0
原创粉丝点击