KR20110031441A - 분산 raid 구현을 위한 방법 및 시스템 - Google Patents

분산 raid 구현을 위한 방법 및 시스템 Download PDF

Info

Publication number
KR20110031441A
KR20110031441A KR1020107029904A KR20107029904A KR20110031441A KR 20110031441 A KR20110031441 A KR 20110031441A KR 1020107029904 A KR1020107029904 A KR 1020107029904A KR 20107029904 A KR20107029904 A KR 20107029904A KR 20110031441 A KR20110031441 A KR 20110031441A
Authority
KR
South Korea
Prior art keywords
data
segment
data bank
command
volume
Prior art date
Application number
KR1020107029904A
Other languages
English (en)
Inventor
윌리암 씨 갤로웨이
라이언 에이 캘리슨
춘 셍 탄
그렉 제이 펠레그리노
Original Assignee
피봇3
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
Priority to US61/131,312 priority Critical
Priority to US13129008P priority
Priority to US13131208P priority
Priority to US13137908P priority
Priority to US13127008P priority
Priority to US13129108P priority
Priority to US13131408P priority
Priority to US61/131,290 priority
Priority to US61/131,291 priority
Priority to US61/131,314 priority
Priority to US61/131,379 priority
Priority to US61/131,270 priority
Application filed by 피봇3 filed Critical 피봇3
Publication of KR20110031441A publication Critical patent/KR20110031441A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from or digital output to record carriers, e.g. RAID, emulated record carriers, networked record carriers
    • G06F3/0601Dedicated interfaces to storage systems
    • G06F3/0668Dedicated interfaces to storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0689Disk arrays, e.g. RAID, JBOD
    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from or digital output to record carriers, e.g. RAID, emulated record carriers, networked record carriers
    • G06F3/0601Dedicated interfaces to storage systems
    • G06F3/0602Dedicated interfaces to storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from or digital output to record carriers, e.g. RAID, emulated record carriers, networked record carriers
    • G06F3/0601Dedicated interfaces to storage systems
    • G06F3/0602Dedicated interfaces to storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from or digital output to record carriers, e.g. RAID, emulated record carriers, networked record carriers
    • G06F3/0601Dedicated interfaces to storage systems
    • G06F3/0628Dedicated interfaces to storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from or digital output to record carriers, e.g. RAID, emulated record carriers, networked record carriers
    • G06F3/0601Dedicated interfaces to storage systems
    • G06F3/0628Dedicated interfaces to storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/065Replication mechanisms
    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2211/00Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
    • G06F2211/10Indexing scheme relating to G06F11/10
    • G06F2211/1002Indexing scheme relating to G06F11/1076
    • G06F2211/1028Distributed, i.e. distributed RAID systems with parity

Abstract

본원에 개신된 방법 및 시스템의 실시예들은 데이터 뱅크의 셋트를 포함하는 분산 RAID 시스템을 제공한다. 더욱 상세히는, 분산 RAID 시스템의 특정 실시예에서 각각의 데이터 뱅크는 연관된 저장 매체의 셋트를 포함하고 마찬가지의 분산 RAID 애플리케이션을 실행한다. 각각의 데이터 뱅크상의 분산 RAID 애플리케이션들은 데이터 뱅크의 연관된 저장 매체에 저장된 데이터와 공동으로 RAID의 레벨을 구현하는 것과 연관된 데이터 흐름을 제어 및 분배하기 위해 스스로 조정한다.

Description

분산 RAID 구현을 위한 방법 및 시스템{METHOD AND SYSTEM FOR DISTRIBUTED RAID IMPLEMENTATION}

본 발명은 일반적으로 저장 디바이스의 사용에 관한 것이다. 상세하게는, 본 발명의 실시예는 저장 디바이스상에 RAID를 구현하는 것에 관한 것이다. 더욱 상세하게는, 본 발명의 특정 실시예는 분산 RAID의 구현에 관한 것이다.

데이터는 대다수의 엔티티에 대한 중요한 자산을 나타낸다. 결과적으로, 우발적이거나 악의적인 동작에 의한 데이터 손실은 인력 낭비, 고객으로부터의 신뢰 상실, 시간 손실 및 잠재적인 법적 책임의 관점에서 볼 때 대가가 클 수 있다. 비지니스, 법적 또는 기타 목적들을 위해 데이터를 적합하게 보호할 수 있도록 하기 위해, 대다수의 엔티티는, 데이터 저장, 중복, 보안 등을 포함하는 여러 기술을 이용하여 자신들의 데이터를 보호하기를 바랄 수 있다. 그러나, 이 기술들은 그 데이터를 처리 또는 저장하는 데에 사용되는 컴퓨팅 디바이스의 구성 또는 상태에 의해 부과되는 요구사항 또는 기타 상충하는 제약사항과 충돌할 수 있다.

이러한 긴장 상황들을 다루기 위한 한 방법은 RAID(Redundant Array of Independent Disks)를 구현하는 것이다. 일반적으로 RAID 시스템은 신뢰성을 증대시키기 위해, 그리고 일부 경우엔 저장장치를 위한 이들 RAID 시스템을 사용하여 컴퓨팅 디바이스(호스트로 알려짐)의 처리율을 개선시키기 위해, 통칭하여 어레이로 지칭되는 다수의 하드 디스크 드라이브(또는 기타 저장 매체 유형)에 걸쳐 데이터를 분할하고 복제한다. 호스트에게는, RAID 어레이는 하나 이상의 모노리딕 저장 영역으로 보여질 수 있다. 호스트가 RAID 시스템과 통신(판독, 기록등)하기를 원하는 경우, 호스트는 RAID 어레이가 단일 디스크인 것처럼 통신한다. 한편 RAID 시스템은 이 통신내용들을 처리하여 그러한 통신내용들과 공동으로 특정한 RAID 레벨을 구현한다. 이 RAID 레벨들은 신뢰도, 저장용량, 속도등과 같은 다양한 상충사항들간에 소정의 바람직한 밸런스를 이루도록 설계될 수 있다. 예를 들어, RAID(레벨) 0은, 속도를 향상시키고 실질적으로 디스크의 전체 용량을 이용하지만, 디스크가 오류가 있는 경우엔 디스크상의 모든 데이터는 손실되는 방식으로 여러 디스크에 걸쳐 데이터를 분산시킴; RAID(레벨) 1은, RAID (레벨) 1은 각각이 동일한 데이터를 저장하는 두 개(또는 그 이상)의 디스크를 사용함으로써, 데이터는 하나의 디스크가 살아있는 한 손실되지 않음. 상기 어레이의 전체 용량은 실질적으로 단일 디스크의 용량이고 RAID(레벨) 5는, 임의의 한 디스크의 손실에 대해 데이터를 보호하는 방식으로 세 개 이상의 디스크를 결합한다. 상기 어레이의 저장 용량은 한 디스크 만큼 감소된다.

현재 기술의 RAID 구현에는 여러 문제점들이 있을 수 있다. 이 문제점들은, 대부분의 경우에 RAID 시스템과의 모든 통신은 RAID 시스템을 제어 및 관리하는 단일 서버에 대해 주소지정되어야만 한다는 사실등과 같은, 상기 RAID 시스템들의 구조에 의해 부과되는 제약사항들로부터 생긴다. 다른 문제점들은 RAID 시스템을 포함하고 있는 디스크상의 데이터의 구성 또는 레이아웃으로부터 생길 수 있다. 예를 들어, 특정한 경우엔, RAID 레벨은 RAID 시스템이 이용될 수 있기 이전에 선택되어야만 하고 저장 장치가 RAID 시스템내에 할당되어야 한다. 따라서, 초기에 선택된 RAID 레벨은 그 RAID 레벨이 바람직한 것인지 또는 필요로 되는 지에 무관하게, RAID 시스템상에 저장된 데이터와 공동으로 구현되어야 한다. 대부분의 경우에 상기한 바와 같은 종래의 문제점들은 이들 솔루션을 구현하기 위해 맞춤형 하드웨어 또는 소프트웨어를 사용해야 한다는 것에 의해 악화되어 왔고, 그러한 솔루션을 구현하는 것과 연관된 비용을 상승시킨다. 결과적으로, 상기한 바와 같은 종래의 문제점들을 개선하는 것이 요망된다.

본원에 개시된 시스템 및 방법의 실시예들은 데이터 뱅크의 셋트를 포함하는 분산 RAID 시스템을 제공한다. 상세하게는, 분산 RAID 시스템의 특정 실시예에서, 각각의 데이터 뱅크는 연관된 저장 매체의 셋트를 가지며 유사한 분산 RAID 애플리케이션을 실행한다. 각각의 데이터 뱅크상의 분산 RAID 애플리케이션은 스스로 그들간에 조정하여 데이터 뱅크의 연관된 저장 매체에 저장된 데이터와 공동으로 RAID 레벨을 구현하는 것과 연관된 데이터 흐름을 분산 및 제어한다.

상세하게는, 한 실시예에서, 연관된 RAID 레벨을 갖는 볼륨(volume)은 분산 RAID 시스템을 사용하여 생성될 수 있다. 각각의 분산 RAID 애플리케이션은 그 볼륨과 연관된 데이터 또는 그 볼륨과 공동으로 소망하는 RAID 레벨의 구현과 연관된 데이터가 분산 RAID 시스템의 다수의 데이터 뱅크에 저장될 수 있도록 그 볼륨의 데이터와 연관된 동작을 조정할 수 있다.

다수의 데이터 뱅크의 각각에서 실행하는 유사한 분산 RAID 애플리케이션을 사용하여 상기 다수의 데이터 뱅크에 RAID의 구현과 연관된 데이터 및 볼륨의 데이터 양자 모두를 저장함으로써 볼륨과 공동으로 RAID 레벨의 구현을 조정함으로써, 다수의 이점이 달성될 수 있다. 즉, 상이한 RAID 레벨과 공동으로 구현된 하나 이상의볼륨들로써, 상이한 저장 볼륨들이 할당될 수 있다. 더욱이, 데이터 뱅크에 걸쳐 RAID를 구현하는 것과 저장장치의 조정은 실질적으로 동일한 분산 RAID 애플리케이션을 사용하여 달성되므로, 대부분의 경우엔 표준 x86 기반 서버 및 저장 매체와 같은 표준 또는 규격품(off-the-shelf) 하드웨어가 이용될 수 있다.

더욱이, RAID 시스템의 각각의 데이터 뱅크에 걸쳐 제어를 분산시킴으로써, 각각의 데이터 뱅크상의 각각의 분산된 RAID 애플리케이션들은 실질적으로 독자적으로 실행할 수 있다. 또한, 일정한 오류 허용 정도는 한 데이터 뱅크가 손실될 수 있으므로 구조적인 면에서 내재적인 것일 수 있고 RAID 시스템은 RAID 시스템을 이용하는 각각의 호스트에 대해 끊김없는 방식(seamlessly)으로 동작할 수 있다.

더욱이, 본원에 제시된 시스템 및 방법의 실시예의 부수적인 효과로서, 성능면에서 훨씬 적은 보틀넥이 있으므로 개선된 성능이 달성될 수 있고, 각각의 호스트가 스위치에 연결될 수 있고 각각의 데이터 뱅크가 상기 스위치에 연결될 수 있음에 따라 증가된 대역폭이 달성될 수 있고 이러한 분산된 RAID 시스템의 확장 및 축소는 상대적으로 끊김없는 방식으로 달성될 수 있다.

본 발명의 상기한 양상 및 기타 양상들은 하기의 상세한 설명 및 첨부 도면과 연계하여 고려할 때 더욱 잘 인식되고 이해될 것이다. 하기의 설명은, 발명의 여러 실시예 및 이 실시예의 특정한 여러 상세한 내용을 지시하지만, 단지 예시적인 것으로서 설명되며 제한적인 의미의 것으로서 설명되는 것은 아니다. 다수의 대체, 수정, 부가 또는 재배열 구성등이 본 발명의 범위내에서 행해질 수 있고, 본 발명은 그러한 모든 대체, 수정, 부가 또는 재배열 구성등을 포함한다.

본 발명에 따르면, 분산 RAID 구현을 위한 방법 및 시스템을 제공할 수 있다.

본원의 일부를 구성하는 첨부 도면은 발명의 특정 양상을 설명하기 위해 포함된다. 본 발명의 명확한 이해 및 본 발명에 제공된 시스템의 컴포넌트 및 동작들은, 도면에 나타낸 실시예들을 예시적인 것으로 즉, 비제한적인 것으로 참조함으로써 더욱 용이하게 분명히 이해될 것이고, 도면에서 동일한 도면 참조 부호는 동일한 컴포넌트를 지정한다. 도면에 나타낸 특징들은 반드시 동일한 축척 비율을 나타낸 것은 아니다.
도 1은 분산 RAID 시스템을 채용하는 구조의 한 실시예의 블록도를 나타낸 도면이다.
도 2A는 데이터 뱅크의 한 실시예의 블록도를 나타낸 도면이다.
도 2B는 데이터 뱅크에 대한 구조의 한 실시예의 블록도를 나타낸 도면이다.
도 3은 분산 RAID 시스템에 의해 구현된 방법의 한 실시예의 흐름도를 나타낸 도면이다.
도 4는 분산 RAID 시스템을 채용하는 구조의 한 실시예의 예시적인 블록도를 나타낸 도면이다.
도 5는 테이블의 한 실시예의 블록도를 나타낸 도면이다.
도 6은 테이블의 한 실시예의 블록도를 나타낸 도면이다.
도 7은 테이블의 한 실시예의 블록도를 나타낸 도면이다.
도 8은 분산 RAID 시스템에 의해 구현된 방법의 한 실시예의 흐름도를 나타낸 도면이다.
도 9A는 분산 RAID 시스템에 의해 구현된 방법의 한 실시예의 흐름도를 나타낸 도면이다.
도 9B는 분산 RAID 시스템에 의해 구현된 방법의 한 실시예의 흐름도를 나타낸 도면이다.
도 10은 기록 캐쉬의 한 실시예의 블록도를 나타낸 도면이다.
도 11은 분산 RAID 시스템에 의해 구현된 방법의 한 실시예의 흐름도를 나타낸 도면이다.
도 12는 분산 RAID 시스템에 의해 구현된 방법의 한 실시예의 흐름도를 나타낸 도면이다.

본 발명 및 본 발명의 여러 특징 및 이점에 대한 상세사항들은 첨부 도면 및 하기의 발명의 상세한 설명에 설명한 비제한적인 실시예를 참조하여 더욱 완전하게 설명된다. 공지된 시작 요소, 처리 기술, 컴포넌트 및 장비들은 본 발명을 불필요하게 애매하게 하지 않도록 하기 위해 생략되었다. 그러나, 본 발명의 바람직한 실시예를 설명하는 중에, 상세한 설명 내용 및 특정한 예들은 단지 예시적인 것으로 설명된 것이며 제한하기 위해 설명된 것이 아님을 알아야 한다. 본 발명의 근간이 되는 원리의 범위 및/또는 사상의 범위내에서 여러 대체, 수정, 부가 및/또는 재배열 구성들은 당업자에게는 본 발명으로부터 명백할 것이다. 본원에 설명된 실시예들은 컴퓨터로 판독가능한 매체(예로서, HD), 하드웨어 회로등, 또는 이들의 임의의 조합에 상주하는 적합한 컴퓨터에서 실행될 수 있는 명령어로 구현될 수 있다.

특정한 실시예를 설명하기 전에, 특정 실시예를 구현하기 위한 하드웨어 구조에 대한 실시예가 설명된다. 한 실시예는 네트워크와 통신으로 연결된 하나 이상의 컴퓨터를 포함할 수 있다. 당업자가 알 수 있는 바와 같이, 컴퓨터는 중앙처리장치("CPU"), 적어도 하나의 판독전용 메모리("ROM"), 적어도 하나의 임의 접근 메모리("RAM"), 적어도 하나의 하드 드라이브("HD"), 및 하나 이상의 입력/출력("I/O") 디바이스를 포함할 수 있다. I/O 디바이스는 키보드, 모니터, 프린터, 전자 포인팅 디바이스(마우스, 트랙볼, 스트일리스트등과 같은) 등을 포함할 수 있다. 다양한 실시예에서, 컴퓨터는 네트워크를 통해 적어도 하나의 데이터베이스에 대한 액세스 권한을 갖는다.

ROM, RAM 및 HD는 CPU에 의해 실행될 수 있는 컴퓨터에서 실행될 수 있는 명령어를 저장하기 위한 컴퓨터 메모리이다. 본원의 설명에서, 용어 "컴퓨터로 판독가능한 매체"는 ROM, RAM 및 HD에 제한되지 않으며 프로세서에 의해 판독될 수 있는 임의의 유형의 데이터 저장 매체응 포함할 수 있다. 일부 실시예에서, 컴퓨터로 판독가능한 매체는 데이터 카트리지, 데이터 백업 자기 테이프, 플로피 디스켓, 플래시 메모리 드라이브, 광학식 데이터 저장장치 드라이브, CD-ROM, ROM, RAM 및 HD등을 지칭할 수 있다.

본원에 설명된 기능 및 프로세스의 적어도 일부분들은 컴퓨터에서 실행될 수 있는 적합한 명령어로 구현될 수 있다. 컴퓨터에서 실행될 수 있는 명령어는 하나 이상의 컴퓨터로 판독가능한 매체(비휘발성 메모리, 휘발성 메모리, DASD 어레이, 자기 테이프, 플로피 디스켓, 하드 드라이브, 광학식 저장 디바이스등 또는 임의의 기타 적합한 컴퓨터로 판독가능한 매체 또는 저장 디바이스)에서 소프트웨어 코드 컴포넌트 또는 모듈로서 저장될 수 있다. 한 실시예에서, 컴퓨터에서 실행될 수 있는 명령어는 컴파일된 C++, Java, HTML 또는 임의의 기타 프로그래밍 또는 스크립팅 코드의 라인들을 포함할 수 있다.

또한, 개시된 실시예의 기능들은 한 컴퓨터에서 또는 네트워크에 있는 또는 네트워크에 걸쳐 연결되어 있는 둘 이상의 컴퓨터들에 공유되거나/분산되어 구현될 수 있다. 실시예를 구현하는 컴퓨터들간의 통신은 임의의 전기 신호, 광신호, 무선 주파수 신호, 또는 공지된 네트워크 프로토콜에 맞는 적합한 통신 툴 또는 방법을 사용하여 행해질 수 있다.

본원에 기재된, 용어 "포함한다", "포함하는", "갖는다", "갖는" 또는 이들 용어에 대한 임의의 기타 변형용어들은 이들로 제한되지 않는 포함관계를 설명하는 것을 의도한다. 예를 들어, 일련의 구성요소를 포함하는 프로세스, 물품(article), 또는 장치는 반드시 그러한 구성요소로만 한정되는 것은 아니고 명시적으로 나타내지 않은 구성요소 또는 그러한 프로세스, 물품, 또는 장치에 본질적으로 내재된 구성요소를 포함할 수 있다. 또한, 명시적으로 반대의 의미로 설명하지 않는 한, "또는"은 포함관계를 의미하는 것으로서, 배제적인 것을 의미하는 것은 아니다. 예를 들어, 조건 A 또는 B는, A는 참(또는 존재함)이고 B는 거짓(또는 존재하지 않음), A는 거짓(또는 존재하지 않음)이고 B는 참(또는 존재함), 및 A 및 B 모두 참인 경우 중 어느 한 경우에 의해서도 충족된다.

또한, 본원에 나타낸 임의의 예 또는 예시 내용들은 이 내용들에 이용되는 임의의 용어 또는 용어들에 대한 제약 사항, 제한 사항 또는 정의 내용 중 어느 것으로도 간주되어선 안된다. 그 대신, 상기 예 또는 예시 내용들은 한 특정 실시예에 대해 설명된 것으로서 그리고 단지 예시적인 것으로서 간주되어야 한다. 당업자는 임의의 예 또는 예시 내용들에 이용되는 임의의 용어 또는 용어들이 기타 실시예에 있을 수 있거나 있지 않을 수 있는 또는 상세한 설명의 다른 설명부분에 있거나 있지 않을 수 있는 기타 실시예들을 포함할 것이라는 것을 인식할 것이고 그러한 모든 실시예들은 상기 용어 또는 용어들의 범위내에 포함되는 것으로 의도된다는 것을 알 것이다. 그러한 비제한적인 예 및 예시 내용을 지정하는 언어는 "예를 들어", "예를 들면", "예로서", "한 실시예에서"를 포함하지만 이들로 제한되는 것은 아니다.

본원은 Galloway등에 의해, 2009년 6월 5일 출원되고, 발명의 명칭이 "Method and System for Data Migration in a Distributed RAID Implementation"인 미국 특허출원 제 호(PIVOTlllO-1), Galloway등에 의해, 2009년 6월 5일 출원되고, 발명의 명칭이 "Method and System for Distributing Commands to Targets" 인 미국 특허출원 제 호(PIVOTll2O-1), Galloway등에 의해, 2009년 6월 5일 출원되고, 발명의 명칭이 "Method and System for Initilizing Storage in a Storage System"인 미국 특허출원 제 호(PIVOTll3O-1), Galloway등에 의해, 2009년 6월 5일 출원되고, 발명의 명칭이 "Method and System for Rebuilding Data in a Distributed RAID System" 인 미국 특허출원 제 호(PIVOTll4O-1), 및 Galloway등에 의해, 2009년 6월 5일 출원되고, 발명의 명칭이 "Method and System for Placement of Data on a Storage Device"인 미국 특허출원 제 호(PIVOTll5O-1)와 관련되고, 이들 문헌은 전부 본원에 참조문헌으로 포함되어 있는 것으로 한다.

특히 데이터 저장장치에 대한 간단한 설명이 유용할 것이다. 상기 설명한 바와 같이, RAID 시스템은 신뢰성을 증대시키기 위해 그리고 일부 경우엔 저장장치를위한 이들 RAID 시스템을 이용하여 컴퓨팅 디바이스(호스트로 알려짐)의 처리율을 개선시키기 위해, 어레이로 통칭되는 다수의 하드 디스크 드라이브(또는 기타 유형의 저장 매체)에 걸쳐 데이터를 분할 및 복제한다. 그러나, 현재 기술의 RAID 구현은 여러 문제점을 가질 수 있다. 이 문제점들은 상기 RAID 시스템들의 구조에 의해 부여되는 제한사항으로부터 RAID 시스템을 포함하는 디스크상의 데이터의 구성 또는 레이아웃으로부터, 또는 솔루션을 구현하기 위해 맞춤형 하드웨어 또는 소프트웨어를 사용할 필요성으로부터 생기는데, 그러한 솔루션의 구현과 연관된 비용을 증대시킨다. 무엇보다도, 상기한 바와 같은 문제점을 실질적으로 개선시킬 것이 요망된다.

이를 위해, 본 발명의 시스템 및 방법에 대해 설명한다. 이 시스템 및 방법들의 실시예는 데이터 뱅크의 셋트를 포함하는 분산 RAID 시스템을 제공한다. 더욱 상세히는, 분산 RAID 시스템의 특정 실시예에서 각각의 데이터 뱅크는 연관된 저장 매체의 셋트를 가지며 유사한 분산 RAID 애플리케이션을 실행한다. 각각의 데이터 뱅크상의 분산 RAID 애플리케이션은 데이터 뱅크의 연관된 저장 매체에 저장된 데이터와 공동으로 RAID의 레벨의 구현과 연관된 데이터 흐름을 분산 및 제어하기 위해 그들간에 스스로 조정한다.

상세하게는, 소정 실시예에서, 연관된 RAID 레벨을 갖는 볼륨은 분산 RAID 시스템을 사용하여 생성될 수 있다. 각각의 분산 RAID 애플리케이션은 그 볼륨과 연관된 데이터 또는 그 볼륨과 공동으로 소망하는 RAID 레벨의 구현과 연관된 데이터가 분산 RAID 시스템의 다수의 데이터 뱅크에 저장될 수 있도록 그 볼륨의 데이터와 연관된 동작을 조정할 수 있다.

상기 데이터 뱅크의 각각에서 실행하는 유사한 분산 RAID 애플리케이션을 사용하여 다수의 데이터 뱅크상에 RAID의 구현과 연관된 데이터 및 볼륨의 데이터 양자 모두를 저장하는 것에 의해 볼륨과 공동으로 RAID 레벨의 구현을 조정함으로써, 다수의 이점이 달성될 수 있다. 즉, 상이한 RAID 레벨과 공동으로 구현된 하나 이상의 볼륨들로써, 상이한 저장 볼륨들이 할당될 수 있다. 더욱이, 데이터 뱅크에 걸쳐 RAID를 구현하는 것과 저장장치의 조정은 실질적으로 동일한 분산 RAID 애플리케이션을 사용하여 달성되므로, 대부분의 경우엔 표준 x86 기반 서버 및 저장 매체와 같은 표준 또는 규격품(off-the-shelf) 하드웨어가 이용될 수 있다. 다수의 기타 이점들도 여기에 제시된 실시예 또는 기타 실시예를 이용하여 실현될 수 있고, 특히 상세하게 지시되거나 지시되지 않은, 이점들은 본 발명을 읽은 후 실현될 것이다.

이제 도 1을 참조하면, 분산 RAID 시스템의 한 실시예를 이용하는 시스템에 대한 구조의 블록도가 나타나 있다. 분산 RAID 시스템(100)은 데이터 뱅크(110)의 셋트를 포함하는 데, 각각의 데이터 뱅크(110)는 스위치(120) 모두와 통신으로 연결된다. 각각의 스위치(120)는 또한 각각의 호스트(102)에 연결됨으로써, 호스트(102)는 특정한 데이터 뱅크(110)에 대응하는 경로의 셋트를 통해 각각의 데이터 뱅크(110)와 통신할 수 있고, 각각의 경로는 스위치(120) 중의 하나를 포함한다.

데이터 뱅크(110), 스위치(120) 및 스위치(120)간의 통신 연결은 이더넷, SCSI, iSCSI, 광섬유 채널, 직렬 접속 SCSI("SAS(serial attached SCSI))", "ATA(advanced technology attachment)", 시리얼 ATA("SATA(serial ATA)", 또는 당업계에 공지된 기타 프로토콜을 포함하는, 소망하는 대부분의 임의의 전송 매체(유선 또는 무선)를 사용하여 달성될 수 있다. 또한, 통신 연결은 인터넷, LAN, WAN, 무선 네트워크 또는 당업계에 공지된 임의의 기타 통신 네트워크와 같은 통신 네트워크와 공동으로 구현될 수 있다.

한 실시예에서, iSCSI, SCSI등과 같은 커맨드 프로토콜을 이용하여, 호스트(102)는 데이터를 조작하기 위해 데이터 뱅크(110)와 통신할 수 있다. 더욱 상세히는, 각각의 데이터 뱅크(110)는 (하기에 더욱 상세히 설명되는 바와 같이) 저장 매체를 포함한다. 집합적으로, 데이터 뱅크(110)내의 저장 매체는 가상화되어 하나 이상의 연속적인 저장 블록, 저장 디바이스등으로서 호스트(102)에 제공될 수 있다. 예를 들어, iSCSI 프로토콜이 이용되는 경우, 데이터 뱅크(110)내의 저장 매체는, 한 실시예에서, 다수의 포트를 갖춘, SCSI 타겟으로서 호스트(102)에 제공될 수있다.

따라서, 동작 동안, 한 실시예에서, 호스트(102)(또는 호스트(102)에 있거나 데이터 뱅크(110)와 상호작용하는 사용자)는 볼륨의 생성을 요청하고 그 볼륨과 공동으로 구현되어야 할 RAID의 레벨을 지정할 수 있다. 그 볼륨과 연관된 데이터 및 그 볼륨과 연관되어 소망하는 레벨의 RAID를 구현하는 것과 연관된 데이터는 데이터 뱅크(110)에 걸쳐 저장된다. 호스트(102)는 그러면 그 볼륨 또는 볼륨의 일부에 대응하는 논리적 주소를 이용하여 이 볼륨을 액세스할 수 있다. 이러한 방식으로, 호스트(102)는 생성된 저장 볼륨을 이용할 수 있고 오류 허용오차는 호스트(102)에게는 실질적으로 보이지 않게 상기 볼륨들과 공동으로 달성될 수 있다.

데이터 뱅크(110)를 이용하는 RAID의 구현 및 저장장치의 가상화는 분산 RAID를 구현하기 위해 동작할 수 있는 데이터 뱅크(110) 컴퓨터의 한 실시예에 대한 블록도를 나타내는 도 2A를 참조하여 더욱 잘 이해될 것이다. 여기서, 데이터 뱅크(110)는 데이터는 데이터 스토어(250), 및 명령어가 분산 RAID 애플리케이션(210)을 실행하도록 동작가능한, 컴퓨터로 판독가능한 매체에 저장된 명령어를 실행하도록 동작가능한 프로세서(202)를 포함한다. 분산 RAID 애플리케이션(210)은 해당 데이터 뱅크(110)가 오류상태에 있는 지의 여부를 결정하기 위해 다른 데이터 뱅크(110)상의 분산 RAID 애플리케이션(210)에 하트비트 통신을 주기적으로 발행할 수 있다. 분산 RAID 애플리케이션(210)이 또다른 데이터 뱅크(110)에 오류가 있는 것으로 결정한다면, 그 데이터 뱅크(110)에 대응하는 하나 이상의 오류 플래그를 셋트시킬 수 있다. 각각의 데이터 뱅크(110)상의 각각의 분산 RAID 애플리케이션(210)에 대해 상기 오류 플래그들을 사용하여, 특정한 분산 RAID 애플리케이션(210)은 특정한 데이터 뱅크(110)가 오류상태에 있는 지를 결정할 수 있다.

분산 RAID 애플리케이션(210)은 또한 예를 들어, SATA, PATA, FC등과 같은, 거의 모든 임의의 공지된 프로토콜에 따라 동작하는 디스크로서 각각의 디스크(252)가 동일 크기이거나 동일 크기가 아닐 수 있는, 하나 이상의 저장 매체를 포함하는 데이터 스토어(250)에 대한 액세스(예로서, 판독, 기록, 커맨드 발행등)권한을 가질 수 있다. 각각의 데이터 뱅크(110)상에서 실행하는, 분산 RAID 애플리케이션(210)은, 데이터 뱅크(110)에 걸쳐 데이터 스토어(250)를 사용하여 볼륨을 할당 및 사용할 수 있도록 하고 데이터 뱅크(110), 로컬 테이블(245)의 셋트 및 기록 캐쉬(260)-이들은 모두 메모리(230)(이것은 데이터 스토어(250) 또는 다른 메모리일 수 있음)에 저장될 수 있음-들간에 공유된 글로벌 테이블(245)의 셋트를 이용하여 상기 볼륨들과 공동으로 RAID를 구현할 수 있도록 할 수 있다.

도 2B는 분산 RAID를 구현하도록 동작할 수 있는 데이터 뱅크(110) 컴퓨터를 구현하는 데에 사용될 수 있는 하드웨어 구조의 한 실시예의 블록도를 나타낸다. 이 예시적인 구조에서, 데이터 뱅크(110)는 인텔 x86 구조 또는 임의의 기타 구조에 부가될 수 있는 하나 이상의 프로세서(202) 및, 버스를 통하여 I/O 제어기 허브(212)에 연결된 메모리를 포함하고, 이는 한 실시예에서 사우스브리지 칩등일 수 있다. I/O 제어기 허브(212)는 한편으로 PCI-X 버스, PCI-익스프레스 버스등과 같은 버스(272)에 연결될 수 있고 제어할 수 있다. 이 버스(272)에는 예를 들어, LSI(1068) SATA/SAS 제어기와 같은, 하나 이상의 디스크 제어기(262)가 연결된다. 이 디스크 제어기(262)의 각각은 하나 이상의 디스크(252)에 연결되는 데, 여기서 이 디스크(252)들은 집합적으로 데이터 스토어(250)를 구성한다. 또한, 하나 이상의 이 네트워크 인터페이스(282)들은 버스(272)에 연결될 수 있다. 하나 이상의 네트워크 인터페이스(282)는 마더보드에 포함될 수 있는 네트워크 인터페이스들(이더넷등과 같은)일 수 있고, 이더넷, 광섬유 채널등과 같은 하나 이상의 프로토콜을 통해 인터페이스하도록 구성된 하나 이상의 네트워크 인터페이스 카드를 포함할 수 있거나, 데이터 뱅크(110)가 네트워크 인터페이스(282)를 통하여 스위치(120)와 통신할 수 있도록 기타 유형의 네트워크 인터페이스일 수 있다.

이제 도 3을 참조하면, 데이터 뱅크(110)에 걸쳐 데이터 스토어(250)내의 볼륨들과 연관된 데이터의 레이아웃 및 볼륨의 할당을 위한 방법에 대한 실시예가 예시되어 있다. 맨처음에, 볼륨이 데이터 스토어(250)의 디스크(252)상에 할당되기 이전에, 디스크(252)는 단계(305)에서 포맷팅될 수 있다. 상기 설명한 바와 같이, 임의의 고장으로부터 용이하고 간단하게 복구할 능력을 갖기 위해선 중복(redundancy) 데이터는 임의의 대응하는 저장된 데이터에 대해 정확해야 할 필요가 있다. 대부분의 경우에, 이것은 볼륨을 저장하는 데에 이용된 디스크(252)가, 볼륨의 일부분이 저장되어야 할 디스크(252)상의 영역에 저장된 데이터가 현재 쓰레기값을 갖는 상태에 있는 경우에도, 상기 영역에 있는 현재 데이터로부터 중복 데이터를 계산함으로써 포맷팅되는 것을 수반할 수 있다. 이 계산은 바람직하지 못하게 상당한 양의 시간을 소비할 수 있다.

또한, 도 1에 대해 상세히 설명한 바와 같은 분산 RAID 환경에서, 기타 문제점들을 자체적으로 제시할 수 있다. 더욱 상세히는, 볼륨의 상이한 부분이 상이한 데이터 뱅크(110)에 저장되고 이 볼륨에 대응하는 중복 데이터도 여러 데이터 뱅크(110)에 저장될 수 있으므로, 상기한 유형의 포맷팅을 달성하는 것은 또한 데이터 뱅크(110)상의 분산 RAID 애플리케이션들간에 상당한 양의 통신을 필요로 하고, 이는 프로세서 사이클 및 통신 대역폭을 소모한다.

따라서, 한 실시예에서, 중복 데이터가, 볼륨의 데이터가 저장되는 디스크의 영역에 대응하는 중복 데이터가 상기 볼륨의 데이터가 저장되는 디스크(252)의 영역에 대해 정확성을 유지하도록 하기 위해, 제로 값이 상기 볼륨에 대응하는 데이터가 저장되는 디스크(252)의 영역 및 중복 데이터가 저장되는 디스크(252)의 영역에 기록될 수 있다. 볼륨의 데이터가 저장되는 디스크(252)의 영역 및 중복 데이터가 저장되는 디스크(252)의 영역 모두에 제로를 기록함으로써, 볼륨의 임의의 데이터가 그 대응하는 중복 데이터로부터 재생성될 수 있는 것이 보장될 수 있다.

제로가 기록되는 디스크(252)는 그 밖의 이점들을 가질 수 있다. 즉, 중복 데이터를 결정하기 위해 복잡한 계산이 수행될 필요가 없으며 볼륨이 저장되어야 하는 영역과 이들 영역에 대응하는 중복 데이터간의 상대적 정확성을 달성하기 위해 분산 RAID 애플리케이션(210)들간에 어떠한 통신도 필요로 되지 않을 수 있다.

중요한 것은, 볼륨에 사용하기 위해 디스크(252)의 소정 영역 및 그 대응하는 중복 데이터에 제로를 기록함으로써 RAID 시스템의 활용성에 있어서의 상당한 지연이 방지될 수 있다. 이러한 이점들은, 예를 들어, 분산 RAID 시스템(100)의 초기 사용, 새로운 디스크(252)의 초기화, 볼륨의 삭제등으로부터 초래되는, 디스크(252)의 비할당 영역을 동작 동안 연속적으로 제로를 기록하는 프로세스를 이용하여 달성될 수 있다. 이러한 경우에, 각각의 데이터 뱅크(110)상의 디스크(252)의 현재 비할당(즉, 현재 할당되지 않은) 영역은 제로가 기록되어 있을 수 있다(이하에선 "제로화(zeroing)" 영역으로 지칭함).

제로화된(zeroed) 디스크(252)의 비할당 영역은 볼륨의 일부분에 대응하는 커맨드 또는 볼륨의 일부분과 연관된 중복 데이터가 상기 부분이 할당된 데이터 뱅크(110)에서 수신되는 경우, 분산 RAID 애플리케이션(210)이 볼륨의 일부분이 할당되어 있는 데이터 뱅크(110)상의 디스크(252)의 대응 영역에 상기 볼륨의 일부분이 할당되었는 지를 결정하기 위해 검사할 수 있도록, 추적될 수 있다. 데이터 뱅크(110)상의 디스크(252)의 어떠한 대응 영역도 할당되지 않았으면, 분산 RAID 애플리케이션(210)은 제로화되어 있는 디스크(252)의 영역을 선택하고 디스크(252)의 이 영역을 볼륨의 상기 일부분 또는 대응하는 중복 데이터에 할당할 수 있다.

이전에 제로화되지 않은 임의의 비할당 영역을 동시에 제로화함으로써 그리고 볼륨의 일부분 또는 중복 데이터에 대응하는 커맨드가 디스크(252)의 제로화된 영역을 상기 볼륨의 일부분에 할당하기 위해 수신될 때 까지 대기함으로써, 분산 RAID 시스템(100)은 오랜 기간 수반되는 포맷팅 프로세스 없이 실질적으로 즉시 동작할 수 있고 새로운 디스크(252)가 부가될 수 있고 볼륨은 분산 RAID 시스템(100)의 동작에 대해 비교적 은밀하지만 효과적으로 삭제되거나 자유상태로 될 수 있다.

그러므로, 상기 설명을 읽은 후엔, 디스크(252)가 포맷팅되는 단계(305)는 분산 RAID 시스템(100)에 대해 볼륨을 생성하기 전, 생성 동안 또는 생성 후 달성될 수 있다는 것을 알 수 있고, 그리고 단계(305)(및 본원에서의 모든 흐름도의 그 밖의 모든 단계들)의 배치는 단계들에 대해 반드시 그러한 순서이어야 한다는 것이 아님을 알게 될 것이다. 도 3의 단계의 나머지 및 본원의 개시 내용의 나머지 부분들을 완전히 검토한 후엔, 볼륨이 생성될 수 있고 볼륨의 일부분 및 상기 볼륨에 대응하는 중복 데이터는 상기 데이터 뱅크(110)상의 디스크(252)의 물리적 영역이 볼륨의 일부분 또는 중복 데이터를 저장하기 위해 할당되기 전에 데이터 뱅크(110)에 할당될 수 있고, 또한, 상기 일부분에 대응하는 데이터를 저장하기 위해 사용되는 디스크(252)상의 물리적 영역의 제로화는 볼륨의 생성 전에 또는 볼륨의 생성 후 이면서 상기 물리적 영역이 볼륨 또는 중복 데이터의 대응하는 일부분에 할당되기 이전에 발생할 수 있다(하기에서 더욱 상세히 설명됨)는 것을 알게 될 것이다.

이 로케이션들은, 한 세그먼트가 2048개 논리 블록 주소(LBA)(또는 일부 기타 사이즈) 및 논리 블록 주소가 디스크(252)의 섹터 사이즈에 대응하는, 분산 RAID 애플리케이션(210)의 실시예에 의해 이용될 수 있는 세그먼트의 개념을 참조하여 더욱 양호하게 설명될 수 있다. 각각의 데이터 뱅크(110)상의 데이터 스토어(250)의 디스크(252)는 단계(310)에서 동일 크기의 세그먼트(예로서, 1MB)로 분할될 수 있다. 이 세그먼트들은 디스크 드라이브(252)의 하나 이상의 연속하는 데이터 블록에 대응할 수 있다. 그러므로, 단계(320)에서 사용자 또는 호스트(102)가 분산 RAID 애플리케이션(210)으로부터 볼륨의 생성을 요청하고 단계(330)에서 볼륨과 공동으로 사용될 RAID의 레벨을 지정하는 경우, 단계(340)에서 요청된 볼륨의 사이즈에 대응하는 세그먼트들의 수와 볼륨과 공동으로 소망하는 RAID의 레벨을 구현하기 위해 요망되는 세그먼트의 수를 더한 것이 볼륨에 할당될 수 있다.

따라서, 볼륨은 다수의 세그먼트(논리 세그먼트로도 지칭됨)를 포함하는 데, 여기서 이들 세그먼트의 각각은 데이터 뱅크(110)가 그 볼륨의 세그먼트를 관리하기 위해 할당될 수 있도록 특정한 데이터 뱅크(110)와 연관될 수 있다. 이 세그먼트는 예를 들어, 2048개 논리 블록 주소(LBA)들의 사이즈일 수 있는 데, 여기서 논리 블록 주소의 사이즈는 디스크(252)의 섹터 사이즈에 대응한다(기타 배열 및 사이즈도 가능하다). 대부분의 경우에, 볼륨의 상기 세그먼트를 포함하는 물리적 저장장치는 상기 세그먼트를 관리하는 데이터 뱅크(110)의 데이터 스토어(250)에 저장될 것이지만, 그 밖의 경우엔 상기 세그먼트에 대응하는 데이터는 상이한 데이터 뱅크(110)의 데이터 스토어(250)에 저장될 수 있다(다른 말로 하면, 특정한 경우엔 그 세그먼트를 관리하는 분산 RAID 애플리케이션을 포함하는 데이터 뱅크(110)에는 그 세그먼트에 대응하는 데이터를 저장하는 데이터 스토어(250)를 포함하는 데이터 뱅크(110)와 별개의 것일 수 있다).

한 실시예에서, 세그먼트를 특정 볼륨에 대응하는 데이터 뱅크(110)에 할당하는 것은 분산 RAID 시스템(100)에 대응하는 데이터 뱅크(110)의 셋트에 대한 무작위 순열을 결정함으로써 달성될 수 있다. 따라서, 6개 데이터 뱅크가 있다면 사이즈 6인 무작위 순열이 있고, 여기서 상기 무작위 순열은 세그먼트가 무작위 순열의 순서로 연속하여 각각의 데이터 뱅크에 할당될 수 있도록 결정될 수 있는 각각의 데이터 뱅크를 포함한다.

예를 들어, 분산 RAID 시스템에 4개의 데이터 뱅크(110)(데이터 뱅크 1, 데이터 뱅크 2등으로 지칭됨)가 있다고 가정하자. 데이터 뱅크 2, 데이터 뱅크 4, 데이터 뱅크 1 및 데이터 뱅크 3인 무작위 순열이 결정될 수 있다. 이 경우, 볼륨에 대응하는 제1 세그먼트는 데이터 뱅크2에 있고, 제2 세그먼트는 데이터 뱅크4에 있을 수 있고, 제3 세그먼트는 데이터 뱅크1에 있을 수 있고, 제4 세그먼트는 데이터 뱅크3에 있을 수 있고, 제5 세그먼트는 또다시 데이터 뱅크4에 있을 수 있다. 이러한 방식으로, 볼륨에 대응하는 특정 세그먼트의 위치는 볼륨에 대응하는 무작위 순열이 알려진다면 수학적으로 계산될 수 있다.

상기 설명한 바와 같이, 사용자는 단계(330)에서 RAID의 레벨이 볼륨과 공동으로 구현되어야 함을 명시할 수 있다. 이 경우, 분산 RAID 애플리케이션(210)은 볼륨과 공동으로 RAID의 구현에 대응하는 임의의 데이터가 소망하는 RAID의 레벨이 달성되는 것을 보장하기 위해 RAID 정보가 데이터 뱅크(110)에 걸쳐 적합하게 분산되도록 단계(350)에서 적합한 위치에 저장된다는 것을 보장할 수 있다.

예를 들어, 볼륨과 공동으로 RAID 5를 구현하는 것이 요망된다면, 분산 RAID 애플리케이션(210)은 소망하는 RAID 패리티 그룹 사이즈를 (예를 들어, 사용자 구성 RAID 셋트에 기초하여 또는 그렇지 않은 경우엔 결정된 것에 기초하여) 결정할 수 있다. 이 결정은 분산된 RAID 시스템에서 데이터 뱅크(110)의 수에 기초할 수 있고, 한 실시예에서, 데이터 뱅크(110)의 수(패리티 데이터인 것을 설명하기 위해선 추가적으로 1을 더함) 보단 1 작을 수 있다.

예시적으로 설명하기 위해, 볼륨(데이터 세그먼트들로 지칭됨)과 연관된 데이터를 저장하는 매 4개 세그먼트 마다에 대해, 5개의 데이터 뱅크(110)가 있다면, 한 세그먼트는 패리티에 전용될 것이고 4개 세그먼트에 대한 패리티는 계산되어 상기 패리티 세그먼트에 저장될 수 있고, 여기서 패리티 세그먼트는 그 데이터 스토어(250)가 패리티 세그먼트의 패리티 데이터를 계산하는 데에 이용된 데이터 세그먼트를 포함하지 않는 데이터 뱅크(110)에 전용되게 될 것이다.

이 시점에서, 논리 볼륨에 대응하는 각각의 세그먼트는 특정한 데이터 뱅크(110)에 할당되어 있고 볼륨에 대응하는 RAID 데이터를 저장하는데에 이용되는 임의의 세그먼트(100)(본원에서, 볼륨과 공동으로 임의 레벨의 RAID의 구현과 연관된 임의 유형의 중복 데이터를 저장하기 위해 세그먼트의 사용에 대한 일반적인 적용성을 손상하지 않고, 중복 세그먼트 또는 패리티 세그먼트로서 상호 교환하여 지칭될 수 있음)도 데이터 뱅크(110)에 할당되어 있지만, 데이터 뱅크의 데이터 스토어(250)의 디스크(252)의 물리적 섹터는 상기 세그먼트들에 대응하는 데이터를 저장하기 위해 아직 할당되어 있지 않다. 따라서, 단계(360)에서 볼륨의 논리 세그먼트가 할당되어 있는 데이터 뱅크(110)상의 디스크(252)의 물리적 세그먼트가 결정될 수 있고 논리 세그먼트에 할당될 수 있다. 이 세그먼트 매핑은 각각의 데이터 뱅크(110)의 논리 테이블(245)들에 저장될 수 있다. 이 할당은, 상기 설명한 바와 같이, 예를 들어, 커맨드가 먼저 논리 세그먼트를 기록하려고 맨처음 시도할 때, 소정의 나중 시점에 발생할 수 있다.

이 할당을 행할 때, 한 실시예에서 디스크(252)의 상이한 수행 특성의 영역은 액세스된 할 논리 세그먼트에 대해 처리될 수 있다. 다른 말로 하면, 디스크(252)는 동일 디스크의 다른 세그먼트들 보다 더욱 효율적으로 액세스되는 세그먼트를 가질 수 있다. 그러므로, 한 실시예에서 논리 세그먼트와 연관된 기준에 기초하여 디스크(252)의 물리적 세그먼트를 할당하는 것이 바람직할 수 있다. 이러한 특성은 예를 들어, 논리 세그먼트에 대응하는 볼륨과 연관된 서비스 지정 품질, 논리 세그먼트등을 포함하는 볼륨에 대한 액세스의 수와 같은 것들을 포함할 수 있다.

단계(370)에서, 볼륨에 대응하는 정보가 저장될 수 있고, 그 결과 볼륨에 대응하는 세그먼트의 위치, 또는 볼륨과 공동으로 RAID의 구현에 대응하는 세그먼트가 상기 저장된 정보로부터 결정될 수 있다. 이 저장된 정보(집합적으로 매핑 데이터로 지칭됨)는 그러므로 볼륨에 대한 식별, 볼륨에 대응하는 무작위 순열(예로서, 세그먼트가 위치되는 데이터 뱅크(110)의 순서를 지시함) 및 임의의 RAID 구현(예로서, 볼륨이 4+1 RAID 셋트, 7+1 RAID 셋트에 대응하고, RAID 1이 구현된다면, 등등)의 패리티 그룹 사이즈를 포함할 수 있다. 이 데이터는, 각각의 분산 RAID 애플리케이션(210)과 연관된 테이블(240)의 셋트의 적어도 일부분이 실질적으로 위치와 일관성을 유지하도록 보장하기 위해 상기 데이터가 다른 데이터 뱅크(110)상의 다른 분산 RAID 애플리케이션(210)에 전달될 수 있도록, 예를 들어, 글로벌 테이블(240)에 저장될 수 있다.

상기 설명은 5개 데이터 뱅크(110)를 갖춘 분산 RAID 시스템의 한 실시예를나타내는 도 4를 참조하여 더 잘 이해될 수 있다. 여기서, 각각의 데이터 뱅크(110)의 각각의 데이터 스토어(250)는 동일한 사이즈의 세그먼트(402)-이 예로 든 세그먼트의 사이즈는 1MB인 것으로 가정함-의 셋트로서 나타내었다. 이제, 호스트(102)는 데이터 뱅크(110b)상의 분산 RAID 애플리케이션(210b)으로부터 RAID 레벨 5를 갖춘 8MB의 볼륨을 요청한다고 가정한다. 이 경우에, 분산 RAID 애플리케이션(210b)은, 볼륨에 대한 소망하는 RAID 레벨의 구현과 공동으로 볼륨에 대한 중복 데이터를 저장하기 위해선 두 개의 세그먼트(402)가 필요로 될 수 있는 반면에 볼륨의 데이터부분에 대해선 8개 세그먼트(402)가 필요로 된다고 결정할 수 있다. 분산 RAID 애플리케이션(210b)은 그후 볼륨에 대한 무작위 순열을 결정할 수 있다. 이 예를 위해, 무작위 순열은: 데이터 뱅크(110b), 데이터 뱅크(110d), 데이터 뱅크(110a), 데이터 뱅크(110c), 데이터 뱅크(110e)인 것으로 가정한다. 따라서, 데이터 뱅크(110b)에는 요청된 볼륨의 제1 세그먼트인, 세그먼트(402a)가 할당될 수 있고, 데이터 뱅크(110d)에는 요청된 볼륨의 제2 세그먼트인, 세그먼트(402b)가 할당될 수 있고, 데이터 뱅크(110a)에는 요청된 볼륨의 제3 세그먼트인, 세그먼트(402c)가 할당될 수 있고, 데이터 뱅크(110c)에는 요청된 볼륨의 제4 세그먼트인, 세그먼트(402d)가 할당될 수 있고, 데이터 뱅크(110e)에는 요청된 볼륨의 제5 세그먼트인, 세그먼트(402e)가 할당될 수 있다. 이 할당은 그후 데이터 뱅크(110b)에 요청된 볼륨의 제6 세그먼트인, 세그먼트(402f)가 할당될 수 있도록, 데이터 뱅크(110d)에 요청된 볼륨의 제7 세그먼트인, 세그먼트(402g)가 할당될 수 있도록, 데이터 뱅크(110a)에 요청된 볼륨의 제8 세그먼트인, 세그먼트(402h)가 할당될 수 있도록 무작위 순서로 제1 데이터 뱅크(110)에 대해 다시 시작한다.

볼륨과 연관된 데이터를 저장하기 위한 데이터 세그먼트(402a-402h)가 할당되었으면, 분산 RAID 애플리케이션(210b)은 그 RAID 레벨의 구현과 연관된 임의 데이터에 대해 세그먼트(402)를 할당할 수 있다. 이 예에서, RAID 5가 볼륨에 대해 요망되므로, 분산 RAID 애플리케이션(210b)은 5개의 데이터 뱅크(110)가 이용될 수 있음에 따라 (4+1) 패리티 셋트가 요망된다고 결정할 수 있다. 분산 RAID 애플리케이션(210b)은 그후 8개 세그먼트(402)와 공동으로 RAID 5를 구현하도록 패리티를 저장하기 위해 추가의 2개 세그먼트(402)가 필요로 될 수 있다고 결정할 수 있다.

더욱이, 특정한 셋트의 데이터 세그먼트(402)를 이용하는 생성된 패리티는 데이터 스토어에서 임의의 데이터 세그먼트(402)의 셋트를 갖는 데이터 뱅크(110)에 저장되지 않도록 될 것이 요망될 수 있다. 따라서, 분산 RAID 애플리케이션(210b)도 각각의 패리티 세그먼트가 결정된 RAID 패리티 그룹 사이즈, 제1 데이터 세그먼트(402a)의 위치등에 기초하여 할당될 위치를 결정할 수 있다. 여기서, 데이터 세그먼트(402a, 402b, 402c, 402d)에 저장된 데이터에 대응하는 패리티 데이터를 저장할 패리티 세그먼트(402i)는 데이터 뱅크(110c)의 데이터 스토어(250c)에 할당될 것인 반면에 데이터 세그먼트(402e, 402f, 402g, 402h)에 저장된 데이터에 대응하는 패리티 데이터를 저장할 패리티 세그먼트(402j)는 데이터 뱅크(110e)의 데이터 스토어(250e)에 할당될 것이다. 여기서 데이터 세그먼트(402a-402h)를 포함하는 볼륨과 공동으로 RAID의 구현과 연관된 패리티 정보를 저장하게 될 패리티 세그먼트(402i,402j)는 볼륨과 연관된 데이터를 저장하는 세그먼트(402a-402h)들로서 레이아웃되고 이들과 실질적으로 동일한 사이즈의 세그먼트로됨을 주목해야 한다.

따라서, 호스트(102)가 볼륨을 액세스할 때, 볼륨의 제1 데이터 세그먼트에 대응하는 논리 주소를 이용한 요청은 데이터 뱅크(110b)상의 데이터 세그먼트(402a)에 대응할 수 있고, 볼륨의 제2 데이터 세그먼트에 대응하는 논리 주소를 이용한 요청은 데이터 뱅크(110d)상의 데이터 세그먼트(402b)에 대응할 수 있다. 여기서, 할당된 데이터 세그먼트(402a-402h)들은 상이한 데이터 뱅크(110)에 상주할 수 있고 임의의 할당된 데이터 세그먼트(402a-402h)들의 위치는 그 볼륨과 연관된 무작위 순열을 이용하여 결정(예로서, 데이터 뱅크(110)에서 글로벌 테이블(240)에 저장된 바와 같이)될 수 있음을 주목해야 한다. 상기 설명한 바와 같이, 그러나, 데이터 뱅크(110)상의 데이터 스토어(250)는 가상화되어 있으므로, 요청하는 호스트는 데이터 스토어(250)내에서의 데이터 세그먼트(402)의 위치, 다수의 데이터 스토어(250)가 존재하는 것, 데이터 스토어(250)가 다수의 데이터 뱅크(110)에 걸쳐 확장되는 것을 알지 못할 수 있다. 호스트(102)는 단일한 연속 볼륨을 주소지정하는 것으로 여진다.

이 예에서 데이터 뱅크(110)상의 데이터 세그먼트(402)의 위치(및 데이터 뱅크(110)의 대응하는 무작위 순열)은 예시적인 것으로 설명되었으며 볼륨의 데이터 세그먼트(402)는 거의 모든 임의의 무작위, 또는 그 밖의 순열에 따라 임의의 데이터 뱅크(110)상의 임의의 데이터 스토어(250)에 위치될 수 있다는 것이 분명히 이해될 것이다. 더욱이, 각각의 세그먼트(402)는 이 예에선 1MB이지만, 이 세그먼트들은 일반성을 잃지 않고 임의의 사이즈일 수 있으며 1MB 사이즈는 단지 예시적인 목적으로 선택한 사이즈임을 알아야 한다.

상기 설명으로부터 알 수 있는 바와 같이, 특정한 데이터 세그먼트(402) 또는 패리티 세그먼트(402)의 위치는 볼륨 및 RAID 패리티 그룹 사이즈와 연관된 무작위 순열을 이용하여 알고리즘 방식(예를 들어, 볼륨에 대해 세그먼트를 할당하는 데에 사용되는 동일한 무작위 순열을 이용하여, 그 볼륨에 대한 패리티 세그먼트를 찾음)으로 결정될 수 있다. 따라서, 정보는 볼륨에 대응하는 식별과 공동으로, 예를 들어, 글로벌 테이블(240)의 셋트에, 저장될 수 있다. 더욱이, 이 글로벌 테이블(240)들은 데이터 뱅크(110)들간에 통신될 수 있거나, 그렇지 않으면, 갱신될 수 있어서, 각각의 데이터 뱅크(110)내의 글로벌 테이블(240)의 셋트의 적어도 일부분은 실질적으로 일관성있게 유지될 수 있다.

분산 RAID 애플리케이션(210)과 연관된 글로벌 테이블(240)에 관해 더욱 상세하게 간명하게 탐구하는 것이 유익할 수 있을 것이다. 상기 설명한 바와 같이, 한 실시예에서, 글로벌 테이블(240)은 분산 RAID 애플리케이션(210)에 의해 생성된 볼륨과 연관된 정보를 저장할 수 있는 데, 여기서 상기 글로벌 테이블(240)들은 그 볼륨내의 데이터 세그먼트와 연관된 데이터 뱅크(110)를 결정하는 데에 사용될 수 있거나 그 볼륨에 대응하는 데이터 세그먼트와 연관된 패리티 세그먼트가 위치될 수 있다. 글로벌 테이블(240)은 그러므로 한 셋트의 테이블을 포함할 수 있고, 각각의 테이블은 데이터 뱅크(110)에 대해 구현된 볼륨에 대응한다. 특히, 이 테이블(240)들 중 하나는 데이터 뱅크(110)의 데이터 스토어(250)가 볼륨의 특정 세그먼트를 포함하는 그 데이터 뱅크(110)를 식별하는데에 사용될 수 있는 데이터를 포함할 수 있다. 상세하게는, 이 테이블은 볼륨과 연관된 논리 주소를 이 논리 주소에 대응하는 세그먼트가 저장되는 데이터 뱅크(110)에 상관시키는데 에 사용될 수 있다.

도 5는 상기 유형의 테이블에 대한 한 실시예를 그래픽으로 나타낸 도면으로서, 각각의 볼륨은 연관된 테이블의 연관된 인스턴스를 가질 수 있다. 테이블(550)은 LV 번호(504), 세그먼트 사이즈(508), 세그먼트 카운트(512), 서비스 품질(QoS;Quality of Service)(514), 범위 카운트(518)에 대한 엔트리들, 제1범위(524a) 및 제2 범위(524b)로 표현된 범위 엔트리들에 대한 정보 및 임의 추가적인 범위 엔트리들(524n)에 대한 정보를 포함한다.

LV 번호(504)는 특정 볼륨을 식별하기 위해 사용되는 고유 번호이고, 세그먼트 사이즈(508)는 볼륨을 구현하는 데에 사용되는 세그먼트의 사이즈에 대응하고, 세그먼트 카운트(512)는 논리 볼륨에 대응하는 세그먼트의 수(예로서, 데이터 세그먼트의 수 및 중복 세그먼트의 수, 단지 데이터 세그먼트만의 수 등)에 대응하고, QoS(514)는 볼륨에 대해 구현될 것이 요망되는 서비스의 품질을 지시하고(이 QoS 지시자는 데이터 뱅크(110)에 저장된 다른 볼륨에 대한 상기 볼륨에 주어진 우선순위를 지시할 수 있음을 알아야 한다) 그리고 범위 카운트(518)는 볼륨과 연관된 범위의 수를 지시하는 반면에, 범위 엔트리들은 각각 이들 범위 중의 하나에 대응한다.

범위는 특정한 데이터 뱅크(110) 순서 및 RAID 구현에 대응할 수 있다. 다수의 범위는 여러 이유로 범위를 구현하는데에 이용될 수 있다. 상세하게는, 예를 들어, 다수의 범위는 볼륨과 공동으로 이용될 수 있는 데 이는 상이한 데이터 뱅크(110)에 있는 상이한 데이터 스토어(250)는 사용할 수 있는 데이터 스토어(250)내의 상이한 저장 장소의 크기를 가질 수 있기 때문이다. 이것은, 예를 들어, 볼륨의 제1 범위에 대해 모든 데이터 뱅크(110)가 제1 RAID 구현과 공동으로 이용될 수 있는 반면에 볼륨의 제2 범위에선 상기 모든 데이터 뱅크(110) 보다 적은 데이터 뱅크들이 제2 RAID 구현과 공동으로 이용될 수 있다(여기서 제1 및 제2 RAID 구현은 사실상, 서로 상이한 레벨일 수 있다). 이들 범위의 각각은 그러므로 사용할 수 있는 상이한 수의 데이터 뱅크(110), 상이한 유형의 RAID 등을 갖는, 상이한 데이터 뱅크(110) 순서들(예로서, 무작위 순열 등)에 따라 레이아웃될 수 있다.

구체적인 예를 이용하여 예시하기 위해, 도 4를 간단히 다시 참조한다. RAID 레벨 5를 지닌 8MB의 볼륨이 도시된 바와 같이 레이아웃되어 있다고 가정하는 데, 여기서, 데이터 세그먼트들은 데이터 뱅크(110b), 데이터 뱅크(110d), 데이터 뱅크(110a), 데이터 뱅크(110c) 및 데이터 뱅크(110e)인 순서에 따라 레이아웃되고 RAID 5는 패리티 세그먼트가 데이터 뱅크(110c)의 데이터 스토어(250c) 및 데이터 뱅크(110e)의 데이터 스토어(250e)에 할당되는 것이 요망될 수 있는 (4+1) 패리티 셋트를 이용하는 볼륨과 공동으로 구현된다.

이제 추가의 3MB를 상기 볼륨에 추가하는 것이 요청된다고 가정한다. 그러나, 이 경우에, 데이터 뱅크(110e), 데이터 뱅크(110c) 및 데이터 뱅크(110d)의 데이터 스토어(250)는 더 이상 여유가 없다고 가정한다. 따라서, 이 경우에, 해결책은 데이터 스토어(250)에 남은 저장장소를 갖고 있는 데이터 뱅크(110a)와 데이터 뱅크(110b)간에 추가의 요망되는 3MB를 할당하는 것일 수 있다. 더욱이, 단지 두 개의 데이터 뱅크(110)만이 사용을 위해 이용할 수 있으므로 볼륨의 제1의 8MB로써 이용될 수 있는 RAID 5 대신에 RAID 레벨 1을 이용할 수 있을 뿐이다. 따라서, 이 경우에, 볼륨의 제1의 8MB는 제1 범위에 대응하고, 제1 셋트의 값을 지닌 볼륨에 대응하는 제1 범위 엔트리를 테이블에 갖는 반면에, 볼륨의 다음 3MB는 제2 범위에 대응하고, 제2 셋트의 값을 지닌 볼륨에 대응하는 제2 범위 엔트리를 가질 수 있다. 본원을 읽은 후엔 분명히 알 수 있는 바와 같이, 이러한 유형의 발생은 일정한 빈도로 나타날 수 있다.

도 5를 참조하면, 이러한 유형의 상황을 타개하기 위해, 볼륨의 각각의 범위는 그 특정한 범위내의 세그먼트의 위치가 그 범위에 대응하는 범위 엔트리로부터 결정될 수 있도록 엔트리를 테이블(550)에 가질 수 있다. 테이블(550)에 대응하는볼륨의 각각의 범위에 대한 엔트리(524)는 범위 카운트(518)와 연관된다. 한 실시예에서, 범위 카운트(518)는 범위 엔트리(524)들의 수가 범위 카운트(518)에 대응하도록 볼륨의 범위의 수에 대응할 수 있다. 반면에, 범위 엔트리(524a) 및 범위 엔트리(524b)가 나타나 있지만, 테이블(550)내의 범위 엔트리(524)들의 수는 그 테이블이 대응하는 볼륨에 대응하는 범위의 수에 좌우될 것이라는 것을 알아야 한다. 따라서, 하나의 볼륨이 세 개의 범위로 분할된다면, 테이블(550)에 대응하는 각각의 볼륨의 범위에 대한 정보를 포함하는 범위 엔트리(524)가 있도록 세 개의 범위 엔트리(524)가 테이블(550)에 있게 될 것이다.

범위 엔트리(524)에 대한 정보들로는 타입(526), 시작(530), 끝(534), 네트워크 RAID(538), 네트워크 RAID 사이즈(542), 디스크 RAID(546), 디스크 RAID 사이즈(550), 데이터뱅크 카운트(554), 데이터뱅크 순서(558) 및 범위(524)와 연관된 세그먼트를 저장하는 데에 사용되는 각각의 데이터 뱅크에 대응하는 디스크 카운트(562) 및 디스크 순서(566)(다른 말로 하면, 그 범위 엔트리(524)의 데이터뱅크 카운트(554)와 등가인 디스크 카운트(562) 및 디스크 순서(566)가 있을 것임)들이 포함된다. 타입(526)은 범위 엔트리(524)에 대한 정보에 대응하는 범위의 타입: 예를 들어, 정상, 소스(SRC), 목적지(DST) 또는 기타 범위 타입을 기술한다. 시작(530)은 범위 엔트리(524)에 대응하는 볼륨의 범위의 첫 번째 논리 세그먼트 주소이다. 끝(534)은 범위 엔트리(524)에 대응하는 볼륨의 범위에 대한 정보에 대응하는 범위의 마지막 논리 세그먼트 주소이다. 다른 구성도 또한 가능하며, 예를 들어 끝(524)은 범위 내의 세그먼트 또는 블록들의 최대 갯수인 카운트일 수 있다.

데이터뱅크 카운트(554)는 범위 엔트리에 대응하는 범위가 상주하는 데이터 뱅크(110)의 수에 대응할 수 있고, 데이터 뱅크 순서(558)는 그 범위내의 세그먼트가 데이터 뱅크(110)에 할당되었던 순서일 수 있고, 한편 네트워크 RAID(538), 네트워크 RAID 사이즈(542), 디스크 RAID(546), 디스크 RAID 사이즈(550)는 범위 엔트리(524)에 대응하는 볼륨의 범위와 공동으로 구현된 RAID의 타입에 대응할 수 있다.

네트워크 RAID(538)는 테이블(550)에 대응하는 볼륨과 연관되어 구현되는 RAID의 타입, 예를 들어, RAID 0, RAID 1, 또는 RAID 5 또는 기타 RAID 타입이다. 네트워크 RAID 사이즈(542)는 범위에서 사용된 RAID 타입의 패리티 그룹 사이즈이다. 네트워크 RAID 사이즈(542)는 범위(524)에 대한 정보에 대응하는 범위내의 데이터뱅크의 수와 같거나 이보다 적은 범위에서의 데이터 뱅크(110)의 수로 제한될 수 있다. 디스크 RAID(546)는 범위에서 데이터 뱅크내의 디스크에 걸쳐 구현되는 RAID의 유형이다. 디스크 RAID 사이즈(552)는 각각의 데이터 뱅크(110)의 데이터 스토어(250)내의 디스크(252)에 걸쳐 사용되는 RAID 타입의 패리티 그룹 사이즈일 수 있고 데이터 뱅크내의 디스크의 수와 같거나 이보다 적은 범위의 디스크의 수로 제한될 수 있다. 실시예에서, 범위에서 데이터뱅크(110)내의 디스크에 걸친 RAID는 선택적인 것이고 사용될 수 있거나 사용되지 않을 수 있다. 이러한 실시예에서, 디스크 RAID(546), 디스크 RAID 사이즈(550) 또는 이들 양자 모두는 사용되지 않을 수 있거나 생략될 수 있다.

데이터뱅크 카운트(554)는 범위내의 데이터뱅크의 수이고 데이터뱅크 순서(558)는 범위내에서 데이터 뱅크(110)에 걸쳐 RAID가 구현되는(예로서, 스트라이프되는) 순서이다. 예를 들어, 데이터 뱅크(110)는 특정한 순서로 저장된 볼륨의 논리 주소에 대응하는 데이터를 가질 수 있고 데이터뱅크 순서(558)는 이 순서에 대응한다. 디스크 카운트(562)는 범위의 데이터 뱅크(110)내의 디스크의 수이고 디스크 순서(566)는 특정한 데이터 뱅크(110)의 디스크에 걸쳐 RAID가 구현되는 순서이다. 예를 들어, 디스크(252)는 특정한 순서로 저장된 세그먼트를 가질 수 있고 디스크 순서(558)는 세그먼트가 데이터 뱅크(110)내의 디스크(252)에 걸쳐 저장된 순서이다. 따라서, 범위 엔트리(524)와 연관된 범위의 세그먼트를 저장하는데에 사용되는 각각의 데이터 뱅크(110)에 대해, 대응하는 디스크 카운트(562) 및 디스크 순서(566)가 있을 것이다(다른 말로 하면, 디스크 카운트(562)의 수 및 디스크 순서(566)는 한 실시예에서, 그 범위 엔트리(524)의 데이터뱅크 카운트(554)와 등가일 것이다). 실시예에서, 데이터 뱅크(110)내의 디스크(252)에 걸친 RAID는 선택사항이고 사용되지 않을 수도 있다. 테이블(550)은 특정하게 설명되었지만, 이와 같은 특정한 설명은 예시적인 것으로서 제한적인 의미로 설명한 것이 아니며 다른 형태의 테이블(550)도 이용될 수 있다. 예를 들어, 가상 테이블이 테이블(550) 대신 이용될 수 있고 각각의 논리 주소에 대응하는 데이터 뱅크(110) 및 세그먼트(402)를 명시적으로 나열할 수 있다.

따라서, 상기 설명한 바와 같이, 테이블(550)내의 정보는 논리 주소(커맨드로 또는 기타 임의의 컨텍스트로 호스트(102)에 의해 참조됨)에 대응하는 데이터 세그먼트(402)를 포함하는 데이터 뱅크(110)를 식별하는 데에 사용될 수 있다. 예를 들어, 세그먼트(402)의 크기를 아는 것, 시작(530), 끝(534), 상기 주소 등에 대응하는 범위 엔트리(524), 볼륨의 논리 주소에 대응하는 특정한 데이터 뱅크(110)를 사용하는 것이 결정될 수 있다.

테이블(240)의 하나 이상의 부분들이 모든 데이터 뱅크(110)에 걸쳐 동일할 수 있고 상기 설명한 바와 같이 하나 이상의 데이터 뱅크(110)에 걸치는 하나 이상의 논리 볼륨을 기술하는 한편, 데이터 뱅크(110)상의 기타 테이블(245)들은 대응하는 데이터 뱅크(110)에 개별적일 수 있다(예로서, 테이블(245)은 대응하는 분산 RAID 애플리케이션(210)이 실행되는 데이터 뱅크(110)에 고유할 수 있다). 이 테이블(245)은 대응하는 데이터 뱅크(110)의 데이터 스토어(250)에 포함된 각각의 디스크(252)에 속하는 데이터를 포함할 수 있고 데이터 스토어(250)의 디스크(252)에 또는 디스크들에, 예로서, 데이터 뱅크(110)에 할당된 세그먼트(402)가 데이터 스토어(250)에 위치되는 디스크(252)의 섹터에 저장되는 정보를 포함할 수 있다.

도 6에 상기 유형의 테이블에 대한 한 실시예가 그래픽으로 표현되어 있다. 테이블(660)은 특정한 데이터 뱅크(110)에 저장될 수 있고 다수의 디스크 테이블(670)을 포함하는 데, 각각의 디스크(252) 테이블(670)은 그 디스크(252) 뱅크(110)내의 데이터 스토어(250)의 디스크(252)에 대응하고 그 디스크내 저장된 세그먼트의 위치를 나열한다. 더욱 상세히는, 대부분의 경우에 디스크(252)는 물리적 섹터들로 분할되고, 각각의 물리적 섹터는 대응하는 주소 또는 주소 범위를 갖는다.

디스크 테이블(670)은 볼륨의 세그먼트가 저장되는 데이터 뱅크(110)의 디스크(252)의 섹터의 위치를 결정하는데에 사용될 수 있는 매핑 테이블일 수 있다. 따라서, 테이블(670)을 이용하여 볼륨의 세그먼트에 대응하는 디스크(252)상의 섹터의 주소가 결정될 수 있다. 더욱이, 테이블은 디스크의 섹터 또는 세그먼트에 대응하는 엔트리 마다 하나 이상의 플래그 또는 설명 비트를 포함할 수 있고, 이 플래그 또는 설명 비트는 상기 섹터 또는 상기 섹터에 저장된 세그먼트를 기술한다.

이제 도 7을 참조하면, 디스크 테이블(670)의 한 실시예가 그래픽으로 표현되어 있다. 디스크 테이블(670)은 다수의 엔트리를 갖는데, 각각의 엔트리는 디스크 테이블(670)의 엔트리가 디스크(252)의 물리적 세그먼트를 기술하도록 대응하는 디스크의 물리적 세그먼트에 대응한다. 디스크 테이블(670)내의 각각의 엔트리도 대응하는 섹터에 저장된 볼륨의 세그먼트 또는 물리적 세그먼트를 기술하는 하나 이상의 플래그 또는 설명 비트를 포함할 수 있다. 더욱 상세히는, 도 7에서 알 수 있는 바와 같이, 한 실시예에서, 디스크 테이블(670)내의 엔트리는 논리 볼륨(LV) 번호, 논리 세그먼트 번호, 주소 공간 및 섹터 상태를 위한 필드를 포함한다. LV 번호는 그 물리적 세그먼트에 저장된 데이터가 대응하는 논리 볼륨을 식별한다. 논리 세그먼트 번호는 그 데이터에 대응하는 논리 볼륨의 세그먼트를 식별한다. 주소 공간은 '데이터' 또는 '중복'으로서 저장된 세그먼트를 식별한다. '데이터'의 값은 데이터가 엔트리에 의해 표현된 섹터에 저장되어 있다는 것을 지시하는 반면에, '중복'의 값은 섹터에 저장된 정보가 RAID 데이터 보호를 위해 사용될 수 있고, RAID 레벨에 따라, 중복 데이터, 미러링된 데이터 또는 패리티 정보일 수 있음을 지시한다. 섹터 상태는 세그먼트의 상태를 '할당됨', '제로화됨' 또는 '더티 상태'인 것으로서 지시한다. '할당됨'은 세그먼트가 할당되어 있고 유효한 데이터를 포함할 수 있음을 지시한다. '제로화됨'은 세그먼트에 제로를 기록함으로써 그 세그먼트가 제로화되었음을 지시한다. '더티 상태'는 세그먼트가, 예로서 제로화되지 않았거나 할당되지 않았기 때문에, 사용불가능하거나 바람직하지 않은 값들인 가비지를 포함할 수 있고, 무작위 비트 또는 데이터를 저장할 수 있는, 세그먼트를 지시한다. 한 실시예에서, 예를 들어, 새로운 디스크에 대해 디스크의 모든 세그먼트는 새로운 또는 새롭게 추가된 디스크에 대응하는 디스크 테이블에서 더티 상태인 것으로서 표시될 수 있다.

테이블에 대한 상기 설명을 읽은 후엔, 분산 RAID 애플리케이션(210)은, 볼륨에 대응하는 데이터 뱅크(110) 세그먼트(데이터 또는 중복 세그먼트)가 위치되는, 볼륨의 논리 주소에 대응하는 세그먼트를 결정하기 위해, 그리고 볼륨의 세그먼트와 연관된 RAID 데이터(패리티 데이터, 미러 데이터, 기타 유형의 중복 데이터)가 위치되어 있는, 볼륨의 논리 주소에 대응하는 볼륨의 세그먼트를 결정하기 위해 글로벌 테이블(240)을 이용할 수 있음을 분명히 알 수 있고, 특정한 데이터 뱅크(110)상의 디스크(252)는 한 세그먼트 또는 볼륨들, 세그먼트들, 또는 특정 데 뱅크(110)에 대응하는 디스크에 관한 기타 정보를 포함하거나, 볼륨들, 세그먼트(402)들, 데이터 뱅크(110), RAID 데이터등에 관한 정보에 관한 기타 정보를 포함한다.

마찬가지로, 각각의 개별 데이터 뱅크(110)상의 분산 RAID 애플리케이션(210)은 특정한 세그먼트가 위치되는 그 데이터 뱅크(110)상의 장소(디스크(252)의 섹터등) 또는 그 특정한 데이터 뱅크(110)에 대응하는 디스크(252)들, 세그먼트들 또는 볼륨들에 관한 기타 정보를 결정하기 위해 그 데이터 뱅크(110)상에서 로컬 테이블(245)을 이용할 수 있다.

데이터 뱅크(110)와 각각의 개별 데이터 뱅크(110)에 대응하는 로컬 테이블(245)간에 공유되는 글로벌 테이블(240)의 조합을 이용하면, 특정 동작들이 서로 협력하여 데이터 뱅크(110)상에서 분산 RAID 애플리케이션(210)에 의해 수행될 수 있다. 이러한 유형의 동작들은 하기에 더욱 상세히 설명된다. 상세하게는, RAID 레벨 5가 볼륨과 공동으로 구현되는, 볼륨상에서 판독(READ) 커맨드 및 기록(WRITE) 커맨드를 구현하는 한 실시예가 예시적인 분산 RAID 시스템에 대해 상기 커맨드들의 견고한 구현예가 뒤따르는 설명에 의해 더욱 상세히 설명될 것이다. 본 발명에 대한 완전한 검토 후에 기타 유형의 실시예, 커맨드, RAID 레벨등이 구현되는 방법을 알게 될 것이다.

먼저 도 8을 참조하면, 분산 RAID 시스템에서 READ 커맨드를 구현하는 방법의 한 실시예의 흐름도가 설명되어 있다. 이 READ 커맨드는 호스트(120)에 의해 스위치(120)를 통해 데이터 뱅크(110)에 전송될 수 있거나 한 데이터 뱅크(110)로부터 다른 데이터 뱅크(110)로 전송될 수 있다. 특정 실시예에서, 호스트(120)는 READ 커맨드가 커맨드를 발행하는 호스트(120)와 적합한 데이터 뱅크(110)간의 경로를 따라 커맨드를 발행하는 호스트(120)로부터 적합한 데이터 뱅크(110)로 라우팅될 수 있도록 하나 이상의 애플리케이션 및 연관된 라우팅 정보를 포함할 수 있다. 다른 경우엔, 그러나, 어떠한 애플리케이션 또는 라우팅 정보도 호스트(120)에 제공되지 않을 수 있고 따라서 호스트(120)로부터 발행된 READ 커맨드는 임의의 데이터 뱅크(110)에 라우팅될 수 있다. 후자의 경우가 본 실시예에 설명될 것이다. 이 실시예에 대한 설명을 검토한 후, 그러나, 당업자는 전자의 경우에도 적용될 수 있는 단계들을 알게 될 것이다.

단계(810)에서, READ 커맨드가 데이터 뱅크(110)에서 수신된다. 데이터 뱅크(110)상의 분산 RAID 애플리케이션(210)은, 단계(820)에서, 수신된 READ 커맨드에서 참조되는 논리 주소에 대응하는 볼륨의 세그먼트 및 단계(830)에서 볼륨의 세그먼트가 저장되는 데이터 뱅크(110)를 결정한다. 상기 설명한 바와 같이, 이 정보는 분산 RAID 애플리케이션(210)과 연관된 글로벌 테이블(240)을 이용하여 결정될 수 있다. 세그먼트를 저장하는 데이터 뱅크(110)가 READ 커맨드를 수신한 데이터 뱅크(110)와 동일하다면(단계(832)에서 결정되는 바와 같이), 요청된 데이터는 단계(840)에서 수신 데이터 뱅크(110)상의 데이터 스토어(250)의 적합한 디스크(252)로부터 및 단계(850)에서 응답된 READ 커맨드로부터 획득된다. 상기 설명한 바와 같이, 세그먼트가 저장된 데이터 뱅크(110)의 데이터 스토어(250)의 특정 디스크(252)는 글로벌 테이블(240)을 이용하여 결정될 수 있는 반면에 세그먼트에 대응하는 데이터가 저장되어 있는 그 디스크(252)상의 위치는 볼륨의 세그먼트를 디스크(252)상의 물리적 위치에 매핑하는 데에 이용되는 로컬 테이블(245)을 이용하여 결정될 수 있다. 수신 데이터 뱅크(110)가 호스트(102)로부터 READ 커맨드를 수신하면, 호스트(102)는 응답될 수 있는 반면에 수신 데이터 뱅크(110)가 다른 데이터 뱅크(110)로부터 READ 커맨드를 수신하면, 응답은 READ 커맨드를 발행한 데이터 뱅크(110)상의 분산 RAID 애플리케이션(210)에 전송될 수 있다.

그러나, 세그먼트가 원격 데이터 뱅크(110)(커맨드를 수신한 데이터 뱅크가 아닌 데이터 뱅크(110))에 저장되어 있으면 단계(860)에서 READ 커맨드는 원격 데이터 뱅크(110)에 있는 분산 RAID 애플리케이션(210)에 전송될 수 있다. 한 실시예에서, 이 READ 커맨드는 분산 RAID 애플리케이션(210)에 의해 이용되는 커맨드 포맷을 이용하여 원격 데이터 뱅크(110)에 있는 분산 RAID 애플리케이션(210)에 통신될 수 있다. 이 커맨드는, 최초 READ 커맨드의 관련 정보를 제공하는 동안 그 READ 커맨드를 최초로 수신한 데이터 뱅크(110)에 READ 커맨드의 결과를 회신하도록, 또는 다른 기능을 수행하도록 분산 RAID 애플리케이션에 명령할 수도 있다. 따라서, 단계(870)에서 READ 커맨드가 원격 데이터 뱅크(110)에 전송된 후, 요청된 데이터를 포함하는 응답은 원격 데이터 뱅크(110)로부터 수신될 수 있고 단계(880)에서 수신된 READ 커맨드는 그 응답에 수신된 데이터를 이용하여 응답한다.

이제 도 9A 및 도 9B를 참조하면, 분산 RAID 시스템에서 WRITE 커맨드를 구현하는 방법의 한 실시예의 흐름도가 설명되어 있다. 이 WRITE 커맨드는 호스트(120)에 의해 스위치(120)를 통해 데이터 뱅크(110)에 전송될 수 있거나 한 데이터 뱅크(110)로부터 다른 데이터 뱅크(110)로 전송될 수 있다. 특정 실시예에서, 호스트(120)는 WRITE 커맨드가 커맨드를 발행하는 호스트(120)와 적합한 데이터 뱅크(110)간의 경로를 따라 커맨드를 발행하는 호스트(120)로부터 적합한 데이터 뱅크(110)로 라우팅될 수 있도록 하나 이상의 애플리케이션 및 연관된 라우팅 정보를 포함할 수 있다. 다른 경우엔, 그러나, 어떠한 애플리케이션 또는 라우팅 정보도 호스트(120)에 제공되지 않을 수 있고 따라서 호스트(120)로부터 발행된 WRITE 커맨드는 임의의 데이터 뱅크(110)에 라우팅될 수 있다. 후자의 경우가 본 실시예에 설명될 것이다. 이 실시예에 대한 설명을 검토한 후, 그러나, 당업자는 전자의 경우에 적용될 수 있는 단계들을 알게 될 것이다.

단계(910)에서, WRITE 커맨드가 수신 데이터 뱅크(110)에서 수신된다. 수신 데이터 뱅크(110)상의 분산 RAID 애플리케이션(210)은, 단계(920, 930 및 940)에서, WRITE 커맨드에 의해 참조되는 논리 주소에 대응하는 볼륨의 세그먼트, 그 세그먼트의 위치(예로서, 그 세그먼트에 대응하는 데이터를 저장하는 데이터 뱅크(110)) 및 그 세그먼트에 대응하는 패리티의 위치(예로서, 그 세그먼트에 대응하는 데이터로부터 생성된 패리티 데이터가 저장되는 세그먼트를 저장하는 데이터 뱅크(110))를 결정한다. 상기 설명한 바와 같이, 데이터 세그먼트 및 패리티 세그먼트 양자 모두의 위치는 수신 데이터 뱅크(110)에 저장된 글로벌 테이블(240)을 이용하여 결정될 수 있다.

데이터 세그먼트(데이터를 저장하고 있는) 및 중복 세그먼트(다른 말로 하면, 패리티 또는 기타 유형의 중복 데이터가 데이터 세그먼트로부터 생성되는) 모두가 수신 데이터 뱅크(110)에 저장되어 있지 않다면(단계 950 및 960에서 결정된 바와 같이), WRITE 커맨드는 단계(964)에서 데이터 세그먼트가 저장되는 원격 데이터 뱅크(110)상의 분산 RAID 애플리케이션(210)에 통신될 수 있고, 단계(966)에서 패리티 세그먼트가 저장되는 원격 패리티 데이터 뱅크(110)상의 분산 RAID 애플리케이션(210)에 통신될 수 있다. 한 실시예에서, 이 WRITE 커맨드는 분산 RAID 애플리케이션(210)에 의해 이용된 커맨드 포맷을 이용하여 원격 패리티 데이터 뱅크(110) 및 원격 데이터 뱅크(110)에 있는 분산 RAID 애플리케이션(210)에 통신될 수 있다. 이 커맨드는, 최초 WRITE 커맨드의 관련 정보를 제공하는 동안 다른 소망하는 기능을 수행하도록 분산 RAID 애플리케이션(210)에 명령할 수도 있다.

따라서, WRITE 커맨드가 원격 데이터 뱅크(110)에 전송된 후, 단계(968 및 970)에서 원격 패리티 데이터 뱅크 완료 통지가 원격 데이터 뱅크(110) 및 원격 패리티 데이터 뱅크(110)상의 분산 RAID 애플리케이션(210)으로부터 수신될 수 있다. 이들 수신확인 응답이 수신되면, WRITE 커맨드는 수신 데이터 뱅크(110)상의 분산 RAID 애플리케이션(210)에 의해 응답될 수 있다.

단계(950)로 되돌아 가면, 데이터 세그먼트가 수신 데이터 뱅크(110)에 저장되어 있으면, 단계(952)에서 WRITE 커맨드가 호스트(102)로부터 또는 다른 데이터 뱅크(110)로부터 수신되었는 지가 결정될 수 있다. WRITE 커맨드가 호스트(102)로부터 수신되었다면, WRITE 커맨드는 단계(976)에서 원격 패리티 데이터 뱅크 (110)상의 분산 RAID 애플리케이션(210)에 통신될 수 있고 단계(974)에서 수신 데이터 뱅크(110)의 기록 캐쉬에 위치될 수 있다. 단계(978)에서 원격 패리티 데이터 뱅크 (110)상의 분산 RAID 애플리케이션(210)으로부터 완료 통지를 수신한 후, WRITE 커맨드는 단계(980)에서 수신 데이터 뱅크 (110)상의 분산 RAID 애플리케이션(210)에 의해 응답될 수 있다(예로서, 호스트(102)에 전송된 응답). 더욱이, 단계(982)에서 WRITE 커맨드가 자체적으로 처리될 수 있다. 이 프로세스는 수신 데이터 뱅크(110)에 저장된 데이터 세그먼트로의 WRITE 커맨드와 연관된 데이터의 저장 또는 기타 기능을 수반할 수 있다.

반면에, 단계(952)에서, WRITE 커맨드가 호스트(102)로부터 수신되지 않았다면, 이것은 WRITE 커맨드가 다른 데이터 뱅크(110)(대부분의 경우에, 이는 호스트(102)로부터 WRITE 커맨드를 최초로 수신한 데이터 뱅크(110)이었을 수 있다)로부터 수신되었다는 것을 지시할 수 있다. 이 경우에, 데이터 뱅크(110)는 단계(984)에서, 수신된 WRITE 커맨드를 자신의 기록 캐쉬에 위치시킬 수 있고 단계(986)에서, 완료 통지를 발행 데이터 뱅크(110)에 전송할 수 있다. 그후 일정 시간 이후의 시점에, WRITE 커맨드는 단계(988)에서, 자체적으로 처리된다.

단계(950)로 되돌아 가면, 단계(960)에서 결정된 바와 같이, 데이터 세그먼트가 수신 데이터 뱅크(110)에 저장되어 있진 않지만 패리티 세그먼트가 수신 데이터 뱅크(110)에 저장되어 있다면, 단계(962)에서, WRITE 커맨드가 호스트(102)로부터 또는 다른 데이터 뱅크(110)로부터 수신되었는 지가 결정될 수 있다. WRITE 커맨드가 호스트(102)로부터 수신되었다면 WRITE 커맨드는 단계(1002)에서, WRITE 커맨드에 대응하는 데이터 세그먼트가 저장되어 있는 원격 데이터 뱅크(110)상의 분산 RAID 애플리케이션(210)에 통신될 수 있고 단계(1000)에서, 수신 데이터 뱅크(110)의 기록 캐쉬에 위치될 수 있다. 단계(1004)에서, 완료 통지를 원격 데이터 뱅크(110)상의 분산 RAID 애플리케이션(210)으로부터 수신한 후, WRITE 커맨드는 단계(1006)에서, 수신 데이터 뱅크(110)상의 분산 RAID 애플리케이션(210)에 의해 응답될 수 있고, 단계(1008)에서, 수신 데이터 뱅크(110)에 의해 기록 커맨드가 처리될 수 있다.

여기서, 기록 커맨드를 처리하는 것은 수신 데이터 뱅크(110)에서 저장된 패리티 세그먼트가 기록 커맨드에 기초하여 갱신될 수 있다는 것을 수반할 수 있다. 이러한 패리티 세그먼트 갱신은 다양한 방법으로 달성될 수 있는 데, 그 방법 모두가 본원에 상세히 설명되어 있진 않지만 당업자는 알 수 있을 것이다. 예를 들어, 패리티 데이터 뱅크(110)상의 분산 RAID 애플리케이션(210)은 패리티 세그먼트를 갱신하기 위해 기록 탈퇴를 수행할 수 있다. 기록 탈퇴 수행은 데이터 세그먼트와 이로부터 패리티 세그먼트를 획득하는 것 및 획득된 데이터 세그먼트 및 WRITE 커맨드와 연관된 기록되어야 할 데이터를 이용하여 논리 동작(배타적 논리합(XOR) 동작과 같은)을 수행하는 것을 수반할 수 있다. 대안으로서, 수신 데이터 뱅크(110)상의 분산 RAID 애플리케이션(210)은 패리티 세그먼트가 생성되었던 각각의 데이터 세그먼트에 대응하는 다수의 WRITE 커맨드를 갖는다면, 새로운 패리티 세그먼트가 계산될 수 있고 최초 패리티 세그먼트는 새롭게 계산된 패리티 세그먼트로 대체됨으로써 갱신될 수 있다. 패리티 세그먼트를 갱신하는 다른 방법은 본원에 개시된 설명을 검토하여 실현될 수 있고 분산 RAID 애플리케이션에 의해 패리티 세그먼트를 갱신하는 데에 이용되는 특정한 방법은 구성 파라미터, 특정 데이터의 이용가능성(예로서, 패리티를 생성하기 위해 사용된 모든 세그먼트 데이터에 대응하는 WRITE 커맨드 등)을 포함하는 다양한 인자, 또는 임의의 다수의 기타 인자들에 좌우될 수 있다.

단계(962)로 가면, WRITE 커맨드가 호스트로부터 수신되지 않았다면 이것은 WRITE 커맨드가 다른 데이터 뱅크(110)(이는 대부분의 경우에, 호스트(102)로부터 최초로 WRITE 커맨드를 수신 데이터 뱅크(110)이었을 수도 있음)로부터 수신되었다는 것을 지시한다. 이 경우에, 단계(990)에서, WRITE 커맨드는 수신 데이터 뱅크(110)의 기록 캐쉬에 위치될 수 있고 단계(992)에서, 완료 통지가 발행 데이터 뱅크에 전송될 수 있다. 그러면 단계(994)에서, WRITE 커맨드가 처리될 수 있다(예로서, 패리티 세그먼트는 상기 설명한 바와 같이, 갱신될 수 있다).

상기 설명을 검토한 후엔, 대부분의 경우에, 특정한 데이터 뱅크(110)에 있는 분산 RAID 애플리케이션(210)은 통지가 패리티 데이터 뱅크(110)로부터 수신될 때 까지 수신된 WRITE 커맨드를 처리할 수 없다는 것과, 하나 이상의 WRITE 커맨드를 저장하는 것 또는 이 저장된 WRITE 커맨드의 셋트를 평가하는 것이 요망되는 경우 패리티를 갱신하는 것 또는 임의의 다수의 기타 경우들을 위한 방법을 결정 또는 구현하기 위해 다수의 수신된 WRITE 커맨드를 패리티 데이터 뱅크가 평가할 필요가 있다는 것을 알게 될 것이다. WRITE 커맨드(또는 기타 커맨드)의 평가 및 저장이 용이하도록 하기 위해, 각각의 분산 RAID 애플리케이션(210)은 연관된 기록 캐쉬(260)를 가질 수 있다.

기록 캐쉬의 한 실시예에 대한 표현이 도 10에 나타나 있다. WRITE 커맨드가 분산 RAID 애플리케이션(210)에 의해 수신됨에 따라 이들은 기록 캐쉬(1100)에 위치된다. 각각의 이들 WRITE 커맨드(1160)는 WRITE 커맨드(1160)가 수신되었을 때를 지시하는 연관된 타임스탬프를 가질 수 있다. 따라서, 한 실시예에서 기록 캐쉬(1100)는 타임스탬프가 표시된 WRITE 커맨드(1160)의 큐(queue)를 포함할 수 있다. 소정 시점에 타임스탬프 마커가 분산 RAID 애플리케이션(210)에 의해 발행될 수 있다. 이 타임스탬프 마커는 시간을 포함할 수 있고 각각의 분산 RAID 애플리케이션(210)에 통신될 수 있다. 타임스탬프 마커를 발행할 시점은, 소정 시간간격에서 또는 여러 방법론으로 기록 캐쉬(1100) 소정 백분율로 완전한 상태에 있을 때 또는 소정 갯수의 WRITE 커맨드(1160)가 수신되었을 때와 같은 다양한 방식으로, 결정될 수 있다.

어느 경우에도, 이 타임스탬프 마커(1110)는 각각의 분산 RAID 애플리케이션(210)과 연관된 각각의 기록 캐쉬(1100)를 적어도 두 개의 세그먼트들인, 타임스탬프 마커(1110) 보다 이전에 수신된 WRITE 커맨드(1160)(이 예에선, WRITE 커맨드(1160a, 1160b, 1160c 및 1160d))를 포함하는 닫힌 마커(1150) 및 타임스탬프 마커(1110) 보다 이후에 수신된 WRITE 커맨드(1160)(이 예에선, WRITE 커맨드(1160e, 1160f 및 1160g))를 포함하는 열린 마커(1140)들로 세그먼트화 한다. 분산 RAID 애플리케이션(210)은 그러면 수신된 WRITE 커맨드들이 개방 마커(1140)에 추가될 수 있는 동안 상기 WRITE 커맨드(1160)들이 처리되어야 할 방법을 결정하기 위해 닫힌 마커(1150)에서 WRITE 커맨드(1160)들(이 예에선, WRITE 커맨드(1160a, 1160b, 1160c 및 1160d))의 셋트를 평가할 수 있다.

반대로, 닫힌 마커(1150)가 더 이상 변화하지 않는 WRITE 커맨드(1160)들의 셋트를 포함하기 때문에 분산 RAID 애플리케이션은 실행 순서를 결정(그리고 닫힌 마커(1150)에 WRITE 커맨드(1160)를 재순서화할 수 있음)하기 위해 서로에 대해 (또는 다른 기준으로) 이 WRITE 커맨드(1160)들의 셋트를 평가할 수 있고, 패리티 세그먼트를 갱신하는 방법론(예로서, 패리티를 생성하기 위해 사용되는 각각의 데이터 세그먼트에 대응하는 닫힌 마커(1150)에 WRITE 커맨드가 있다면) 또는 기타 결정을 행하는 방법론은 WRITE 커맨드(1160)들의 처리와 연관된다. 타임스탬프 마커(1110)가 각각의 데이터 뱅크(110)상의 임의의 분산 RAID 애플리케이션(210)에 의해 여러 이유로 발행될 수 있으므로, 다수의 닫힌 마커(1110)는, 임의의 한 시점에, 예를 들어, 기록 캐쉬가 임의의 분산 RAID 애플리케이션(210)에 의해 평가되는 시간 사이에 분산 RAID 애플리케이션(210)에 의해 발행되는 때와 같은 시점에, 존재할 수 있다.

상기 내용을 검토한 후 데이터 뱅크(110)상의 분산 RAID 애플리케이션(210)이 가상화된 저장장치 및 RAID 구현을 달성하기 위해 협력하여 동작하는 방법을 이해할 것이다. 또한 오류 발생 후 분산 RAID 애플리케이션(210)의 특정 실시예의 기능을 설명하기 위해 특정한 실시예를 이해하는데에 도움을 줄 수 있을 것이다. 상기 설명한 바와 같이, 분산 RAID 애플리케이션(210)은 오류가 있는 (예로서, 저장되어 있는) 데이터 뱅크를 알 수 있다(다른 말로 하면, 데이터를 액세스하거나 동작하기 위해 데이터 뱅크(110)의 능력을 방해 또는 지체시키는 기타 오류, 통신, 소프트웨어 또는 하드웨어를 가질 수 있다). 분산 RAID 애플리케이션(210)은 호스트(102)로부터의 커맨드를 충족시키면서 그러한 오류에 대해 대처할 수 있다.

예시적으로 설명하기 위해, 도 11은 분산 RAID 시스템에 READ 커맨드를 구현하기 위한 방법의 한 실시예에 대한 흐름도를 나타낸다. 이 방법은 RAID 5가 볼륨의 범위와 공동으로 구현되어있는 실시예에 적용된다는 것 및 다른 실시예도 다른 레벨의 RAID가 구현되어 있는 경우에도 마찬가지로 적용된다는 것을 알 수 있을 것이다. READ 커맨드는 스위치(120)를 통해 호스트(102)에 의해 데이터 뱅크(110)로 전송되거나 다른 데이터 뱅크(110)로부터 수신 데이터 뱅크(110)로 전송될 수 있다. 단계(1110)에서, READ 커맨드는 데이터 뱅크(110)에서 수신될 수 있다. 데이터 뱅크(110)상의 분산 RAID 애플리케이션(210)은 단계(1220)에서, 수신된 READ 커맨드에서 참조된 논리 주소에 대응하는 데이터 세그먼트를 결정할 수 있고 단계(1230)에서 데이터 세그먼트가 저장되어 있는 데이터 뱅크(110)를 결정할 수 있다. 데이터 세그먼트를 저장하고 있는 데이터 뱅크(110)가 READ 커맨드를 수신한 데이터 뱅크(110)와 동일하다면(단계(1240)에서 결정된 바와 같이), 요청된 데이터는 단계(1250)에서 수신 데이터 뱅크(110)상의 데이터 스토어(250)의 적합한 디스크로부터 획득될 수 있고 수신된 READ 커맨드는 단계(1252)에서 획득된 데이터를 이용하여 응답될 수 있다. 수신 데이터 뱅크(110)가 호스트(102)로부터 READ 커맨드를 수신하면, 호스트(102)가 응답될 수 있는 반면에 수신 데이터 뱅크(110)가 다른 데이터 뱅크(110)로부터 READ 커맨드를 수신하면, 그 응답은 READ 커맨드를 발행한 데 뱅크(110)상의 분산 RAID 애플리케이션(210)에 전송될 수 있다.

그러나, 단계(1254)에서 데이터 세그먼트가 원격 데이터 뱅크(110)에 저장되어 있다면(커맨드를 수신한 것과는 다른 데이터 뱅크(110)), 판독되어야 할 데이터 세그먼트가 저장되어 있는 원격 데이터 뱅크(110)가 오류상태에 있는 지를 결정할 수 있다. 오류상태에 있지 않으면 READ 커맨드는 원격 데이터 뱅크(110)에 있는 분산 RAID 애플리케이션(210)에 전송될 수 있다. 단계(1258)에서 요청 데이터를 포함하는 응답이 원격 데이터 뱅크(110)로부터 수신된 후, 수신된 READ 커맨드는 단계(1260)에서 그 데이터를 사용하기 위해 응답될 수 있다.

원격 데이터 뱅크(110)가 오류 상태에 있다면, 그러나, 단계(1254)에서 수신 데이터 뱅크(110)가 READ 커맨드와 연관된 데이터 세그먼트에 대응하는 패리티 세그먼트를 유지하고 있는 지가 결정될 수 있다. 패리티 세그먼트가 수신 데이터 뱅크(110)에 저장되어 있으면, READ 커맨드에 대응하는 데이터 세그먼트는 수신 데이터 뱅크(110)에서 저장된 패리티 세그먼트를 사용하여 획득될 수 있다. 패리티 데이터로부터 데이터 세그먼트를 획득하는 것은, 다른 데이터 뱅크(110)로부터 다른 데이터 세그먼트(READ 커맨드에 대응하는 것과는 상이한 데이터 세그먼트)를 획득하는 것 및 다른 데이터 세그먼트와 패리티 세그먼트간의 논리 동작의 수행에 의한 소망하는 데이터 세그먼트 획득을 포함하는, 상세히 설명하진 않지만 여러 방법으로 달성될 수 있다. 단계(1268)에서, 요청된 데이터 세그먼트가 패리티 데이터를 사용하여 획득되었으면, 단계(1270)에서, 수신된 READ 커맨드가 응답될 수 있다. 수신 데이터 뱅크(110)가 호스트(102)로부터 READ 커맨드를 수신하면 호스트(102)가 응답될 수 있는 반면에 수신 데이터 뱅크(110)가 다른 데이터 뱅크(110)로부터 READ 커맨드를 수신하면 응답은 READ 커맨드를 발행한 데이터 뱅크(110)상의 분산 RAID 애플리케이션(210)에 전송될 수 있다.

수신 데이터 뱅크(110)가 패리티 블록을 저장하는 데이터 뱅크(110)가 아니면, READ 커맨드는 단계(1262)에서, READ 커맨드에서 참조된 데이터 세그먼트에 대응하는 패리티 세그먼트가 저장되어 있는 원격 데이터 뱅크(110)에 저장될 수 있다. 단계(1264)에서, 요청된 데이터를 포함하는 응답이 원격 패리티 데이터 뱅크(110)로부터 수신되면, 단계(1266)에서, 수신된 READ 커맨드는 그 데이터를 사용하여 응답될 수 있다.

도 12를 참조하면, 분산 RAID 시스템에 WRITE 커맨드를 구현하기 위한 방법의 한 실시예에 대한 흐름도가 설명되어 있다. 이 WRITE 커맨드는 스위치(120)를 통해 호스트(102)에 의해 데이터 뱅크(110)로 전송될 수 있거나 한 데이터 뱅크(110)로부터 다른 데이터 뱅크(110)로 전송될 수 있다. 단계(1310)에서, WRITE 커맨드는 수신 데이터 뱅크(110)에서 수신될 수 있다. 수신 데이터 뱅크(110)상의 분산 RAID 애플리케이션(210)은 그러면 단계(1312), 단계(1314) 및 단계(1320)에서, WRITE 커맨드에 의해 참조된 논리 주소에 대응하는 데이터 세그먼트, 그 데이터 세그먼트의 위치(예로서, 데이터뱅크(110)가 저장하는 그 데이터 세그먼트에 대응하는 데이터) 및 그 데이터 세그먼트에 대응하는 패리티 세그먼트의 위치(예로서, 데이터뱅크(110)가 저장하는 그 세그먼트에 대응하는 데이터로부터 생성된 패리티 데이터가 저장된 세그먼트)를 결정할 수 있다. 상기 설명한 바와 같이, 데이터 세그먼트 및 패리티 세그먼트 양자 모두의 위치는 수신 데이터 뱅크(110)에 저장되어 있는 테이블(240)의 셋트를 이용하여 결정될 수 있다.

데이터 세그먼트가 저장되어 있는 데이터 뱅크(110)가 오류 상태에 있는 지 또는 패리티 세그먼트가 저장되어 있는 데이터 뱅크(110)가 오류 상태에 있는 지가 결정될 수 있다. 어느 데이터 뱅크(110)들도 오류 상태에 있지 않으면 단계(1324)에서 분산 RAID 애플리케이션에 의해 정상 기록 동작이 수행될 수 있다. 정상 기록 동작은 도 9A 및 9B를 참조하여 상기에서 설명하였으므로 더 설명하진 않는다.

그러나 어느 한 데이터 뱅크(110)가 오류 상태에 있다면 단계(1326)에서 오류 데이터 뱅크(110)를 고려한 기록 동작이 수행될 수 있다. 이 기록 동작은, 기록 커맨드가 데이터 뱅크(110)에 전송되기 이전에 기록 커맨드가 전송되어야 할 데이터 뱅크(110)가 오류 상태에 있지를 결정하고 만일 오류 상태에 있다면 기록 커맨드는 오류 데이터 뱅크(110)에 전송되지 않아야 한다고 결정되는 것을 제외하곤 도 9A 및 9B에 대해 설명한 기록 동작과 실질적으로 동일하게 행해질 수 있다. 그 밖의 모든 것에 대해선 실질적으로 동일하다.

상기 설명을 읽은 후에 특정 실시예의 동작의 흐름도가 분산 RAID 시스템 동작의 한 실시예에 대한 특정 예를 참조하여 더욱 양호하게 이해될 것이다. 이를 위해, 5개 데이터 뱅크(110)를 갖는 분산 RAID 시스템의 한 실시예를 예시하는 도 4를 다시 참조한다. 먼저, 제1 예로서, 호스트(102b)가 READ 커맨드를 데이터 뱅크(110c)에 발행하고, 여기서 READ 커맨드는 데이터 뱅크(110a)상의 데이터 세그먼트 "2"(402c)에 대응하는 논리 주소를 참조한다고 가정한다. 여기서, 데이터 뱅크(110c)의 분산 RAID 애플리케이션(210c)은 수신된 READ 커맨드의 논리 주소가 데이터 세그먼트 "2"(402c)를 참조하고 있다고 그리고 데이터 세그먼트 "2"(402c)가 데이터 뱅크(110)상에 저장되어 있다고 결정할 수 있다. 분산 RAID 애플리케이션(210c)은 그후 대응하는 READ 커맨드를 데이터 뱅크(110a)에 전송할 수 있다.

데이터 뱅크(110a)상의 분산 RAID 애플리케이션(210a)은 이 READ 커맨드를 수신하고, READ 커맨드가 데이터 세그먼트 "2"(402c)에 대응하는 논리 주소를 참조하고 있다고 그리고 데이터 세그먼트 "2"(402c)가 그것이 실행중인 데이터 뱅크(110a)에 위치되어 있다고 결정할 수 있다. 분산 RAID 애플리케이션(210a)은 그후 데이터 세그먼트 "2"(402c)로부터 요청된 데이터를 획득하기 이해 데이터 스토어(250a)를 액세스하고 상기 획득된 데이터를 발행 데이터 뱅크(110c)에 있는 분산 RAID 애플리케이션(210c)에 반환할 수 있다. 데이터 뱅크(110c)상의 분산 RAID 애플리케이션(210c)은 이 응답을 데이터 뱅크(110a)상의 분산 RAID 애플리케이션(210a)으로부터 수신하고 호스트(102b)로부터 발행된 최초 READ 커맨드에 응답하기 위해 상기 응답으로부터의 데이터를 사용할 수 있다.

이제 호스트(102b)가, 오류 상태에 있고 더 이상 동작하지 않는, 데이터 뱅크(110a)상의 데이터 세그먼트 "2"(402c)에 대응하는 논리 주소를 READ 커맨드가 참조하는, READ 커맨드를, 발행하는 것으로 가정한다. 이 경우에, 데이터 뱅크(110c)상의 분산 RAID 애플리케이션(210c)은 수신된 READ 커맨드의 논리 주소가 데이터 세그먼트 "2"(402c)를 참조한다고 그리고 데이터 세그먼트 "2"(402c)는 데이터 뱅크(110a)에 저장되어 있다고 결정할 수 있다. 또한, 데이터 뱅크(110c)상의 분산 RAID 애플리케이션(210c)은 데이터 뱅크(110a)가 오류 상태에 있다고 결정할 수 있다.

따라서, 분산 RAID 애플리케이션(210c)은 데이터 세그먼트 "2"(402c)에 대응하는 패리티 세그먼트(402j)의 위치가 데이터 뱅크(110e)인 것으로 결정할 수 있다. 분산 RAID 애플리케이션(210c)은 그후 READ 커맨드를 데이터 뱅크(110e)에 전송할 수 있다. 데이터 뱅크(110e)상의 분산 RAID 애플리케이션(210e)은 이 READ 커맨드를 수신하고, READ 커맨드가 데이터 세그먼트 "2"(402c)에 대응하는 논리 주소를 참조한다고 그리고 데이터 세그먼트 "2"(402c)에 대응하는 패리티 세그먼트(402j)가 그것이 실행중인 데이터 뱅크(110e)에 위치되어 있다고 결정할 수 있다. 분산 RAID 애플리케이션(210e)은 그후 패리티 세그먼트(402j)를 액세스하기 위해 데이터 스토어(250e)를 액세스하고 패리티 세그먼트(402j)를 이용하여 데이터 세그먼트 "2"(402c)로부터 요청된 데이터를 획득할 수 있다. 이렇게 획득된 데이터는 발행 데이터 뱅크(110c)에 있는 분산 RAID 애플리케이션(210c)에 반환될 수 있다. 분산 RAID 애플리케이션(210e)은 데이터 세그먼트 "2"(402c)에 대해 요청된 데이터를 결정하기 위해 다른 데이터를 필요로 할 수 있다. 따라서, 분산 RAID 애플리케이션(210e)은 패리티 세그먼트(402j)를 생성하기 위해 데이터 세그먼트 "2"(402c)와 공동으로 사용되었던 데이터 세그먼트 "0"(402a), 데이터 세그먼트 "1"(402b) 및 데이터 세그먼트 "3"(402d)의 위치가 각각 데이터 뱅크(110b, 110d 및 110c)에 위치되어 있다고 결정할 수 있다. 분산 RAID 애플리케이션(210e)은 그후 이들 데이터 뱅크(110b, 110d 및 110c)에 READ 요청을 전송함에 의해 데이터 세그먼트 "0"(402a), 데이터 세그먼트 "1"(402b) 및 데이터 세그먼트 "3"(402d)을 획득할 수 있고 데이터 세그먼트 "2"(402c)로부터 요청된 데이터를 획득하기 위해 데이터 세그먼트 "0"(402a), 데이터 세그먼트 "1"(402b) 및 데이터 세그먼트 "3"(402d)을 사용할 수 있다.

데이터 뱅크(110c)상의 분산 RAID 애플리케이션(210c)은 데이터 뱅크(110e)상의 분산 RAID 애플리케이션(210e)으로부터 응답을 수신하고 호스트(102b)로부터 발행된 최초 READ 커맨드에 응답하기 위해 상기 응답으로부터의 데이터를 사용할 수 있다. 이러한 방식으로, 데이터 세그먼트에 대응하는 데이터는 분산 RAID 시스템에서의 오류의 발생에도 불구하고 호스트에 의해 판독될 수 있다.

WRITE 커맨드에 대해 계속 설명하면, 호스트(102b)는 데이터 뱅크(110c)에 WRITE 커맨드를 발행한다고 가정하는데, 여기서 WRITE 커맨드는 데이터 뱅크(110a)상의 데이터 세그먼트 "2"(402c)에 대응하는 논리 주소를 참조한다. 여기서, 데이터 뱅크(110c)상의 데이터 세그먼트 "2"(402c)는 수신된 WRITE 커맨드의 논리 주소가 데이터 세그먼트 "2"(402c)를 참조하고 데이터 세그먼트 "2"(402c)는 데이터 뱅크(110a)에 저장되어 있는 것으로 가정한다. 더욱이, 분산 RAID 애플리케이션(210c)은 데이터 세그먼트 "2"(402c)에 대응하는 패리티 세그먼트(402j)가 데이터 뱅크(110e)에 위치되어 있다고 결정할 수 있다. 분산 RAID 애플리케이션(210c)은 그후 대응하는 WRITE 커맨드를 데이터 뱅크(110a 및 110e)에 전송할 수 있다. 분산 RAID 애플리케이션(210a 및 210e)으로부터 완료 통지를 수신하면, 분산 RAID 애플리케이션(210c)은 최초에 수신된 WRITE 커맨드에 응답할 수 있다.

데이터 뱅크(110e)상의 분산 RAID 애플리케이션(210c)은 그 대응하는 WRITE 커맨드를 수신하고, WRITE 커맨드가 데이터 세그먼트 "2"(402c)에 대응하는 논리 주소를 참조한다고 그리고 데이터 세그먼트 "2"(402c)에 대응하는 패리티 세그먼트(402j)가 그것이 실행중인 데이터 뱅크(110e)상에 위치되어 있다고 결정할 수 있다. 분산 RAID 애플리케이션(210e)은 자신의 기록 캐쉬에 WRITE 커맨드를 위치시키고 데이터 뱅크(110c)에 완료 통지를 전송할 수 있다. 분산 RAID 애플리케이션(210e)은 그후 패리티 세그먼트(402j)를 액세스하기 위해 데이터 스토어(250e)를 액세스하고 수신된 WRITE 커맨드에서 참조된 데이터를 이용하여 패리티 세그먼트(402j)를 갱신할 수 있다.

데이터 뱅크(110a)상의 분산 RAID 애플리케이션(210a)은 그 대응하는 WRITE 커맨드를 수신하고, WRITE 커맨드가 데이터 세그먼트 "2"(402c)에 대응하는 논리 주소를 참조한다고 그리고 데이터 세그먼트 "2"(402c)가 그것이 실행중인 데이터 뱅크(110a)상에 위치되어 있다고 결정할 수 있다. 분산 RAID 애플리케이션(210a)은 자신의 기록 캐쉬에 WRITE 커맨드를 위치시키고 데이터 뱅크(110c)에 완료 통지를 전송할 수 있다. 분산 RAID 애플리케이션(210a)은 그후 수신된 WRITE 커맨드에서 참조된 데이터를 이용하여 세그먼트"2"(402c)를 갱신하기 위해 데이터 스토어(250e)를 액세스할 수 있다.

또다시 호스트(102b)는 데이터 뱅크(110c)에 WRITE 커맨드를 발행한다고 가정하는 데, 여기서 WRITE 커맨드는, 오류 상태에 있고 더 이상 동작하지 않는, 데이터 뱅크(110a)상의 데이터 세그먼트"2"(402c)에 대응하는 논리 주소를 참조한다고 가정한다. 이 경우에, 데이터 뱅크(110c)상의 분산 RAID 애플리케이션(210c)은 수신된 WRITE 커맨드의 논리 주소가 데이터 세그먼트 "2"(402c)를 참조한다고 그리고 데이터 세그먼트 "2"(402c)는 데이터 뱅크(110a)에 저장되어 있다고 결정할 수 있다. 또한, 데이터 뱅크(110c)상의 분산 RAID 애플리케이션(210c)은 데이터 뱅크(110a)가 오류 상태에 있다고 결정할 수 있다. 더욱이, 분산 RAID 애플리케이션(210c)은 데이터 세그먼트 "2"(402c)에 대응하는 패리티 세그먼트(402j)가 데이터 뱅크(110e)상에 위치되어 있다고 결정할 수 있다. 분산 RAID 애플리케이션(210c)은 그후 대응하는 WRITE 커맨드를 데이터 뱅크(110e)에 전송할 수 있다. 분산 RAID 애플리케이션(210e)으로부터 완료 통지를 수신하면, 분산 RAID 애플리케이션(210c)은 최초로 수신된 WRITE 커맨드에 대해 응답할 수 있다.

데이터 뱅크(110e)상의 분산 RAID 애플리케이션(210e)은 대응하는 WRITE 커맨드를 수신하고, 이 WRITE 커맨드가 데이터 세그먼트 "2"(402c)에 대응하는 논리 주소를 참조한다고 그리고 데이터 세그먼트 "2"(402c)에 대응하는 패리티 세그먼트(402j)가 그것이 실행중인 데이터 뱅크(110e)에 위치되어 있다고 결정할 수 있다. 분산 RAID 애플리케이션(210e)은 그후 자신의 기록 캐쉬에 WRITE 커맨드를 위치시키고 완료 통지를 데이터 뱅크(110c)에 전송할 수 있다. 분산 RAID 애플리케이션(210e)은 그후 패리티 세그먼트(402j)를 액세스하기 위해 데이터 스토어(250e)를 액세스하고 수신된 WRITE 커맨드에서 참조된 데이터를 이용하여 패리티 세그먼트(402j)를 갱신할 수 있다. 이러한 방식으로, 데이터 세그먼트에 대응하는 데이터는 분산 RAID 시스템에서 오류의 발생에도 불구하고 호스트에 의해 기록될 수 있다.

상기 상세한 설명에서, 본 발명은 특정 실시예를 참조하여 설명되었다. 그러나, 당업자는 다양한 수정 및 변경이 하기의 청구항에 정의된 발명의 범위로부터 벗어나지 않고 행해질 수 있음을 인식할 것이다. 따라서, 발명의 상세한 설명 및 도면들은 제한적이기 보단 예시적인 것으로 간주되어야 하고, 본 발명에 대한 그러한 모든 수정들은 본 발명의 범위에 포함되는 것으로 의도된다.

종래 기술의 문제점들에 대한 본 발명의 이점, 기타 장점 및 해결책들이 특정 실시예를 참조하여 상기한 바와 같이 설명되었다. 그러나, 문제점들에 대한 본 발명의 이점, 기타 장점 및 해결책들, 및 임의의 이점, 기타 장점 및 해결책들을 발생시키거나 더욱 분명하게 되도록 하는 임의의 컴포넌트(들)은 임의의 또는 모든 청구항에서 매우 중요하고 필요 불가결한 특징 또는 컴포넌트인 것으로 간주되지 않아야 한다.

102a, 102b, 102c, 102n: 호스트
110a, 110b, 110c, 110d: 데이터 뱅크
120a, 120b: 스위치

Claims (20)

  1. 분산 RAID(Redundant Array of Independent Disk)를 구현하기 위한 시스템에 있어서,
    하나 이상의 호스트; 및
    복수의 데이터 뱅크 컴퓨터를 포함하고,
    각각의 데이터 뱅크는 각각의 호스트 및 다른 복수의 데이터 뱅크의 각각에 연결되고, 상기 각각의 데이터 뱅크는,
    프로세서; 데이터 스토어(data store); 및 명령어를 포함하고 있는 컴퓨터로 판독가능한 매체를 포함하고, 상기 명령어는,
    상기 하나 이상의 호스트의 제1 호스트로부터 볼륨(volume)의 제 1 세그먼트에 대응하는 커맨드를 수신하고 - 상기 볼륨의 각각의 세그먼트에 대하여 그 세그먼트와 연관된 중복(redundancy) 데이터를 포함하는 대응하는 중복 세그먼트가 상기 세그먼트가 상주하는 데이터 뱅크와 동일한 데이터 뱅크에 상주하지 않도록, 상기 볼륨 및 볼륨과 공동으로 구현된 RAID 레벨에 대응하는 중복 데이터가 상기 복수의 데이터 뱅크의 각각에 저장됨 - ,
    상기 복수의 데이터 뱅크의 제1 데이터 뱅크 - 상기 제1 데이터 뱅크는 상기 제1 세그먼트에 대응함 - 를 결정하고,
    상기 제1 데이터 뱅크가 상기 커맨드를 수신한 데이터 뱅크이면 상기 제1 세그먼트에 대해 상기 제1 커맨드를 실행하고, 그렇지 않은 경우엔 상기 제1 커맨드를 상기 제1 데이터 뱅크에 전송하도록 실행될 수 있는 것인, 분산 RAID를 구현하기 위한 시스템.
  2. 제1 항에 있어서, 상기 볼륨의 각각의 세그먼트는 상기 복수의 데이터 뱅크 중의 하나에 대응하고, 각각의 세그먼트는 상기 복수의 데이터 뱅크의 순열(permutation)에 따라 복수의 데이터 뱅크 중의 하나에 할당되며, 상기 중복 세그먼트의 각각은 그 중복 세그먼트와 연관된 상기 볼륨의 임의의 세그먼트에 대응하는 상기 복수의 데이터 뱅크의 각각과는 별개인 복수의 데이터 뱅크 중의 하나에 할당되는 것인, 분산 RAID를 구현하기 위한 시스템.
  3. 제2 항에 있어서, 상기 컴퓨터 명령어는 또한, 상기 제1 커맨드가 기록 커맨드인지를 결정하고 만일 상기 제1 커맨드가 기록 커맨드이면 상기 복수의 데이터 뱅크의 제2 데이터 뱅크 - 상기 제2 데이터 뱅크는 상기 제1 세그먼트와 연관된 제1 중복 세그먼트에 대응함 - 를 결정하도록 실행될 수 있고, 상기 제2 데이터 뱅크가 상기 커맨드를 수신한 데이터 뱅크이면 상기 제1 중복 세그먼트에 대해 상기 제1 커맨드를 실행하고, 그렇지 않은 경우엔 상기 제1 커맨드를 상기 제2 데이터 뱅크에 전송하도록 실행될 수 있는 것인, 분산 RAID를 구현하기 위한 시스템.
  4. 제3 항에 있어서, 상기 제1 데이터 뱅크를 결정하는 것과 상기 제2 데이터 뱅크를 결정하는 것은 상기 데이터 스토어내의 글로벌 테이블(global table)을 액세스하는 것을 포함하고, 상기 글로벌 테이블은 RAID 레벨 및 데이터 뱅크의 순열을 포함하는 것인, 분산 RAID를 구현하기 위한 시스템.
  5. 프로세서를 갖는 컴퓨팅 디바이스상에 분산 RAID를 구현하는 방법에 있어서,
    복수의 데이터 뱅크에 볼륨을 수립하고 - 상기 볼륨은 세그먼트의 셋트를 포함하고, 상기 세그먼트의 셋트는 복수의 데이터 뱅크에 저장됨 - ;
    상기 볼륨과 공동으로 RAID 레벨을 구현하고 - 상기 RAID 레벨을 구현하는 것은 중복 세그먼트의 셋트를 저장하는 것을 포함하고, 각각의 중복 세그먼트는, 각각의 중복 세그먼트가 상기 세그먼트의 셋트의 대응하는 하나 이상의 세그먼트가 상주하는 데이터 뱅크와 동일한 데이터 뱅크에 상주하지 않도록, 상기 세그먼트의 셋트의 하나 이상의 세그먼트에 대응함 - ;
    상기 볼륨의 상기 세그먼트의 셋트의 제1 세그먼트에 대응하는 커맨드를 수신하고;
    상기 복수의 데이터 뱅크의 제1 데이터 뱅크 - 상기 제1 데이터 뱅크는 상기 제1 세그먼트에 대응함 - 를 결정하고;
    상기 제1 세그먼트에 대해 제1 커맨드를 실행하는 것을 포함하며,
    상기 제1 커맨드는 상기 제1 데이터 뱅크상에서 실행되는 것인, 프로세서를 갖는 컴퓨팅 디바이스상에 분산 RAID를 구현하는 방법.
  6. 제5 항에 있어서, 상기 볼륨의 상기 세그먼트의 셋트의 각각은 상기 복수의 데이터 뱅크 중의 하나에 대응하고, 각각의 세그먼트는 상기 복수의 데이터 뱅크의 순열에 따라 데이터 뱅크에 할당되며, 상기 중복 세그먼트의 셋트의 각각은 상기 중복 세그먼트에 대응하는 하나 이상의 임의의 세그먼트에 대응하는 상기 복수의 데이터 뱅크의 각각과는 별개인 데이터 뱅크에 할당되는 것인, 프로세서를 갖는 컴퓨팅 디바이스상에 분산 RAID를 구현하는 방법.
  7. 제6 항에 있어서, 상기 제1 커맨드가 기록 커맨드인지를 결정하고 만일 상기 제1 커맨드가 기록 커맨드이면 상기 복수의 데이터 뱅크의 제2 데이터 뱅크 - 상기 제2 데이터 뱅크는 상기 제1 세그먼트와 연관된 제1 중복 세그먼트에 대응함 - 를 결정하는 것과, 상기 제1 중복 세그먼트에 대해 상기 제1 커맨드를 실행하는 것을 더 포함하고, 상기 제1 커맨드는 상기 제2 데이터 뱅크상에서 실행되는 것인, 프로세서를 갖는 컴퓨팅 디바이스상에 분산 RAID를 구현하는 방법.
  8. 제7 항에 있어서, 상기 제1 데이터 뱅크를 결정하는 것과 상기 제2 데이터 뱅크를 결정하는 것은 RAID 레벨 및 데이터 뱅크의 순열을 포함하는 글로벌 테이블을 액세스하는 것을 포함하는 것인, 프로세서를 갖는 컴퓨팅 디바이스상에 분산 RAID를 구현하는 방법.
  9. 하나 이상의 데이터 뱅크 컴퓨터에 분산 RAID를 구현하기 위한 방법으로서, 각각의 데이터 뱅크 컴퓨터가 하나 이상의 호스트 및 다른 복수의 데이터 뱅크의 각각에 연결되어 있는 것인, 상기 방법에 있어서,
    호스트로부터 볼륨의 제1 세그먼트에 대응하는 커맨드를 수신하고 - 상기 볼륨의 각각의 세그먼트에 대하여 그 세그먼트와 연관된 중복 데이터를 포함하는 대응하는 중복 세그먼트가 상기 세그먼트가 상주하는 데이터 뱅크와 동일한 데이터 뱅크에 상주하지 않도록, 상기 볼륨 및 볼륨과 공동으로 구현된 RAID 레벨에 대응하는 중복 데이터가 복수의 데이터 뱅크의 각각에 저장됨 - ,
    상기 복수의 데이터 뱅크의 제1 데이터 뱅크 - 상기 제1 데이터 뱅크는 제1 세그먼트에 대응함 - 를 결정하고,
    상기 제1 세그먼트에 대해 제1 커맨드를 실행하는 것을 포함하며,
    상기 제1 커맨드는 상기 제1 데이터 뱅크상에서 실행되는 것인, 하나 이상의 데이터 뱅크 컴퓨터에 분산 RAID를 구현하기 위한 방법.
  10. 제9 항에 있어서, 상기 볼륨의 각각의 세그먼트는 상기 복수의 데이터 뱅크 중의 하나에 대응하고, 각각의 세그먼트는 상기 복수의 데이터 뱅크의 순열에 따라 데이터 뱅크에 할당되며, 중복 세그먼트의 각각은 그 중복 세그먼트와 연관된 상기 볼륨의 임의의 세그먼트에 대응하는 상기 복수의 데이터 뱅크의 각각과는 별개인 데이터 뱅크에 할당되는 것인, 하나 이상의 데이터 뱅크 컴퓨터에 분산 RAID를 구현하기 위한 방법.
  11. 제10 항에 있어서, 상기 제1 커맨드가 기록 커맨드인지를 결정하고 만일 상기 제1 커맨드가 기록 커맨드이면 상기 복수의 데이터 뱅크의 제2 데이터 뱅크 - 상기 제2 데이터 뱅크는 상기 제1 세그먼트와 연관된 제1 중복 세그먼트에 대응함 - 를 결정하는 것과, 중복 세그먼트에 대해 상기 제1 커맨드를 실행하는 것을 더 포함하고, 상기 제1 커맨드는 상기 제2 데이터 뱅크상에서 실행되는 것인, 하나 이상의 데이터 뱅크 컴퓨터에 분산 RAID를 구현하기 위한 방법.
  12. 제11 항에 있어서, 상기 제1 데이터 뱅크를 결정하는 것과 상기 제2 데이터 뱅크를 결정하는 것은 RAID 레벨 및 데이터 뱅크의 순열을 포함하는 글로벌 테이블을 액세스하는 것을 포함하는 것인, 하나 이상의 데이터 뱅크 컴퓨터에 분산 RAID를 구현하기 위한 방법.
  13. 분산 RAID를 구현하기 위한 컴퓨터에서 실행가능한 명령어를 포함하는 컴퓨터로 판독가능한 매체에 있어서, 상기 컴퓨터에서 실행가능한 명령어는,
    복수의 데이터 뱅크에 볼륨을 수립하고 - 상기 볼륨은 세그먼트의 셋트를 포함하고, 상기 세그먼트의 셋트는 복수의 데이터 뱅크에 저장됨 - ;
    상기 볼륨과 공동으로 RAID 레벨을 구현하고 - 상기 RAID 레벨을 구현하는 것은 중복 세그먼트의 셋트를 저장하는 것을 포함하고, 각각의 중복 세그먼트는, 각각의 중복 세그먼트가 상기 세그먼트의 셋트의 대응하는 하나 이상의 세그먼트가 상주하는 데이터 뱅크와 동일한 데이터 뱅크에 상주하지 않도록, 상기 세그먼트의 셋트의 하나 이상의 세그먼트에 대응함 - ;
    상기 볼륨의 상기 세그먼트의 셋트의 제1 세그먼트에 대응하는 커맨드를 수신하고;
    상기 복수의 데이터 뱅크의 제1 데이터 뱅크 - 상기 제1 데이터 뱅크는 상기 제1 세그먼트에 대응함 - 를 결정하고;
    상기 제1 세그먼트에 대해 상기 제1 커맨드를 실행하도록, 실행될 수 있으며,
    상기 제1 커맨드는 상기 제1 데이터 뱅크상에서 실행되는 것인, 분산 RAID를 구현하기 위한 컴퓨터에서 실행가능한 명령어를 포함하는 컴퓨터로 판독가능한 매체.
  14. 제13 항에 있어서, 상기 볼륨의 상기 세그먼트의 셋트의 각각은 상기 복수의 데이터 뱅크 중의 하나에 대응하고, 각각의 세그먼트는 상기 복수의 데이터 뱅크의 순열에 따라 데이터 뱅크에 할당되며, 상기 중복 세그먼트의 셋트의 각각은 상기 중복 세그먼트에 대응하는 하나 이상의 임의의 세그먼트에 대응하는 상기 복수의 데이터 뱅크의 각각과는 별개인 데이터 뱅크에 할당되는 것인, 분산 RAID를 구현하기 위한 컴퓨터에서 실행가능한 명령어를 포함하는 컴퓨터로 판독가능한 매체.
  15. 제14 항에 있어서, 상기 컴퓨터에서 실행가능한 명령어는 또한, 상기 제1 커맨드가 기록 커맨드인지를 결정하고 만일 상기 제1 커맨드가 기록 커맨드이면 상기 복수의 데이터 뱅크의 제2 데이터 뱅크 - 상기 제2 데이터 뱅크는 상기 제1 세그먼트와 연관된 제1 중복 세그먼트에 대응함 - 를 결정하고, 상기 제1 중복 세그먼트에 대해 상기 제1 커맨드를 실행하도록, 실행될 수 있으며, 상기 제1 커맨드는 상기 제2 데이터 뱅크상에서 실행되는 것인, 분산 RAID를 구현하기 위한 컴퓨터에서 실행가능한 명령어를 포함하는 컴퓨터로 판독가능한 매체.
  16. 제15 항에 있어서, 상기 제1 데이터 뱅크를 결정하는 것과 상기 제2 데이터 뱅크를 결정하는 것은 RAID 레벨 및 데이터 뱅크의 순열을 포함하는 글로벌 테이블을 액세스하는 것을 포함하는 것인, 분산 RAID를 구현하기 위한 컴퓨터에서 실행가능한 명령어를 포함하는 컴퓨터로 판독가능한 매체.
  17. 복수의 데이터 뱅크 컴퓨터에 분산 RAID를 구현하기 위한 컴퓨터에서 실행가능한 명령어를 포함하는 컴퓨터로 판독가능한 매체에 있어서, 상기 컴퓨터에서 실행가능한 명령어는,
    호스트로부터 볼륨의 제1 세그먼트에 대응하는 커맨드를 수신하고 - 상기 볼륨의 각각의 세그먼트에 대하여 그 세그먼트와 연관된 중복 데이터를 포함하는 대응하는 중복 세그먼트가 상기 세그먼트가 상주하는 데이터 뱅크와 동일한 데이터 뱅크에 상주하지 않도록, 상기 볼륨 및 볼륨과 공동으로 구현된 RAID 레벨에 대응하는 중복 데이터가 복수의 데이터 뱅크의 각각에 저장됨 - ,
    상기 복수의 데이터 뱅크의 제1 데이터 뱅크 - 상기 제1 데이터 뱅크는 제1 세그먼트에 대응함 - 를 결정하고,
    상기 제1 세그먼트에 대해 제1 커맨드를 실행하도록, 실행될 수 있으며,
    상기 제1 커맨드는 상기 제1 데이터 뱅크상에서 실행되는 것인, 복수의 데이터 뱅크 컴퓨터에 분산 RAID를 구현하기 위한 컴퓨터에서 실행가능한 명령어를 포함하는 컴퓨터로 판독가능한 매체.
  18. 제17 항에 있어서, 상기 볼륨의 각각의 세그먼트는 상기 복수의 데이터 뱅크 중의 하나에 대응하고, 각각의 세그먼트는 상기 복수의 데이터 뱅크의 순열에 따라 데이터 뱅크에 할당되며, 중복 세그먼트의 각각은 그 중복 세그먼트와 연관된 볼륨의 임의의 세그먼트에 대응하는 상기 복수의 데이터 뱅크의 각각과는 별개인 데이터 뱅크에 할당되는 것인, 복수의 데이터 뱅크 컴퓨터에 분산 RAID를 구현하기 위한 컴퓨터에서 실행가능한 명령어를 포함하는 컴퓨터로 판독가능한 매체.
  19. 제18 항에 있어서, 상기 컴퓨터에서 실행가능한 명령어는 또한, 상기 제1 커맨드가 기록 커맨드인지를 결정하고 만일 상기 제1 커맨드가 기록 커맨드이면 상기 복수의 데이터 뱅크의 제2 데이터 뱅크 - 상기 제2 데이터 뱅크는 상기 제1 세그먼트와 연관된 제1 중복 세그먼트에 대응함 - 를 결정하고, 중복 세그먼트에 대해 상기 제1 커맨드를 실행하도록, 실행될 수 있으며, 상기 제1 커맨드는 상기 제2 데이터 뱅크상에서 실행되는 것인, 복수의 데이터 뱅크 컴퓨터에 분산 RAID를 구현하기 위한 컴퓨터에서 실행가능한 명령어를 포함하는 컴퓨터로 판독가능한 매체.
  20. 제19 항에 있어서, 상기 제1 데이터 뱅크를 결정하는 것과 상기 제2 데이터 뱅크를 결정하는 것은 RAID 레벨 및 데이터 뱅크의 순열을 포함하는 글로벌 테이블을 액세스하는 것을 포함하는 것인, 복수의 데이터 뱅크 컴퓨터에 분산 RAID를 구현하기 위한 컴퓨터에서 실행가능한 명령어를 포함하는 컴퓨터로 판독가능한 매체.
KR1020107029904A 2008-06-06 2009-06-05 분산 raid 구현을 위한 방법 및 시스템 KR20110031441A (ko)

Priority Applications (12)

Application Number Priority Date Filing Date Title
US13129008P true 2008-06-06 2008-06-06
US13131208P true 2008-06-06 2008-06-06
US13137908P true 2008-06-06 2008-06-06
US13127008P true 2008-06-06 2008-06-06
US13129108P true 2008-06-06 2008-06-06
US13131408P true 2008-06-06 2008-06-06
US61/131,290 2008-06-06
US61/131,291 2008-06-06
US61/131,314 2008-06-06
US61/131,379 2008-06-06
US61/131,270 2008-06-06
US61/131,312 2008-06-06

Publications (1)

Publication Number Publication Date
KR20110031441A true KR20110031441A (ko) 2011-03-28

Family

ID=41398559

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020107029904A KR20110031441A (ko) 2008-06-06 2009-06-05 분산 raid 구현을 위한 방법 및 시스템

Country Status (9)

Country Link
US (16) US8239624B2 (ko)
EP (2) EP2645251A1 (ko)
JP (2) JP2011523144A (ko)
KR (1) KR20110031441A (ko)
CN (1) CN102099792A (ko)
DK (1) DK2304568T3 (ko)
HK (1) HK1154969A1 (ko)
IL (1) IL209571A (ko)
WO (3) WO2009149388A1 (ko)

Families Citing this family (148)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9632722B2 (en) * 2010-05-19 2017-04-25 International Business Machines Corporation Balancing storage unit utilization within a dispersed storage network
US7836226B2 (en) 2007-12-06 2010-11-16 Fusion-Io, Inc. Apparatus, system, and method for coordinating storage requests in a multi-processor/multi-thread environment
KR20090102789A (ko) 2006-12-06 2009-09-30 퓨전 멀티시스템즈, 인크.(디비에이 퓨전-아이오) 프로그레시브 raid를 이용한 데이터 저장 장치, 시스템 및 방법
US8489817B2 (en) 2007-12-06 2013-07-16 Fusion-Io, Inc. Apparatus, system, and method for caching data
US8935302B2 (en) 2006-12-06 2015-01-13 Intelligent Intellectual Property Holdings 2 Llc Apparatus, system, and method for data block usage information synchronization for a non-volatile storage volume
US9519540B2 (en) 2007-12-06 2016-12-13 Sandisk Technologies Llc Apparatus, system, and method for destaging cached data
US8886909B1 (en) 2008-03-31 2014-11-11 Emc Corporation Methods, systems, and computer readable medium for allocating portions of physical storage in a storage array based on current or anticipated utilization of storage array resources
JP2011523144A (ja) * 2008-06-06 2011-08-04 ピボット3 分散型raid実装のための方法およびシステム
US8219750B2 (en) * 2008-06-30 2012-07-10 Pivot3 Method and system for execution of applications in conjunction with distributed RAID
US8176247B2 (en) * 2008-10-28 2012-05-08 Pivot3 Method and system for protecting against multiple failures in a RAID system
JP5999645B2 (ja) 2009-09-08 2016-10-05 ロンギチュード エンタープライズ フラッシュ エスエイアールエル ソリッドステート記憶デバイス上にデータをキャッシングするための装置、システム、および方法
CN102598019B (zh) * 2009-09-09 2015-08-19 才智知识产权控股公司(2) 用于分配存储的设备、系统和方法
US9122579B2 (en) 2010-01-06 2015-09-01 Intelligent Intellectual Property Holdings 2 Llc Apparatus, system, and method for a storage layer
US8554994B2 (en) * 2009-09-29 2013-10-08 Cleversafe, Inc. Distributed storage network utilizing memory stripes
US8880843B2 (en) 2010-02-10 2014-11-04 International Business Machines Corporation Providing redundancy in a virtualized storage system for a computer system
US9792181B2 (en) * 2010-02-22 2017-10-17 International Business Machines Corporation Pool of devices providing operating system redundancy
US8484536B1 (en) * 2010-03-26 2013-07-09 Google Inc. Techniques for data storage, access, and maintenance
US8924681B1 (en) * 2010-03-31 2014-12-30 Emc Corporation Systems, methods, and computer readable media for an adaptative block allocation mechanism
US9330105B1 (en) 2010-05-07 2016-05-03 Emc Corporation Systems, methods, and computer readable media for lazy compression of data incoming to a data storage entity
WO2011145137A1 (en) * 2010-05-18 2011-11-24 Hitachi, Ltd. Storage apparatus and control method thereof for dynamic migration of small storage areas
US8448044B2 (en) * 2010-05-19 2013-05-21 Cleversafe, Inc. Retrieving data from a dispersed storage network in accordance with a retrieval threshold
US8719675B1 (en) 2010-06-16 2014-05-06 Google Inc. Orthogonal coding for data storage, access, and maintenance
US9311002B1 (en) 2010-06-29 2016-04-12 Emc Corporation Systems, methods, and computer readable media for compressing data at a virtually provisioned storage entity
US10157002B2 (en) * 2010-08-26 2018-12-18 International Business Machines Corporation Migrating an encoded data slice based on an end-of-life memory level of a memory device
US8402230B2 (en) * 2010-09-10 2013-03-19 International Business Machines Corporation Recoverability while adding storage to a redirect-on-write storage pool
JP5614213B2 (ja) * 2010-10-01 2014-10-29 日本電気株式会社 記憶領域提供装置、記憶領域提供方法、及び、記憶領域提供プログラム
WO2012083308A2 (en) 2010-12-17 2012-06-21 Fusion-Io, Inc. Apparatus, system, and method for persistent data management on a non-volatile storage media
US9348515B2 (en) * 2011-01-17 2016-05-24 Hitachi, Ltd. Computer system, management computer and storage management method for managing data configuration based on statistical information
US8874823B2 (en) 2011-02-15 2014-10-28 Intellectual Property Holdings 2 Llc Systems and methods for managing data input/output operations
US9003104B2 (en) 2011-02-15 2015-04-07 Intelligent Intellectual Property Holdings 2 Llc Systems and methods for a file-level cache
US9141527B2 (en) 2011-02-25 2015-09-22 Intelligent Intellectual Property Holdings 2 Llc Managing cache pools
US9563555B2 (en) 2011-03-18 2017-02-07 Sandisk Technologies Llc Systems and methods for storage allocation
WO2012129191A2 (en) 2011-03-18 2012-09-27 Fusion-Io, Inc. Logical interfaces for contextual storage
US8527699B2 (en) * 2011-04-25 2013-09-03 Pivot3, Inc. Method and system for distributed RAID implementation
US20120278552A1 (en) * 2011-04-28 2012-11-01 Lsi Corporation Remote execution of raid in large topologies
US9201677B2 (en) 2011-05-23 2015-12-01 Intelligent Intellectual Property Holdings 2 Llc Managing data input/output operations
US9003101B1 (en) * 2011-06-29 2015-04-07 Western Digital Technologies, Inc. Prioritized access for media with heterogeneous access rates
US9335939B2 (en) 2011-07-12 2016-05-10 Violin Memory Inc. RAIDed memory system
US9417823B2 (en) 2011-07-12 2016-08-16 Violin Memory Inc. Memory system management
GB2492981B (en) * 2011-07-18 2014-03-26 Qando Service Inc Data reconstruction
US8621317B1 (en) 2011-07-25 2013-12-31 Google Inc. Modified orthogonal coding techniques for storing data
CN102955801B (zh) * 2011-08-25 2017-06-16 中兴通讯股份有限公司 基于分布式数据库系统的数据控制方法及系统
US8615698B1 (en) 2011-09-28 2013-12-24 Google Inc. Skewed orthogonal coding techniques
WO2013057764A1 (en) * 2011-10-19 2013-04-25 Hitachi, Ltd. Storage system
US9176708B2 (en) * 2011-11-07 2015-11-03 Nexgen Storage, Inc. Primary data storage system with quality of service
US9274937B2 (en) 2011-12-22 2016-03-01 Longitude Enterprise Flash S.A.R.L. Systems, methods, and interfaces for vector input/output operations
US9251086B2 (en) 2012-01-24 2016-02-02 SanDisk Technologies, Inc. Apparatus, system, and method for managing a cache
US9116812B2 (en) 2012-01-27 2015-08-25 Intelligent Intellectual Property Holdings 2 Llc Systems and methods for a de-duplication cache
US9098200B2 (en) * 2012-02-10 2015-08-04 Hitachi, Ltd. Storage system with virtual volume having data arranged astride storage devices, and volume management method
US8856619B1 (en) 2012-03-09 2014-10-07 Google Inc. Storing data across groups of storage nodes
US9110600B1 (en) 2012-03-19 2015-08-18 Amazon Technologies, Inc. Triggered data shelving to a different storage system and storage deallocation
WO2013140492A1 (ja) * 2012-03-19 2013-09-26 富士通株式会社 データアクセス方法およびプログラム
WO2013140446A1 (en) * 2012-03-21 2013-09-26 Hitachi, Ltd. Storage apparatus and method thereof for fast creation of a eager zeroed virtual disk by allocation of pre -zeroed storage areas
WO2013157032A1 (en) * 2012-04-16 2013-10-24 Hitachi, Ltd. Storage subsystem and data management method of storage subsystem
US9823840B1 (en) * 2012-05-07 2017-11-21 Amazon Technologies, Inc. Data volume placement techniques
US9804993B1 (en) 2012-05-07 2017-10-31 Amazon Technologies, Inc. Data volume placement techniques
US9348769B2 (en) 2012-05-24 2016-05-24 Red Hat, Inc. Managing zeroed logical volume
US9612966B2 (en) 2012-07-03 2017-04-04 Sandisk Technologies Llc Systems, methods and apparatus for a virtual machine cache
US10339056B2 (en) 2012-07-03 2019-07-02 Sandisk Technologies Llc Systems, methods and apparatus for cache transfers
US10346095B2 (en) 2012-08-31 2019-07-09 Sandisk Technologies, Llc Systems, methods, and interfaces for adaptive cache persistence
TWI471241B (zh) * 2012-09-14 2015-02-01 Automotive Res & Testing Ct Brake back to charge control learning module, controller and controlled brake back to the car
US10509776B2 (en) 2012-09-24 2019-12-17 Sandisk Technologies Llc Time sequence data management
US10318495B2 (en) 2012-09-24 2019-06-11 Sandisk Technologies Llc Snapshots for a non-volatile device
US9177177B1 (en) * 2012-10-04 2015-11-03 Symantec Corporation Systems and methods for securing storage space
US8904119B2 (en) 2012-10-31 2014-12-02 Lsi Corporation Method and structures for performing a migration of a logical volume with a serial attached SCSI expander
US8782292B2 (en) * 2012-10-31 2014-07-15 Lsi Corporation Methods and structure for performing a rebuild of a logical volume with a serial attached SCSI expander
US9135198B2 (en) 2012-10-31 2015-09-15 Avago Technologies General Ip (Singapore) Pte Ltd Methods and structure for serial attached SCSI expanders that self-configure by setting routing attributes of their ports based on SMP requests
US8904108B2 (en) 2012-10-31 2014-12-02 Lsi Corporation Methods and structure establishing nested Redundant Array of Independent Disks volumes with an expander
US9632889B2 (en) * 2012-11-12 2017-04-25 Oracle International Corporation Method for the optimization of performance, capacity and redundancy in digital data storage systems
CN103023992A (zh) * 2012-11-28 2013-04-03 江苏乐买到网络科技有限公司 海量数据的分布式存储方法
US9286163B2 (en) 2013-01-14 2016-03-15 International Business Machines Corporation Data recovery scheme based on data backup status
US9842053B2 (en) 2013-03-15 2017-12-12 Sandisk Technologies Llc Systems and methods for persistent cache logging
US9235355B2 (en) 2013-04-04 2016-01-12 Avago Technologies General Ip (Singapore) Pte. Ltd. Reverse mirroring in raid level 1
US10102144B2 (en) 2013-04-16 2018-10-16 Sandisk Technologies Llc Systems, methods and interfaces for data virtualization
US9298617B2 (en) 2013-04-16 2016-03-29 International Business Machines Corporation Parallel destaging with replicated cache pinning
US9423981B2 (en) 2013-04-16 2016-08-23 International Business Machines Corporation Logical region allocation with immediate availability
US9298398B2 (en) 2013-04-16 2016-03-29 International Business Machines Corporation Fine-grained control of data placement
US9104597B2 (en) * 2013-04-16 2015-08-11 International Business Machines Corporation Destaging cache data using a distributed freezer
US9329938B2 (en) 2013-04-16 2016-05-03 International Business Machines Corporation Essential metadata replication
US9619404B2 (en) 2013-04-16 2017-04-11 International Business Machines Corporation Backup cache with immediate availability
US9104332B2 (en) 2013-04-16 2015-08-11 International Business Machines Corporation Managing metadata and data for a logical volume in a distributed and declustered system
US9542126B2 (en) 2013-04-22 2017-01-10 Avago Technologies General Ip (Singapore) Pte. Ltd. Redundant array of independent disks systems that utilize spans with different storage device counts for a logical volume
US10331375B1 (en) * 2013-06-21 2019-06-25 Amazon Technologies, Inc. Data storage area cleaner
US20150032798A1 (en) * 2013-07-24 2015-01-29 Alcatel-Lucent Canada Inc. Method And Apparatus For Providing Redundant Data Access
US9842128B2 (en) 2013-08-01 2017-12-12 Sandisk Technologies Llc Systems and methods for atomic storage operations
US10019320B2 (en) 2013-10-18 2018-07-10 Sandisk Technologies Llc Systems and methods for distributed atomic storage operations
GB2519815A (en) 2013-10-31 2015-05-06 Ibm Writing data cross storage devices in an erasure-coded system
US10073630B2 (en) 2013-11-08 2018-09-11 Sandisk Technologies Llc Systems and methods for log coordination
US9274901B2 (en) 2013-11-20 2016-03-01 Avago Technologies General Ip (Singapore) Pte. Ltd. I/O request mirroring in a clustered storage system
CN103605484B (zh) * 2013-11-26 2016-10-26 华为技术有限公司 一种数据存储的方法和存储服务器
US9612745B2 (en) * 2014-01-24 2017-04-04 Silicon Graphics International Corp. Raid set initialization
WO2015116197A1 (en) * 2014-01-31 2015-08-06 Hewlett-Packard Development Company, L.P. Storing data based on a write allocation policy
US9547448B2 (en) * 2014-02-24 2017-01-17 Netapp, Inc. System and method for transposed storage in raid arrays
KR20150121502A (ko) 2014-04-21 2015-10-29 삼성전자주식회사 스토리지 컨트롤러, 스토리지 시스템 및 상기 스토리지 컨트롤러의 동작 방법
US9612952B2 (en) * 2014-06-04 2017-04-04 Pure Storage, Inc. Automatically reconfiguring a storage memory topology
US9367243B1 (en) 2014-06-04 2016-06-14 Pure Storage, Inc. Scalable non-uniform storage sizes
US9836234B2 (en) 2014-06-04 2017-12-05 Pure Storage, Inc. Storage cluster
US9003144B1 (en) 2014-06-04 2015-04-07 Pure Storage, Inc. Mechanism for persisting messages in a storage system
US8850108B1 (en) 2014-06-04 2014-09-30 Pure Storage, Inc. Storage cluster
US9218244B1 (en) 2014-06-04 2015-12-22 Pure Storage, Inc. Rebuilding data across storage nodes
US9213485B1 (en) 2014-06-04 2015-12-15 Pure Storage, Inc. Storage system architecture
US10114757B2 (en) 2014-07-02 2018-10-30 Pure Storage, Inc. Nonrepeating identifiers in an address space of a non-volatile solid-state storage
US8868825B1 (en) 2014-07-02 2014-10-21 Pure Storage, Inc. Nonrepeating identifiers in an address space of a non-volatile solid-state storage
US9747229B1 (en) 2014-07-03 2017-08-29 Pure Storage, Inc. Self-describing data format for DMA in a non-volatile solid-state storage
US8874836B1 (en) 2014-07-03 2014-10-28 Pure Storage, Inc. Scheduling policy for queues in a non-volatile solid-state storage
US9372630B2 (en) 2014-07-09 2016-06-21 International Business Machines Corporation Migration of newly allocated data to a storage tier
US9588843B2 (en) 2014-07-14 2017-03-07 International Business Machines Corporation System and method for transferring traditional RAID to distributed array
WO2016018383A1 (en) 2014-07-31 2016-02-04 Hewlett-Packard Development Company Live migration of data
US9483346B2 (en) 2014-08-07 2016-11-01 Pure Storage, Inc. Data rebuild on feedback from a queue in a non-volatile solid-state storage
US9495255B2 (en) 2014-08-07 2016-11-15 Pure Storage, Inc. Error recovery in a storage cluster
US10079711B1 (en) 2014-08-20 2018-09-18 Pure Storage, Inc. Virtual file server with preserved MAC address
US9298647B2 (en) * 2014-08-25 2016-03-29 HGST Netherlands B.V. Method and apparatus to generate zero content over garbage data when encryption parameters are changed
US10372627B2 (en) 2014-08-25 2019-08-06 Western Digital Technologies, Inc. Method to generate pattern data over garbage data when encryption parameters are changed
CN105739909A (zh) * 2014-12-11 2016-07-06 国际商业机器公司 分布式存储系统中基于时间的数据放置方法和装置
WO2016098202A1 (ja) * 2014-12-17 2016-06-23 株式会社日立製作所 ストレージ装置およびその制御方法
US10402287B2 (en) 2015-01-30 2019-09-03 Hewlett Packard Enterprise Development Lp Preventing data corruption and single point of failure in a fault-tolerant memory
WO2016122637A1 (en) 2015-01-30 2016-08-04 Hewlett Packard Enterprise Development Lp Non-idempotent primitives in fault-tolerant memory
US9946607B2 (en) 2015-03-04 2018-04-17 Sandisk Technologies Llc Systems and methods for storage error management
US9678665B2 (en) * 2015-03-06 2017-06-13 Western Digital Technologies, Inc. Methods and systems for memory page allocation
US9948615B1 (en) 2015-03-16 2018-04-17 Pure Storage, Inc. Increased storage unit encryption based on loss of trust
US9940234B2 (en) 2015-03-26 2018-04-10 Pure Storage, Inc. Aggressive data deduplication using lazy garbage collection
US10082985B2 (en) 2015-03-27 2018-09-25 Pure Storage, Inc. Data striping across storage nodes that are assigned to multiple logical arrays
US10402261B2 (en) 2015-03-31 2019-09-03 Hewlett Packard Enterprise Development Lp Preventing data corruption and single point of failure in fault-tolerant memory fabrics
US10178169B2 (en) 2015-04-09 2019-01-08 Pure Storage, Inc. Point to point based backend communication layer for storage processing
US9672125B2 (en) 2015-04-10 2017-06-06 Pure Storage, Inc. Ability to partition an array into two or more logical arrays with independently running software
US10140149B1 (en) 2015-05-19 2018-11-27 Pure Storage, Inc. Transactional commits with hardware assists in remote memory
US9817576B2 (en) 2015-05-27 2017-11-14 Pure Storage, Inc. Parallel update to NVRAM
US10108355B2 (en) 2015-09-01 2018-10-23 Pure Storage, Inc. Erase block state detection
US9768953B2 (en) 2015-09-30 2017-09-19 Pure Storage, Inc. Resharing of a split secret
US9843453B2 (en) 2015-10-23 2017-12-12 Pure Storage, Inc. Authorizing I/O commands with I/O tokens
US10007457B2 (en) 2015-12-22 2018-06-26 Pure Storage, Inc. Distributed transactions with token-associated execution
US10482071B1 (en) * 2016-01-26 2019-11-19 Pure Storage, Inc. Systems and methods for providing metrics for a plurality of storage entities of a multi-array data storage system
US10261690B1 (en) 2016-05-03 2019-04-16 Pure Storage, Inc. Systems and methods for operating a storage system
US10216420B1 (en) 2016-07-24 2019-02-26 Pure Storage, Inc. Calibration of flash channels in SSD
US10366004B2 (en) 2016-07-26 2019-07-30 Pure Storage, Inc. Storage system with elective garbage collection to reduce flash contention
US10203903B2 (en) 2016-07-26 2019-02-12 Pure Storage, Inc. Geometry based, space aware shelf/writegroup evacuation
US10089015B1 (en) * 2016-12-28 2018-10-02 EMC IP Holding Company LLC Per-drive memory resident zeroing maps for drive zeroing in a data storage system
US10162531B2 (en) 2017-01-21 2018-12-25 International Business Machines Corporation Physical allocation unit optimization
US10459663B2 (en) 2017-01-23 2019-10-29 International Business Machines Corporation Thin provisioning of raid storage
US10210063B2 (en) 2017-02-05 2019-02-19 International Business Machines Corporation Disk array storage controller
US10141050B1 (en) 2017-04-27 2018-11-27 Pure Storage, Inc. Page writes for triple level cell flash memory
US10409521B1 (en) * 2017-04-28 2019-09-10 EMC IP Holding Company LLC Block-based backups for large-scale volumes
US10389342B2 (en) 2017-06-28 2019-08-20 Hewlett Packard Enterprise Development Lp Comparator
US10210926B1 (en) 2017-09-15 2019-02-19 Pure Storage, Inc. Tracking of optimum read voltage thresholds in nand flash devices
US10515701B1 (en) 2017-10-31 2019-12-24 Pure Storage, Inc. Overlapping raid groups
US10496330B1 (en) 2017-10-31 2019-12-03 Pure Storage, Inc. Using flash storage devices with different sized erase blocks
US10467527B1 (en) 2018-01-31 2019-11-05 Pure Storage, Inc. Method and apparatus for artificial intelligence acceleration
US10454498B1 (en) 2018-10-18 2019-10-22 Pure Storage, Inc. Fully pipelined hardware engine design for fast and efficient inline lossless data compression

Family Cites Families (66)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3160106B2 (ja) 1991-12-23 2001-04-23 エヌシーアール インターナショナル インコーポレイテッド ディスクアレーの区分け方法
JPH05324579A (ja) * 1992-05-25 1993-12-07 Hitachi Ltd 分散ファイルシステム及び記憶装置
JP2766424B2 (ja) 1992-06-04 1998-06-18 三菱電機株式会社 論理ボリューム装置
JPH07261945A (ja) * 1994-03-17 1995-10-13 Hitachi Ltd ディスクアレイ装置およびディスクアレイの区分け方法
US6449730B2 (en) * 1995-10-24 2002-09-10 Seachange Technology, Inc. Loosely coupled mass storage computer cluster
WO1999063438A1 (en) 1998-06-05 1999-12-09 Mylex Corporation Apparatus, system and method for n-way raid controller
JP3736134B2 (ja) 1998-08-28 2006-01-18 日本電信電話株式会社 分散記憶方法及び分散記憶システム及び分散記憶プログラムを記録した記録媒体
US6370605B1 (en) 1999-03-04 2002-04-09 Sun Microsystems, Inc. Switch based scalable performance storage architecture
US7000069B2 (en) 1999-04-05 2006-02-14 Hewlett-Packard Development Company, L.P. Apparatus and method for providing very large virtual storage volumes using redundant arrays of disks
US6304942B1 (en) 1999-08-09 2001-10-16 Lsi Logic Corporation Providing an upgrade path for an existing data storage system
US20010044879A1 (en) * 2000-02-18 2001-11-22 Moulton Gregory Hagan System and method for distributed management of data storage
US6745310B2 (en) 2000-12-01 2004-06-01 Yan Chiew Chow Real time local and remote management of data files and directories and method of operating the same
US6895485B1 (en) 2000-12-07 2005-05-17 Lsi Logic Corporation Configuring and monitoring data volumes in a consolidated storage array using one storage array to configure the other storage arrays
US7058788B2 (en) 2001-02-23 2006-06-06 Falconstor Software, Inc. Dynamic allocation of computer memory
US7076510B2 (en) * 2001-07-12 2006-07-11 Brown William P Software raid methods and apparatuses including server usage based write delegation
US7644136B2 (en) 2001-11-28 2010-01-05 Interactive Content Engines, Llc. Virtual file system
US7096328B2 (en) 2002-01-25 2006-08-22 University Of Southern California Pseudorandom data storage
US6757790B2 (en) * 2002-02-19 2004-06-29 Emc Corporation Distributed, scalable data storage facility with cache memory
US6901499B2 (en) * 2002-02-27 2005-05-31 Microsoft Corp. System and method for tracking data stored in a flash memory device
US20040177218A1 (en) 2002-11-06 2004-09-09 Meehan Thomas F. Multiple level raid architecture
EP2284735A1 (en) * 2002-11-14 2011-02-16 Isilon Systems, Inc. Systems and methods for restriping files in a distributed file system
US7032086B2 (en) 2003-02-28 2006-04-18 Hewlett-Packard Development Company, L.P. System and method for adjusting storage device layout with at least one status for the adjusting
US6952743B2 (en) 2003-03-07 2005-10-04 Ivivity, Inc. Interface for distributed processing of SCSI tasks
US7111147B1 (en) 2003-03-21 2006-09-19 Network Appliance, Inc. Location-independent RAID group virtual block management
US7096316B1 (en) 2003-06-30 2006-08-22 Veritas Operating Corporation Multi-host environment with coordinated distributed logging for writes to a raid storage volume
US7254754B2 (en) 2003-07-14 2007-08-07 International Business Machines Corporation Raid 3+3
US7523257B2 (en) 2003-08-27 2009-04-21 Adaptec, Inc. Method of managing raid level bad blocks in a networked storage system
US7366837B2 (en) 2003-11-24 2008-04-29 Network Appliance, Inc. Data placement technique for striping data containers across volumes of a storage system cluster
JP2005316762A (ja) * 2004-04-28 2005-11-10 Toshiba Corp ディスク記憶装置及びraid構築方法
US8055745B2 (en) 2004-06-01 2011-11-08 Inmage Systems, Inc. Methods and apparatus for accessing data from a primary data storage system for secondary storage
US7516354B2 (en) * 2004-08-25 2009-04-07 International Business Machines Corporation Storing parity information for data recovery
CN100518061C (zh) * 2004-09-07 2009-07-22 北京邦诺存储科技有限公司 写一次读多次磁盘存储系统和设计方法
JP4555036B2 (ja) 2004-09-16 2010-09-29 株式会社日立製作所 ストレージ装置及びストレージ装置のデバイス切替制御方法
US7389393B1 (en) 2004-10-21 2008-06-17 Symantec Operating Corporation System and method for write forwarding in a storage environment employing distributed virtualization
GB2419702A (en) 2004-10-29 2006-05-03 Hewlett Packard Development Co Virtual overlay infrastructures which can be suspended and later reactivated
US20060129559A1 (en) 2004-12-15 2006-06-15 Dell Products L.P. Concurrent access to RAID data in shared storage
US20070094348A1 (en) 2005-01-07 2007-04-26 Microsoft Corporation BITS/RDC integration and BITS enhancements
US7130960B1 (en) * 2005-04-21 2006-10-31 Hitachi, Ltd. System and method for managing disk space in a thin-provisioned storage subsystem
JP4690765B2 (ja) * 2005-04-26 2011-06-01 株式会社日立製作所 ストレージ管理システム、ストレージ管理サーバ、データ再配置制御方法およびデータ再配置制御プログラム
US7617370B2 (en) * 2005-04-29 2009-11-10 Netapp, Inc. Data allocation within a storage system architecture
US7904649B2 (en) * 2005-04-29 2011-03-08 Netapp, Inc. System and method for restriping data across a plurality of volumes
JP2006331076A (ja) * 2005-05-26 2006-12-07 Hitachi Ltd データ記憶システム及び記憶方法
US7529816B2 (en) 2005-06-03 2009-05-05 Hewlett-Packard Development Company, L.P. System for providing multi-path input/output in a clustered data storage network
US7437507B2 (en) 2005-06-06 2008-10-14 Cisco Technology, Inc. Online restriping technique for distributed network based virtualization
US7418550B2 (en) 2005-07-30 2008-08-26 Lsi Corporation Methods and structure for improved import/export of raid level 6 volumes
US7844775B2 (en) * 2005-09-23 2010-11-30 Avid Technology, Inc. Distribution of data in a distributed shared storage system
WO2007058617A1 (en) 2005-11-17 2007-05-24 Chee Keng Chang A controller for non-volatile memories, and methods of operating the memory controller
US20070143541A1 (en) 2005-12-19 2007-06-21 Lsi Logic Corporation Methods and structure for improved migration of raid logical volumes
US8321377B2 (en) 2006-04-17 2012-11-27 Microsoft Corporation Creating host-level application-consistent backups of virtual machines
JP5124103B2 (ja) 2006-05-16 2013-01-23 株式会社日立製作所 計算機システム
CN102880424B (zh) * 2006-05-24 2015-10-28 克姆佩棱特科技公司 用于raid管理、重新分配以及重新分段的系统和方法
US7546398B2 (en) 2006-08-01 2009-06-09 International Business Machines Corporation System and method for distributing virtual input/output operations across multiple logical partitions
JP2008107896A (ja) 2006-10-23 2008-05-08 Nec Corp 物理資源制御管理システム、物理資源制御管理方法および物理資源制御管理用プログラム
JP5244332B2 (ja) * 2006-10-30 2013-07-24 株式会社日立製作所 情報システム、データ転送方法及びデータ保護方法
US8706968B2 (en) 2007-12-06 2014-04-22 Fusion-Io, Inc. Apparatus, system, and method for redundant write caching
KR20090102789A (ko) 2006-12-06 2009-09-30 퓨전 멀티시스템즈, 인크.(디비에이 퓨전-아이오) 프로그레시브 raid를 이용한 데이터 저장 장치, 시스템 및 방법
US20080155191A1 (en) * 2006-12-21 2008-06-26 Anderson Robert J Systems and methods for providing heterogeneous storage systems
JP5246388B2 (ja) 2007-03-08 2013-07-24 日本電気株式会社 仮想装置構成システム、及びその方法
US8117495B2 (en) 2007-11-26 2012-02-14 Stratus Technologies Bermuda Ltd Systems and methods of high availability cluster environment failover protection
US20090172335A1 (en) * 2007-12-31 2009-07-02 Anand Krishnamurthi Kulkarni Flash devices with raid
US8370833B2 (en) 2008-02-20 2013-02-05 Hewlett-Packard Development Company, L.P. Method and system for implementing a virtual storage pool in a virtual environment
JP2011523144A (ja) 2008-06-06 2011-08-04 ピボット3 分散型raid実装のための方法およびシステム
US8219750B2 (en) 2008-06-30 2012-07-10 Pivot3 Method and system for execution of applications in conjunction with distributed RAID
US8176247B2 (en) 2008-10-28 2012-05-08 Pivot3 Method and system for protecting against multiple failures in a RAID system
US8850114B2 (en) 2010-09-07 2014-09-30 Daniel L Rosenband Storage array controller for flash-based storage devices
US8527699B2 (en) 2011-04-25 2013-09-03 Pivot3, Inc. Method and system for distributed RAID implementation

Also Published As

Publication number Publication date
WO2009149388A1 (en) 2009-12-10
EP2304568A4 (en) 2012-05-09
US20090307424A1 (en) 2009-12-10
US8145841B2 (en) 2012-03-27
DK2304568T3 (da) 2013-11-11
US8255625B2 (en) 2012-08-28
US8271727B2 (en) 2012-09-18
US20110320711A1 (en) 2011-12-29
US8239624B2 (en) 2012-08-07
WO2009149386A1 (en) 2009-12-10
IL209571A (en) 2015-11-30
JP2011523144A (ja) 2011-08-04
US20140143490A1 (en) 2014-05-22
US8316180B2 (en) 2012-11-20
US9465560B2 (en) 2016-10-11
CN102099792A (zh) 2011-06-15
IL209571D0 (en) 2011-01-31
US20120297137A1 (en) 2012-11-22
US8090909B2 (en) 2012-01-03
JP2011165212A (ja) 2011-08-25
EP2304568B1 (en) 2013-08-14
EP2645251A1 (en) 2013-10-02
US20090307426A1 (en) 2009-12-10
US9146695B2 (en) 2015-09-29
US20120124286A1 (en) 2012-05-17
HK1154969A1 (en) 2014-05-02
WO2010011428A1 (en) 2010-01-28
US8261017B2 (en) 2012-09-04
US8621147B2 (en) 2013-12-31
US20120137069A1 (en) 2012-05-31
US20090307421A1 (en) 2009-12-10
US8127076B2 (en) 2012-02-28
US20120297136A1 (en) 2012-11-22
US8140753B2 (en) 2012-03-20
US8082393B2 (en) 2011-12-20
US20090307423A1 (en) 2009-12-10
EP2304568A1 (en) 2011-04-06
US20090307425A1 (en) 2009-12-10
US9535632B2 (en) 2017-01-03
US8086797B2 (en) 2011-12-27
US8316181B2 (en) 2012-11-20
US20160048356A1 (en) 2016-02-18
US20120054431A1 (en) 2012-03-01
US20120054432A1 (en) 2012-03-01
US20120054433A1 (en) 2012-03-01
US20090307422A1 (en) 2009-12-10

Similar Documents

Publication Publication Date Title
JP4922496B2 (ja) I/o要求に優先順位を与える方法
US8751741B2 (en) Methods and structure for implementing logical device consistency in a clustered storage system
US7921257B1 (en) Dynamic parity distribution technique
US7991969B1 (en) Method, system, apparatus, and computer-readable medium for improving disk array performance
US7650480B2 (en) Storage system and write distribution method
US9378093B2 (en) Controlling data storage in an array of storage devices
JP3505093B2 (ja) ファイル管理システム
KR101841997B1 (ko) 순응적 존속을 위한 시스템, 방법 및 인터페이스
US6877011B2 (en) System and method for host based storage virtualization
US9128855B1 (en) Flash cache partitioning
US8909848B2 (en) Method for managing storage system using flash memory, and computer
US8131969B2 (en) Updating system configuration information
JP4932390B2 (ja) 仮想化システム及び領域割当て制御方法
US6898668B2 (en) System and method for reorganizing data in a raid storage system
US6516425B1 (en) Raid rebuild using most vulnerable data redundancy scheme first
US8832371B2 (en) Storage system with multiple flash memory packages and data control method therefor
US9418015B2 (en) Data storage within hybrid storage aggregate
US7305579B2 (en) Method, apparatus and program storage device for providing intelligent rebuild order selection
US7480780B2 (en) Highly available external storage system
US9547459B1 (en) Techniques for data relocation based on access patterns
US20120198152A1 (en) System, apparatus, and method supporting asymmetrical block-level redundant storage
EP2302500A2 (en) Application and tier configuration management in dynamic page realloction storage system
JP4749140B2 (ja) データマイグレーション方法及びシステム
US8402239B2 (en) Volume management for network-type storage devices
US7051155B2 (en) Method and system for striping data to accommodate integrity metadata

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application