在sas存储系统中实现hba卡访问sata磁盘的方法及设备的制造方法
【技术领域】
[0001]本发明涉及数据存储的技术领域,更具体地,涉及在SAS存储系统中实现HBA卡访问SATA磁盘的方法及设备。
【背景技术】
[0002]SAS (Serial Attached SCS1、串行连接SCSI)是新一代的SCSI (小型计算机系统接口)技术,和现在流行的SATA (Serial ATA、串行ΑΤΑ)磁盘相同,都是采用串行技术以获得更高的数据传输速度,并通过缩短连结线来获得改善的内部空间等优势。SAS的接口技术可以向下兼容SATA,即可以在SAS接口上安装SAS磁盘或者SATA磁盘。SATA磁盘费用低廉,而SAS磁盘则并不便宜,因此在实现存储方案时会优先选用SATA磁盘来替代昂贵的SAS磁盘。
[0003]在一个SAS存储系统中,终端设备,包括磁盘和主机适配器(也称为ΗΒΑ卡),连接到扩展器(Expander)上,同时扩展器相互连接,构成一个网络结构,称为SAS域,连接到同一个SAS域中的各种设备可以建立数据链接进行通信。图1示意性地示出了 SAS存储系统100,其包括通过扩展器互连集合110连接的多个终端设备,包括SAS磁盘101和102、SATA磁盘103和104、以及HBA卡105和106。
[0004]为了实现高可用,即在SAS域中的一块HBA卡失效后由另外一块HBA卡接管磁盘,可以在同一个SAS域同时接入多块HBA卡,相互作为备份,以便在一个HBA卡损坏的情况下快速切换。专利申请CN 101488077(公开日为2009年7月22日)公开了一种冗余HBA卡系统,其在服务器主板上插两块相同的HBA卡,每块HBA卡都被认为是相互独立的,每块HBA卡均能与其他所有部件组成一个完整的系统,两块HBA卡构成了两个互为冗余、互为备份的系统。
[0005]然而,在实践中,在SAS域中接入SATA磁盘的情况下,如果同时又有多个HBA卡接入该SAS域,那么就会存在抢占的问题:相对于SAS磁盘来说,SATA磁盘只支持单通道,即同一时间内,只能由一个HBA来访问该磁盘。如果在SAS域中,同时接入多个HBA卡,那么这些HBA卡就会不断的抢占SATA磁盘的访问通道,导致系统不能正常工作。图2示意性示出了两块HBA导致SAS域的SATA磁盘无法正常工作的情况。
[0006]图2示意性地示出了 SAS存储系统200,其包括扩展器集合210,正常工作中的SAS磁盘201和202、SATA磁盘203和204、和HBA卡206,以及新接入的终端设备HBA卡205。当HBA卡206正在访问SATA磁盘204的情况下,在它们之间存在访问通道214,此时若再接入另外一个HBA卡205,则根据现有HBA卡的驱动程序实现,会尝试建立该HBA卡与所有SATA磁盘的数据链接,因而会抢占HBA卡206和SATA磁盘204之间的访问通道,导致会中断HBA卡206和SATA磁盘204的现有数据链接,造成SATA磁盘204的访问异常。
【发明内容】
[0007]有鉴于此,本发明实施方式的目的之一在于解决前述的SAS域中接入的多个HBA卡会出现的对于SATA磁盘的抢占问题。
[0008]根据本发明的一个方面,提供一种在SAS存储系统中实现HBA卡访问SATA磁盘的方法。该方法包括:获取所述HBA卡的标识符和所述SAS存储系统中的至少一个SATA磁盘的标识符;访问包括HBA卡标识符和SATA磁盘标识符的白名单,以便获取与所述HBA卡相关联的白名单项,其中所述白名单被配置为使得所述至少一个SATA磁盘中的一块SATA磁盘同时只能被一个HBA卡访问;以及根据所获取的白名单项,使得所述HBA卡访问所述至少一个SATA磁盘中的处在所述白名单项中的SATA磁盘。
[0009]根据本发明的另一个方面,提供一种在SAS存储系统中实现HBA卡访问SATA磁盘的设备。该设备包括:标识符获取装置,用于获取所述HBA卡的标识符和所述SAS存储系统中的至少一个SATA磁盘的标识符;白名单项获取装置,用于访问包括HBA卡标识符和SATA磁盘标识符的白名单,以便获取与所述HBA卡相关联的白名单项,其中所述白名单被配置为使得所述至少一个SATA磁盘中的一块SATA磁盘同时只能被一个HBA卡访问;以及访问装置,用于根据所获取的白名单项,使得所述HBA卡访问所述至少一个SATA磁盘中的处在所述白名单项中的SATA磁盘。
[0010]根据本发明的又一个方面,提供一种在计算机可读存储介质中实现的计算机程序产品,所述计算机可读存储介质具有存储于其中的计算机可读程序代码部分,所述计算机可读程序代码部分被配置为执行根据前述方法。比如,所述计算机可读程序代码部分包括:第一可执行部分,用于获取所述HBA卡的标识符和所述SAS存储系统中的至少一个SATA磁盘的标识符;第二可执行部分,用于访问包括HBA卡标识符和SATA磁盘标识符的白名单,以便获取与所述HBA卡相关联的白名单项,其中所述白名单被配置为使得所述至少一个SATA磁盘中的一块SATA磁盘同时只能被一个HBA卡访问;以及第三可执行部分,用于根据所获取的白名单项,使得所述HBA卡访问所述至少一个SATA磁盘中的处在所述白名单项中的SATA磁盘。
[0011]根据本发明的实施方式,解决了 SAS域中的在实现冗余备份的HBA卡时可能出现的抢占SATA磁盘的问题。
[0012]从下文结合附图所做出的详细描述中,本发明的这些和其他优点和特征将变得明显,其中在整个下文描述的若干附图中,类似的元件将具有类似的编号。
【附图说明】
[0013]图1示意性地示出了现有技术中的一个示例SAS存储系统;
[0014]图2示意性地示出了现有技术中的、SAS存储系统中的多个HBA卡和SATA磁盘之间可能发生的抢占访问通道的情形;
[0015]图3图示根据本发明的实施方式的在SAS存储系统中实现HBA卡访问SATA磁盘的方法的流程图;
[0016]图4A和图4B图示根据本发明的实施方式的白名单的示例;以及
[0017]图5图示根据本发明的实施方式的在SAS存储系统中实现HBA卡访问SATA磁盘的设备的框图。
【具体实施方式】
[0018]下文将参考附图更完整地描述本公开内容,其中在附图中显示了本公开内容的实施方式。但是这些实施方式可以用许多不同形式来实现并且不应该被解释为限于本文所述的实施方式。相反地,提供这些实例以使得本公开内容将是透彻和完整的,并且将全面地向本领域的熟练技术人员表达本公开内容的范围。
[0019]下面结合附图以示例的方式详细描述本发明的各种实施方式。
[0020]参考图3,其示出了本发明的各种实施方式在SAS存储系统中实现HBA卡访问SATA磁盘的方法300的流程图。
[0021 ] 在步骤S310,获取HBA卡的标识符和SAS存储系统中的至少一个SATA磁盘的标识符。
[0022]在步骤S320,访问包括HBA卡标识符和SATA磁盘标识符的白名单,以便获取与HBA卡相关联的白名单项。白名单项包括相互配对的HBA卡标识符和SATA磁盘标识符。白名单被配置为使得至少一个SATA磁盘中的一块SATA磁盘同时只能被一个HBA卡访问。
[0023]在步骤S330,根据所获取的白名单项,使得HBA卡访问所述至少一个SATA磁盘中的处在白名单项中的SATA磁盘。
[0024]应当注意,尽管出于简化说明的目的将该方法表示和描述为一连串动作,但是应理解和认识到要求保护的主题内容将不受这些动作的执行顺序所限制,因为一些动作可以按照与这里示出和描述的顺序不同的顺序出现或者与其它动作并行地出现,同时一些动作还可能包括若干子步骤,而这些子步骤之间可能出现时序上交叉执行的可能。另外,可能并非所有图示的动作是实施根据所附权利要求书所述的方法所必须的。再者,前述步骤的描述不排除该方法还可以包括可能取得附加效果的附加步骤。
[0025]在一个实施例中,HBA卡标识符和SATA磁盘标识符采用SAS域中的SAS地址来表示。在一个SAS域中,所有终端设备,包括磁盘和HBA卡,都会拥有一个唯一且固定的SAS地址,因此可以通过SAS地址来唯一标识每一个终端设备。
[0026]应当理解,虽然在上述实施例中,采用SAS地址作为HBA卡标识符和SATA磁盘标识符,但是在其他的实施例中,HBA卡标识符和SATA磁盘标识符也可以为其他能够在SAS系统进行相互区分的形式,比如不同终端设备的不同的命名、编号等。
[0027]在现有HBA卡驱动程序实现中,驱动程序会对所有SATA磁盘设备强制执行清除已有的数据链接的操作,即会抢占其他HBA卡和该SATA磁盘的链接,导致正在访问该SATA磁盘的其他HBA卡不能再从该SATA磁盘读取数据。然而,根据本发明的各种实施方式,实现了通过白名单来控制HBA卡对SATA磁盘访问的技术,解决了抢占的问题。
[0028]在一个实施例中,实现了一个whitelist内核模块,该内核模块维护一张白名单,其中的白名单项可以由一个HBA卡SAS地址和SATA磁盘SAS地址构成,比如0x0000000000001111 和 0x0000000000000005,表示允许地址为 0x0000000000001111 的 HBA卡访问地址为0x0000000000000005的SATA磁盘;反之,如果SATA磁盘SAS地址不在与该HAB存在对应关系的白名单项中,则不允许该HBA卡访问该SATA磁盘。
[0029]ffhitelist内核模块例如可以通过procfs文件系统来管理和配置,例如,可以设置如下的可执行文件,即add、del和list:
[0030]./proc/whitelist/add文件:用于添加白名单项,通过写入(HBA卡SAS地址:SATA 磁盘 SAS 地址)对来添加,比如写入“0x0000000000001111:0x0000000000000005” 表示添加对应的白名单项;
[0031]./proc/whitelist/del文件:用于删除白名单项,通过写入(HBA卡SAS地址:SATA 磁盘 SAS 地址)对来删除,比如写入“0x0000000000001111:0x0000000000000005” 表示删除对应的白名单项;
[0032]./proc/whitelist/list文件:通过读取该文件内容,得到现有的白名单项列表。
[0033]在其他实施方式中,也可以利用可执行命令来实现以上的add、del和lis