21ewd 发表于 2016-1-28 08:22:05

使用Linux模拟FC存储阵列(targetcli)

1.环境硬件信息
作为target端的机器(PC机)
HBA卡 : QLogic
WWN1 : 21:00:00:1b:32:81:6e:f1
系统 : Ubuntu 15.04 Server

作为initiator端的机器 (PC server)
系统: XenServer
HBA : QLogic
WWN1 : 21:00:00:1b:32:98:7d:1b

FC交换机:Brocade 200E

2.交换机配置
1)查看交换机端口对应的wwwn号
swd77:admin> switchshow
switchName:   swd77
switchType:   34.0
switchState:    Online   
switchMode:   Native
switchRole:   Principal
switchDomain:   1
switchId:       fffc01
switchWwn:      10:00:00:05:1e:64:9d:86
zoning:         ON (Ezyxcfg)
switchBeacon:   OFF
Area Port Media Speed State   Proto
=====================================
0   0   id    N2   Online         F-Port21:00:00:1b:32:98:7d:1b//接192.168.1.88主机(XenServer)的HBA卡
1   1   id    N4   Online         F-Port21:00:00:1b:32:8a:8a:c4//接192.168.1.150
2   2   id    N4   No_Light         
3   3   id    N4   No_Light         
4   4   id    N4   Online         F-Port21:00:00:1b:32:81:6e:f1//接192.168.1.17 DELL PC机
5   5   id    N4   No_Light      
2) 查看zone配置
所以端口已经在一个zone里了,无需进行更改。
swd77:admin> zoneshow
Defined configuration:
cfg:   Ezyxcfg Ezyxarray
zone:Ezyxarray
                1,0; 1,1; 1,2; 1,3; 1,4; 1,5; 1,6; 1,7
Effective configuration:
cfg:   Ezyxcfg
zone:Ezyxarray
                1,0
                1,1
                1,2
                1,3
                1,4
                1,5
                1,6
                1,7
swd77:admin>
---------------------------------------------------------------------------

3.配置targetcli服务,模拟存储阵列
1)安装操作系统ubuntu15.04 Desktop版本
2)创建分区/dev/sda4,大小为816G,并挂载在/data目录下
    mkdir /data
    mount -t ext4 /dev/sda4 /data
vinchin@vinchin-OptiPlex-9020:~$ df -h
Filesystem      SizeUsed Avail Use% Mounted on
/dev/sda1      94G6.6G   83G   8% /
/dev/sda4       816G   30G744G   4% /data
/dev/sda3       454M   41M386M10% /boot

3)配置targetcli

(1)安装targetcli
apt-get install targetcli

(2)挂载configFS   
targetcli 的配置都需要用到configFS, 因此configFS模块必须被加载到内核中。把configFS挂载到/sys/kernel/config:
mount -t configfs configfs /sys/kernel/config

(3)设置HBA卡为target mode
vi /etc/modprobe.d/qla2xxx.conf
options qla2xxx qlini_mode="disabled"

(4)更新initramfs后
sudo update-initramfs -u -k all

(5)重启机器
sudo reboot

(6)检查qla2xxx模块已经安装在targetcli里面了
下面有qla2xxx输出即为正常。
targetcli
/> ls
o- / ..................................................................... [...]
o- backstores .......................................................... [...]
| o- fileio ...............................................
| o- iblock ...............................................
| o- pscsi ................................................
| o- rd_dr ................................................
| o- rd_mcp ...............................................
o- ib_srpt ........................................................
o- iscsi ..........................................................
o- loopback .......................................................
o- qla2xxx ........................................................
/>


下面可以划分存储空间并LUN mapping
(7)通过一个文件创建一个FILEIO backstore。

$su -   //获取root权限
#targetcli
/backstores
/backstores> fileio/ create name=test_file file_or_dev=/data/fileio_1 size=810G
//文件的大小就是生成LUN的大小

在targetcli里创建WWN's
/> qla2xxx/ create 21:00:00:1b:32:81:6e:f1    //本机的wwwn,相当于存储阵列的前段端口的wwwn
这里需要把刚才创建好的WWN's和之前就创建好的backstore进行一个连接。使用luns下的命令
/qla2xxx/21:00:00:1b:32:81:6e:f1/luns/ create/backstores/fileio/test_file

我们需要创建一个ACL's(Access Control List)列表, 让需要用到这个这个存储的机器可以有权限使用到这个luns。
这里我们需要的WWN是需要访问该luns的机器的WWN,不是本机的
/qla2xxx/21:00:00:1b:32:81:6e:f1/acls create 21:00:00:1b:32:98:7d:1b   //将Lun映射给192.168.1.88对应的wwwn
/qla2xxx/21:00:00:1b:32:81:6e:f1/acls create 21:00:00:1b:32:8a:8a:c4    //将Lun映射给192.168.1.150对应的wwwn

保存配置
saveconfig
此时会报错类似“ConfigError: Unknown value type 'qla2xxx_wwn' when validating 21:00:00:24:ff:0e:7c:f5”
打开另一窗口修改配置
vi /usr/share/pyshared/rtslib/config.py

         elif val_type == 'naa':
             if is_valid_wwn('naa', value):
               valid_value = value
后面添加
elif val_type == 'qla2xxx_wwn':
            if is_valid_wwn('qla2xxx_wwn', value):
                valid_value = value

vi /usr/share/pyshared/rtslib/utils.py

             and re.match(
               "{8}(-{4}){3}-{12}$", wwn):
         return True
添加
    elif wwn_type == 'qla2xxx_wwn' \
            and re.match(
                "{2}(:{2}){7}$", wwn):
      return True
再次saveconfig后成功添加配置,所以配置如下




4.initator端进行扫描
完成后在Xenserver进行扫描。

页: [1]
查看完整版本: 使用Linux模拟FC存储阵列(targetcli)