CN104793899A - 一种基于虚拟磁盘层的检测Raid磁盘拔出的方法及装置 - Google Patents

一种基于虚拟磁盘层的检测Raid磁盘拔出的方法及装置 Download PDF

Info

Publication number
CN104793899A
CN104793899A CN201510058824.9A CN201510058824A CN104793899A CN 104793899 A CN104793899 A CN 104793899A CN 201510058824 A CN201510058824 A CN 201510058824A CN 104793899 A CN104793899 A CN 104793899A
Authority
CN
China
Prior art keywords
disk
raid
vsd
extracted
bad block
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201510058824.9A
Other languages
English (en)
Other versions
CN104793899B (zh
Inventor
王俊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhou Yunke Beijing Technology Co ltd
Wuhan Shenzhou Digital Cloud Technology Co ltd
Original Assignee
Divine Land Beijing Yun Ke Data Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Divine Land Beijing Yun Ke Data Technologies Co Ltd filed Critical Divine Land Beijing Yun Ke Data Technologies Co Ltd
Priority to CN201510058824.9A priority Critical patent/CN104793899B/zh
Publication of CN104793899A publication Critical patent/CN104793899A/zh
Application granted granted Critical
Publication of CN104793899B publication Critical patent/CN104793899B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明提供了一种基于虚拟磁盘层的检测Raid磁盘拔出的方法及装置,该方法包括:建立虚拟磁盘层VSD,所述VSD将磁盘阵列Raid的几何空间划分为保留区和数据区,所述保留区包括超级块区、位图bitmap索引区、坏块重定向索引区和坏块重定向数据区;在坏块重定向过程中,所述虚拟磁盘层VSD实时检测所述坏块重定向数据区的磁盘坏块数量,当所述磁盘坏块数量超出设定阈值时,通知所述Raid磁盘拔出;在执行读写操作时,所述虚拟磁盘层VSD实时检测所述读写操作是否有错误码返回,当所述错误码为磁盘介质错误时,通知所述Raid磁盘拔出。本发明能够自动发现磁盘错误并自动通知Raid磁盘拔出,可以提高Raid的健壮性,减少非自动化的错误。

Description

一种基于虚拟磁盘层的检测Raid磁盘拔出的方法及装置
技术领域
本发明涉及计算机技术领域,尤其涉及一种基于虚拟磁盘层的检测Raid磁盘拔出的方法及装置。
背景技术
Raid在收到磁盘拔出事件时,将进入降级或者失效状态。
传统的磁盘拔出都是物理上的拔出事件。首先通过磁盘监控技术比如smart工具来监测磁盘健康状态,当发现磁盘即将损坏或已经损坏,通过告警模块通知人工替换。损坏的磁盘拔出必须通过人工进行,进而OS监测到磁盘硬件拔出,产生事件通知,由Raid的事件通知层通知到Raid。
在实现本发明过程中,发明人发现现有技术中至少存在如下问题:
1.必须在磁盘即将损坏的时间片区内及时通知到人,由人手动拔出磁盘。若磁盘监控或人工处理不及时导致磁盘已经损坏,则会导致大量数据错误;
2.手工拔出磁盘事件通知到Raid时间周期较长,需要秒级时间。
由OS监测到磁盘硬件拔出,产生块设备plugout事件的时间是秒级的,在处理大量IO的情况下,秒级的延迟将产生大量的IO错误,要屏蔽掉这些错误,Raid的错误retry需要设置到秒级,导致磁盘拔出那个时间点会产生秒级的IO停顿(重试)。
发明内容
为解决上述技术问题,本发明提出了一种基于虚拟磁盘层的检测Raid磁盘拔出的方法及装置,自动发现磁盘错误并自动通知Raid磁盘拔出,可以提高Raid的健壮性,减少非自动化的错误,同时还和即刻发现磁盘物理拔出方法相结合,使得物理拔出磁盘事件在有IO的时候立即通知到Raid,消除磁盘拔出那个时间点可能的IO停顿。
本发明提供了一种基于虚拟磁盘层的检测Raid磁盘拔出的方法,该方法包括:
建立虚拟磁盘层VSD,所述VSD将磁盘阵列Raid的几何空间划分为保留区和数据区,所述保留区包括超级块区、位图bitmap索引区、坏块重定向索引区和坏块重定向数据区;
在坏块重定向过程中,所述虚拟磁盘层VSD实时检测所述坏块重定向数据区的磁盘坏块数量,当所述磁盘坏块数量超出设定阈值时,通知所述Raid磁盘拔出;
在执行读写操作时,所述虚拟磁盘层VSD实时检测所述读写操作是否有错误码返回,当所述错误码为磁盘介质错误时,通知所述Raid磁盘拔出。
优选地,所述设定阈值小于等于所述Raid实际可容忍的坏块数量。
优选地,所述通知所述Raid磁盘拔出具体为:通过调用内部接口启动预设线程执行,通知所述Raid磁盘拔出。
优选地,所述内部接口启动所述预设线程执行时,若所述预设线程还没有执行完毕,则返回,否则启动所述预设线程执行。
优选地,所述内部接口与磁盘物理拔出时所调用的底层接口相同。
相应的,本发明还提出了一种基于虚拟磁盘层的检测Raid磁盘拔出的装置,所述装置包括:
VSD建立模块,用于建立虚拟磁盘层VSD,所述VSD将磁盘阵列Raid的几何空间划分为保留区和数据区,所述保留区包括超级块区、位图bitmap索引区、坏块重定向索引区和坏块重定向数据区;
第一检测模块,用于在坏块重定向过程中,所述虚拟磁盘层VSD实时检测所述坏块重定向数据区的磁盘坏块数量,当所述磁盘坏块数量超出设定阈值时,通知所述Raid磁盘拔出;
第二检测模块,用于在执行读写操作时,所述虚拟磁盘层VSD实时检测所述读写操作是否有错误码返回,当所述错误码为磁盘介质错误时,通知所述Raid磁盘拔出。
优选地,所述设定阈值小于等于所述Raid实际可容忍的坏块数量。
采用本发明提出的一种基于虚拟磁盘层的检测Raid磁盘拔出的方法及装置,通过在VSD坏块重定向功能的基础上,主动发现磁盘不可用;在VSD执行IO返回错误时,若是磁盘介质错误等相关的错误码,则主动发现磁盘不可用;采用统一的、内核进程上下文的不可重入的接口来通知磁盘阵列Raid,与磁盘物理拔出调用相同的底层接口,使得本发明能自动发现磁盘错误并自动通知Raid磁盘拔出,提高了Raid的健壮性,减少非自动化的错误。物理拔出磁盘事件在有IO的时候立即通知到Raid,消除磁盘拔出那个时间点可能的IO停顿。
附图说明
通过参考附图会更加清楚的理解本发明的特征和优点,附图是示意性的而不应理解为对本发明进行任何限制,在附图中:
图1为本发明实施例一提出的一种基于虚拟磁盘层的检测Raid磁盘拔出的方法流程图;
图2为本发明实施例中提出的vsd_plugout_bbr接口函数的工作流程图;
图3为本发明实施例二提出的一种基于虚拟磁盘层的检测Raid磁盘拔出的装置模块图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例一提出的一种基于虚拟磁盘层的检测Raid磁盘拔出的方法流程图,如图1所示,该方法包括以下步骤:
S101,建立虚拟磁盘层VSD,所述VSD将磁盘阵列Raid的几何空间划分为保留区和数据区,所述保留区包括超级块区、位图bitmap索引区、坏块重定向索引区和坏块重定向数据区等;
S102,在坏块重定向过程中,所述虚拟磁盘层VSD实时检测所述坏块重定向数据区的磁盘坏块数量,当所述磁盘坏块数量超出设定阈值时,通知所述Raid磁盘拔出。其中,所述设定阈值小于等于所述Raid实际可容忍的坏块数量。
S103,在执行读写操作时,所述虚拟磁盘层VSD实时检测所述读写操作是否有错误码返回,当所述错误码为磁盘介质错误时,通知所述Raid磁盘拔出。
其中,步骤S102和步骤S103中,通知所述Raid磁盘拔出具体为:通过调用内部接口启动预设线程执行,通知所述Raid磁盘拔出。所述内部接口启动所述预设线程执行时,若所述预设线程还没有执行完毕,则返回,否则启动所述预设线程执行。本发明实施例中,通过调用vsd_plugout_bbr接口启动一个新线程执行特定VSD对象的plugout,当时启动新线程执行时,若之前的线程还在执行,则返回。
其中,所述内部接口与磁盘物理拔出时所调用的底层接口相同。采用统一的、内核进程上下文的不可重入的接口来通知磁盘阵列Raid,与磁盘物理拔出调用相同的底层接口,使得本发明能自动发现磁盘错误并自动通知Raid磁盘拔出,提高了Raid的健壮性,减少非自动化的错误。物理拔出磁盘事件在有IO的时候立即通知到Raid,消除磁盘拔出那个时间点可能的IO停顿。
本发明实施例,为了让磁盘阵列raid更好的记录各种状态,适应各种磁盘,本发明引入了虚拟磁盘Virtual Storage Disk层,简称VSD。VSD将磁盘的几何空间做了重新划分,分为保留区和数据区。保留区由超级块区,bitmap索引区,坏块重定向索引区,坏块重定向数据区等组成。在VSD层实现了支持双控制器的高效的坏块重定向功能,与具体操作系统OS,磁盘Disk无关,具有很高的兼容性和扩展性。VSD在坏块重定向过程中发现重定向数据块区即将满了,则可断定该磁盘不可用了(坏块个数超过了可以容忍的值),这时可以调用相应接口函数启动一个线程执行内部预设的vsd_plugout函数,来通知Raid磁盘拔出。在VSD执行IO返回错误时,若是磁盘介质错误等相关的错误码,也可以判断出是磁盘拔出或失效,这时可以调用相应接口函数启动一个线程执行内部的vsd_plugout函数,来通知Raid磁盘拔出。
本发明实施例的具体工作流程,如下:
当坏块重定向过程中发现磁盘坏块超出设定阈值,调用内部的vsd_plugout_bbr接口,通知Raid磁盘拔出。
在VSD执行IO(读写操作)返回错误时,若是磁盘介质错误等相关的错误码,调用内部的vsd_plugout_bbr接口,通知Raid磁盘拔出。
调用vsd_plugout_bbr接口,通知Raid磁盘拔出,具体为:vsd_plugout_bbr接口启动一个新线程执行特定vsd对象的vsd_plugout函数,若线程还在执行,则不可重入,即vsd_plugout不会同时、重复执行。
图2为vsd_plugout_bbr接口函数的工作流程图,如图2所示,具体包括:
S201:若用户配置参数发现错误,则主动执行plugout,否则继续执行;其中用户配置参数发现错误的情况包括:磁盘坏块数量超出设定阈值时以及虚拟磁盘层VSD实时检测所述读写操作返回关于磁盘介质错误的错误码等。
S202:若线程thread_vsd_plugout正在执行,则返回,否则启动线程thread_vsd_plugout执行;
S203:线程thread_vsd_plugout执行特定vsd对象的vsd_plugout函数,减线程引用计数。
图3为本发明实施例二提出的一种基于虚拟磁盘层的检测Raid磁盘拔出的装置模块图,如图3所示,该装置包括:
相应的,本发明还提出了一种基于虚拟磁盘层的检测Raid磁盘拔出的装置,所述装置包括:
VSD建立模块301,用于建立虚拟磁盘层VSD,所述VSD将磁盘阵列Raid的几何空间划分为保留区和数据区,所述保留区包括超级块区、位图bitmap索引区、坏块重定向索引区和坏块重定向数据区。
第一检测模块302,用于在坏块重定向过程中,所述虚拟磁盘层VSD实时检测所述坏块重定向数据区的磁盘坏块数量,当所述磁盘坏块数量超出设定阈值时,通知所述Raid磁盘拔出。其中,所述设定阈值小于等于所述Raid实际可容忍的坏块数量。
第二检测模块303,用于在执行读写操作时,所述虚拟磁盘层VSD实时检测所述读写操作是否有错误码返回,当所述错误码为磁盘介质错误时,通知所述Raid磁盘拔出。
本发明实施例中,所述第一检测模块302和第二检测模块303通过调用内部接口启动预设线程执行,通知所述Raid磁盘拔出,所述内部接口启动所述预设线程执行时,若所述预设线程还没有执行完毕,则返回,否则启动所述预设线程执行,其中,所述内部接口与磁盘物理拔出时所调用的底层接口相同。
本发明基于虚拟磁盘层的检测Raid磁盘拔出的方法及装置,具有以下有益效果:
自动发现磁盘错误并自动通知Raid磁盘拔出,提高了Raid的健壮性,减少非自动化的错误。
物理拔出磁盘事件在有IO的时候立即通知到Raid,消除磁盘拔出那个时间点可能的IO停顿。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。

Claims (7)

1.一种基于虚拟磁盘层的检测Raid磁盘拔出的方法,其特征在于,包括:
建立虚拟磁盘层VSD,所述VSD将磁盘阵列Raid的几何空间划分为保留区和数据区,所述保留区包括超级块区、位图bitmap索引区、坏块重定向索引区和坏块重定向数据区;
在坏块重定向过程中,所述虚拟磁盘层VSD实时检测所述坏块重定向数据区的磁盘坏块数量,当所述磁盘坏块数量超出设定阈值时,通知所述Raid磁盘拔出;
在执行读写操作时,所述虚拟磁盘层VSD实时检测所述读写操作是否有错误码返回,当所述错误码为磁盘介质错误时,通知所述Raid磁盘拔出。
2.根据权利要求1所述的方法,其特征在于,所述设定阈值小于等于所述Raid实际可容忍的坏块数量。
3.根据权利要求1所述的方法,其特征在于,所述通知所述Raid磁盘拔出具体为:通过调用内部接口启动预设线程执行,通知所述Raid磁盘拔出。
4.根据权利要求3所述的方法,其特征在于,所述内部接口启动所述预设线程执行时,若所述预设线程还没有执行完毕,则返回,否则启动所述预设线程执行。
5.根据权利要求3或4所述的方法,其特征在于,所述内部接口与磁盘物理拔出时所调用的底层接口相同。
6.一种基于虚拟磁盘层的检测Raid磁盘拔出的装置,其特征在于,所述装置包括:
VSD建立模块,用于建立虚拟磁盘层VSD,所述VSD将磁盘阵列Raid的几何空间划分为保留区和数据区,所述保留区包括超级块区、位图bitmap索引区、坏块重定向索引区和坏块重定向数据区;
第一检测模块,用于在坏块重定向过程中,所述虚拟磁盘层VSD实时检测所述坏块重定向数据区的磁盘坏块数量,当所述磁盘坏块数量超出设定阈值时,通知所述Raid磁盘拔出;
第二检测模块,用于在执行读写操作时,所述虚拟磁盘层VSD实时检测所述读写操作是否有错误码返回,当所述错误码为磁盘介质错误时,通知所述Raid磁盘拔出。
7.根据权利要求5所述的装置,其特征在于,所述设定阈值小于等于所述Raid实际可容忍的坏块数量。
CN201510058824.9A 2015-02-04 2015-02-04 一种基于虚拟磁盘层的检测Raid磁盘拔出的方法及装置 Active CN104793899B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510058824.9A CN104793899B (zh) 2015-02-04 2015-02-04 一种基于虚拟磁盘层的检测Raid磁盘拔出的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510058824.9A CN104793899B (zh) 2015-02-04 2015-02-04 一种基于虚拟磁盘层的检测Raid磁盘拔出的方法及装置

Publications (2)

Publication Number Publication Date
CN104793899A true CN104793899A (zh) 2015-07-22
CN104793899B CN104793899B (zh) 2017-10-03

Family

ID=53558722

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510058824.9A Active CN104793899B (zh) 2015-02-04 2015-02-04 一种基于虚拟磁盘层的检测Raid磁盘拔出的方法及装置

Country Status (1)

Country Link
CN (1) CN104793899B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105279057A (zh) * 2015-11-10 2016-01-27 浪潮(北京)电子信息产业有限公司 一种磁盘坏道检测方法与系统
CN108932113A (zh) * 2018-06-28 2018-12-04 郑州云海信息技术有限公司 一种磁盘管理方法、装置、设备及可读存储介质
CN111221467A (zh) * 2018-11-26 2020-06-02 深圳市茁壮网络股份有限公司 数据写入、读取方法及对应的装置
CN111367827A (zh) * 2018-12-26 2020-07-03 爱思开海力士有限公司 存储器系统及其操作方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101887386A (zh) * 2010-06-02 2010-11-17 深圳市迪菲特科技股份有限公司 一种磁盘阵列控制器故障处理方法及系统
US7849261B2 (en) * 2006-06-29 2010-12-07 Seagate Technology Llc Temperature control to reduce cascade failures in a multi-device array
CN103218279A (zh) * 2013-03-08 2013-07-24 福建星网视易信息系统有限公司 一种嵌入式系统硬盘的管理方法
CN103559108A (zh) * 2013-11-11 2014-02-05 中国科学院信息工程研究所 一种基于虚拟化实现主备故障自动恢复的方法及系统

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7849261B2 (en) * 2006-06-29 2010-12-07 Seagate Technology Llc Temperature control to reduce cascade failures in a multi-device array
CN101887386A (zh) * 2010-06-02 2010-11-17 深圳市迪菲特科技股份有限公司 一种磁盘阵列控制器故障处理方法及系统
CN103218279A (zh) * 2013-03-08 2013-07-24 福建星网视易信息系统有限公司 一种嵌入式系统硬盘的管理方法
CN103559108A (zh) * 2013-11-11 2014-02-05 中国科学院信息工程研究所 一种基于虚拟化实现主备故障自动恢复的方法及系统

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105279057A (zh) * 2015-11-10 2016-01-27 浪潮(北京)电子信息产业有限公司 一种磁盘坏道检测方法与系统
CN108932113A (zh) * 2018-06-28 2018-12-04 郑州云海信息技术有限公司 一种磁盘管理方法、装置、设备及可读存储介质
CN111221467A (zh) * 2018-11-26 2020-06-02 深圳市茁壮网络股份有限公司 数据写入、读取方法及对应的装置
CN111367827A (zh) * 2018-12-26 2020-07-03 爱思开海力士有限公司 存储器系统及其操作方法
CN111367827B (zh) * 2018-12-26 2023-03-03 爱思开海力士有限公司 存储器系统及其操作方法

Also Published As

Publication number Publication date
CN104793899B (zh) 2017-10-03

Similar Documents

Publication Publication Date Title
US9733844B2 (en) Data migration method, data migration apparatus, and storage device
US10146651B2 (en) Member replacement in an array of information storage devices
US10025667B2 (en) Management of storage devices
CN108153622B (zh) 一种故障处理的方法、装置和设备
US9710345B2 (en) Using unused portion of the storage space of physical storage devices configured as a RAID
CN104793899A (zh) 一种基于虚拟磁盘层的检测Raid磁盘拔出的方法及装置
US10324794B2 (en) Method for storage management and storage device
CN104765466A (zh) 移动终端的按键控制方法及装置
CN103294530A (zh) 一种终端设备应用程序管理方法及终端设备
CN108037894B (zh) 一种磁盘空间管理方法及装置
EP4036735A1 (en) Method, apparatus and readable storage medium
US9547456B2 (en) Method and apparatus for efficient data copying and data migration
CN104020960A (zh) 一种硬盘分区格式化与挂载的方法及装置
WO2015116197A1 (en) Storing data based on a write allocation policy
US8583959B2 (en) System and method for recovering data of complementary metal-oxide semiconductor
CN109196458B (zh) 存储系统可用容量计算方法及装置
US9104575B2 (en) Reduced-impact error recovery in multi-core storage-system components
CN110399168B (zh) 多数据盘存储服务器的系统启动方法、装置及设备
US20130151886A1 (en) Computing device and method for switching physical links of a sas expander of the computing device
CN109558066B (zh) 存储系统中恢复元数据的方法和装置
CN103246591A (zh) 信号处理的方法和装置
CN104516681B (zh) 数据储存系统及其控制方法
CN105573862B (zh) 一种恢复文件系统的方法和设备
CN110703988B (zh) 一种分布式存储的存储池创建方法、系统、终端及存储介质
US20120210061A1 (en) Computer and method for testing redundant array of independent disks of the computer

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
EXSB Decision made by sipo to initiate substantive examination
SE01 Entry into force of request for substantive examination
TA01 Transfer of patent application right
TA01 Transfer of patent application right

Effective date of registration: 20170331

Address after: Nanshan District Guangdong streets, Shenzhen city 518131 Guangdong Province Road No. 8 financial services technology innovation base 1 building 11 floor F3

Applicant after: Shenzhen science and Technology Co.,Ltd. digital cloud data

Address before: 100085 Beijing, Haidian District, No. 9 on the ground floor of the digital science and Technology Plaza, 9

Applicant before: YUNKE CHINA DATA TECHNOLOGY LTD.

GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20190715

Address after: 430200 Six Floors of 777B Office Building, Guanggu Third Road, Donghu New Technology Development Zone, Wuhan City, Hubei Province

Patentee after: Wuhan Shenzhou Digital Cloud Technology Co.,Ltd.

Address before: Nanshan District Guangdong streets, Shenzhen city 518131 Guangdong Province Road No. 8 financial services technology innovation base 1 building 11 floor F3

Patentee before: Shenzhen science and Technology Co.,Ltd. digital cloud data

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20230417

Address after: 6 / F, office building B, No.777, Guanggu Third Road, Donghu New Technology Development Zone, Wuhan, Hubei 430200

Patentee after: Wuhan Shenzhou Digital Cloud Technology Co.,Ltd.

Patentee after: Shenzhou Yunke (Beijing) Technology Co.,Ltd.

Address before: 6 / F, office building B, No.777, Guanggu Third Road, Donghu New Technology Development Zone, Wuhan, Hubei 430200

Patentee before: Wuhan Shenzhou Digital Cloud Technology Co.,Ltd.