随着信息数据量的急速膨胀,存储越来越追求效率和无限可扩展性,而SAN光纤存储网络是现在非常流行的一种解决方案。光纤通信具有无可比拟的高速数据量传输,加上网络化的存储管理,及无限无痛的可扩容性,这一行业的市场前景非常乐观。
一个简单的光纤存储网络主要有以下几大组成部分:
1) 存储设备,一般是磁盘阵列柜
2) 光纤通道卡,也就是FC HBA,类似于网卡
3) 光纤通道交换机,可以实现数据路由及硬分区管理等
4) 应用主机服务器,安装光纤通道卡
相应的,也需要有相关的管理系统对整个存储网络进行管理配置。一般来说,管理系统主要分两大部分,一部分是光纤通道卡的管理,另一部分则是对存储的管理。
对光纤通道卡的管理牵涉到很多功能,如参数的配置,拓扑管理,卡与存储逻辑盘的绑定(包括LUN mapping, LUN masking,分区zoning,持久性绑定persistent binding等等),还需要提供对流量的控制及冗余多链路处理等等。
一个大型的SAN存储网络中,可能有很多不同厂家,不同型号的光纤通道卡,这就对卡的管理提了一个很大的难题。而且暂时也没有一个统一的规范和工业标准支持。T11组织就提出了Common HBA API的概念,提供对上层应用的统一的API标准接口调用。相关的规范可以参看T11的主页: [url]http://www.t11.org/index.html[/url]
这样对上层管理系统来说,它就不再需要关心底层硬件的细节,只是通过标准接口的调用对卡进行管理和配置。我们只需要实现特定HBA的应用层API即可,通过注册表(windows平台)或配置文件,Common HBA API可以装载这些应用层API。
HBA应用层API一般需要和特定光纤通道卡驱动进行交互,在windows操作系统下,可以采用DeviceIoControl API,如下面的示例代码:
当然如果是Linux操作系统,也有相关的ioctl API进行交互。具体的代码实现就不多说了。
这里有一个很好的HBA应用层API实现的代码框架(插图中sun_fc子项目),大家可以参考。
[url]http://www.koders.com/info.aspx?c=ProjectInfo&pid=XF2UHNMR54MHCW89X5EBNVH2PE[/url]
一个简单的光纤存储网络主要有以下几大组成部分:
1) 存储设备,一般是磁盘阵列柜
2) 光纤通道卡,也就是FC HBA,类似于网卡
3) 光纤通道交换机,可以实现数据路由及硬分区管理等
4) 应用主机服务器,安装光纤通道卡
相应的,也需要有相关的管理系统对整个存储网络进行管理配置。一般来说,管理系统主要分两大部分,一部分是光纤通道卡的管理,另一部分则是对存储的管理。
对光纤通道卡的管理牵涉到很多功能,如参数的配置,拓扑管理,卡与存储逻辑盘的绑定(包括LUN mapping, LUN masking,分区zoning,持久性绑定persistent binding等等),还需要提供对流量的控制及冗余多链路处理等等。
一个大型的SAN存储网络中,可能有很多不同厂家,不同型号的光纤通道卡,这就对卡的管理提了一个很大的难题。而且暂时也没有一个统一的规范和工业标准支持。T11组织就提出了Common HBA API的概念,提供对上层应用的统一的API标准接口调用。相关的规范可以参看T11的主页: [url]http://www.t11.org/index.html[/url]
这样对上层管理系统来说,它就不再需要关心底层硬件的细节,只是通过标准接口的调用对卡进行管理和配置。我们只需要实现特定HBA的应用层API即可,通过注册表(windows平台)或配置文件,Common HBA API可以装载这些应用层API。
HBA应用层API一般需要和特定光纤通道卡驱动进行交互,在windows操作系统下,可以采用DeviceIoControl API,如下面的示例代码:
SRB_BUFFER smpi;
IOCTLPayload_t *py = NULL;
DWORD cbData;
BOOL ret;
smpi.sic.HeaderLength = sizeof(SRB_IO_CONTROL);
smpi.sic.Timeout = 1000;
smpi.sic.Length = 4000-sizeof(SRB_IO_CONTROL);
smpi.sic.ControlCode = VENDOR_IOCTL_FC;
strncpy ((char *) smpi.sic.Signature, VENDOR_IOCTL_SIGNATURE, 8);
py = (IOCTLPayload_t *)smpi.ucDataBuffer;
py->Signature = VENDOR_SIGNATURE;
py->MajorFunction = majorFunc;
py->MinorFunction = minorFunc;
py->Length = sizeof(IOCTLPayload_t);
py->Status = -1;
ret = DeviceIoControl(handle, // device handle
IOCTL_SCSI_MINIPORT, // io control code
&smpi, // input buffer
4000,
&smpi, // output buffer
4000,
&cbData, // # bytes returned
NULL); // synchronous call
当然如果是Linux操作系统,也有相关的ioctl API进行交互。具体的代码实现就不多说了。
这里有一个很好的HBA应用层API实现的代码框架(插图中sun_fc子项目),大家可以参考。
[url]http://www.koders.com/info.aspx?c=ProjectInfo&pid=XF2UHNMR54MHCW89X5EBNVH2PE[/url]