KR20110089316A - Raid 시스템에서 다중 장애에 대한 보호를 제공하는 방법 및 시스템 - Google Patents

Raid 시스템에서 다중 장애에 대한 보호를 제공하는 방법 및 시스템 Download PDF

Info

Publication number
KR20110089316A
KR20110089316A KR1020117012194A KR20117012194A KR20110089316A KR 20110089316 A KR20110089316 A KR 20110089316A KR 1020117012194 A KR1020117012194 A KR 1020117012194A KR 20117012194 A KR20117012194 A KR 20117012194A KR 20110089316 A KR20110089316 A KR 20110089316A
Authority
KR
South Korea
Prior art keywords
data
segment
data bank
segments
raid
Prior art date
Application number
KR1020117012194A
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
Application filed by 피봇3 filed Critical 피봇3
Publication of KR20110089316A publication Critical patent/KR20110089316A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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 OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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/1045Nested RAID, i.e. implementing a RAID scheme in another RAID scheme

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

다중 장애로부터 RAID 시스템을 보호하는 방법 및 보호된 RAID 시스템의 실시예가 개시된다. 특히, 분산형 RAID 시스템의 특정 실시예에 있어서, 각 데이터 뱅크는 관련 기억 매체의 집합을 구비하고 유사한 분산형 RAID 애플리케이션을 실행한다. 각 데이터 뱅크의 분산형 RAID 애플리케이션은, 그 애플리케이션들 사이에서, 데이터 뱅크의 관련 기억 매체에 저장된 데이터와 협력하여 RAID의 소정 레벨 구현과 관련된 데이터 흐름을 분산 및 제어하도록 조정한다. 또한, RAID의 하나 이상의 레벨이 분산형 RAID 시스템을 구성하는 하나 이상의 데이터 뱅크 내에서 구현될 수 있다.

Description

RAID 시스템에서 다중 장애에 대한 보호를 제공하는 방법 및 시스템{METHOD AND SYSTEM FOR PROTECTING AGAINST MULTIPLE FAILURES IN A RAID SYSTEM}
본 발명은 일반적으로 기억 장치의 이용에 관한 것이다. 특히 본 발명의 실시예는 기억 장치에서 RAID를 구현하는 것에 관한 것이다. 더 구체적으로, 본 발명의 특정 실시예는 RAID의 분산형 구현에 관한 것이다.
데이터는 많은 엔티티의 중요한 자산(asset)을 표시한다. 따라서, 사고 또는 잘못된 행동에 기인하는 데이터 손실은 인력의 낭비, 고객으로부터의 신용 상실, 시간 손실 및 잠재적인 법적 책임 등의 면에서 비용 손실적일 수 있다. 사업적, 법적 또는 다른 목적으로 데이터를 적절히 보호하기 위해, 많은 엔티티는 데이터 저장, 용장(redundancy), 보안 등을 포함한 다양한 기술을 이용하여 그들의 데이터를 보호하려고 한다. 그러나, 이러한 기술은 데이터를 처리하고 저장하기 위해 사용하는 컴퓨팅 장치의 상태 또는 구성에 의해 부과되는 다른 경쟁적 구속 또는 수요와 충돌할 수 있다.
이러한 긴장을 다루기 위한 하나의 방법은 독립 디스크의 용장 배열(Redundant Array of Independent Disks; RAID)을 구현하는 것이다. 일반적으로, RAID 시스템은 집합적으로 어레이라고 부르는 복수의 하드 디스크 드라이브(또는 다른 유형의 저장 매체)에 걸쳐 데이터를 분할 및 복제함으로써 신뢰도를 향상시키고, 일부 경우에는 저장을 위해 이러한 RAID 시스템을 이용하는 컴퓨팅 장치(호스트라고 함)의 처리량(throughput)을 개선한다. 이때, 호스트에 대하여, RAID 어레이는 하나 이상의 모놀리식 저장 영역으로서 나타날 수 있다. 호스트가 RAID 시스템과 통신(읽기, 쓰기 등)하고자 할 때, 호스트는 RAID 어레이가 마치 단일 디스크인 것처럼 통신한다. RAID 시스템은 그 다음에 그러한 통신과 협력하여 특정 RAID 레벨을 구현하도록 통신을 처리한다. RAID 레벨은 신뢰도, 용량, 속도 등과 같은 다양한 교환조건(tradeoff) 사이에서 어떤 소정의 균형을 달성하도록 설계될 수 있다. 예를 들면, RAID (레벨) 0은 개선된 속도를 제공하고 디스크의 실질적으로 전체 용량을 활용하는 방식으로 수 개의 디스크에 걸쳐 데이터를 분산시키지만, 디스크가 장애를 일으키는 경우 그 디스크에 있는 모든 데이터가 손실될 것이다. RAID (레벨) 1은 동일한 데이터를 각각 저장하는 2개 (또는 그 이상)의 디스크를 사용하여 하나의 디스크가 살아있는 한 데이터가 손실되지 않게 한다. 어레이의 총 용량은 실질적으로 단일 디스크의 용량이고, RAID (레벨) 5는 임의의 하나의 디스크에서의 손실에 대하여 데이터를 보호하는 방식으로 3개 이상의 디스크를 결합하고, 어레이의 저장 용량은 하나의 디스크만큼 감소된다.
현재의 RAID 구현 방식은 여러 가지 문제점을 갖고 있다. 이 문제점들은 많은 경우에 RAID 시스템과의 모든 통신이 RAID 시스템을 제어 및 관리하는 단일 서버로 지향되어야 하는 것과 같이, RAID 시스템의 아키텍쳐에 의해 부과되는 제한으로부터 유래할 수 있다. 다른 문제점들은 RAID 시스템을 구비한 디스크에서의 데이터의 구성 또는 레이아웃으로부터 발생할 수 있다. 예를 들면, 특수한 경우에, RAID 시스템이 활용될 수 있기 전에 RAID 레벨이 선택되어야 하고 RAID 시스템 내에서 기억 장치가 할당되어야 한다. 따라서, 초기에 선택된 RAID 레벨이 요구되거나 필요한 것인지 여부에 관계없이 상기 초기에 선택된 RAID 레벨이 RAID 시스템에 저장된 데이터와 협력하여 구현되어야 한다. 또한, 많은 경우에, 현존하는 문제점들은 이러한 솔루션을 구현하기 위해 주문형 하드웨어 또는 소프트웨어를 사용할 필요가 있기 때문에 악화될 수 있고, 그러한 솔루션의 구현과 관련한 비용을 증가시킨다.
따라서, 이러한 문제점들을 실질적으로 개선하는 것이 요구되고 있다.
다중 장애에 대한 보호를 제공하기 위해 분산형 RAID 시스템과 협력하여 사용할 수 있는 각종 방법의 실시예가 개시된다. 더 구체적으로, 분산형 RAID 시스템의 각 데이터 뱅크는 데이터 세그멘트 및 NP 세그멘트를 저장할 수 있다. 일부 실시예에 있어서, RAID의 소정 레벨이 볼륨과 협력하여 데이터 뱅크에서 구현될 뿐만 아니라(예를 들면, 대응하는 데이터 세그멘트와는 다른 데이터 뱅크에 저장된 NP 세그멘트를 이용함), 추가적으로 소정의 RAID 레벨이 분산형 RAID 시스템의 각 데이터 뱅크에서 구현되어 각 데이터 뱅크 내의 데이터를 보호할 수 있다. 데이터 뱅크 내에서 뿐만 아니라 복수의 데이터 뱅크에 걸쳐서 RAID를 사용함으로써, 분산형 RAID 시스템 전체의 장애에 대한 추가적인 보호를 실현할 수 있다.
구체적으로, 일 실시예에 있어서, RAID의 레벨이 데이터 뱅크의 집합에 걸쳐 볼륨과 협력하여 구현되는 것 외에, RAID 레벨은 각 데이터 뱅크에 저장된 데이터 세그멘트와 협력하여 구현될 수 있다. 예를 들면, RAID 레벨 5는 POD 세그멘트가 대응하는 데이터 세그멘트와는 다른 디스크의 데이터 뱅크에서 생성 및 저장되도록 데이터 뱅크 내에서 구현되어, 대응하는 데이터 세그멘트가 상기 POD를 이용하여 복구되게 할 수 있다. 마찬가지로, POP 세그멘트가 대응하는 NP 세그멘트와는 다른 디스크상의 데이터 뱅크에서 생성 및 저장되어 대응하는 NP 세그멘트가 상기 POP를 이용하여 복구되게 할 수 있다.
추가적으로, 일부 실시예에서, 각 POD 세그멘트 외에 대응하는 QOD 세그멘트가 생성되도록 RAID 레벨 6이 데이터 뱅크 내에서 구현될 수 있다. QOD 세그멘트를 대응하는 POD와는 다른 디스크에 저장함으로써, 대응하는 데이터 세그멘트가 또한 QOD를 이용하여 복구될 수 있다. 마찬가지로, POP 세그멘트에 대응하는 QOP 세그멘트가 대응하는 POP 세그멘트와는 다른 디스크의 데이터 뱅크에서 생성 및 저장되어, 대응하는 네트워크 패리티 세그멘트가 상기 QOP 세그멘트를 이용하여 추가적으로 복구되게 할 수 있다.
RAID 시스템을 다중 장애로부터 보호하는 방법을 제공하는 본 발명의 실시예는 종래에 RAID 시스템을 다중 장애로부터 보호하기 위해 사용하였던 방법의 단점들을 제거하거나 적어도 실질적으로 감소시킨다. 특히, 본 발명의 실시예는 데이터 뱅크 또는 디스크 장애에 대한 보호를 제공하는 능력을 비롯해서 종래에 이용가능한 데이터 기억 장치를 능가하는 장점을 제공할 수 있다. 사실, 일부 실시예는 4가지, 5가지 또는 아마도 더 많은 디스크 장애에 대한 보호를 제공할 수 있다. 따라서, 장애가 있는 데이터 뱅크 또는 디스크를 복구 또는 교체하기 위해 개인적인 관리에 이용할 수 있는 시간이 증가하고, 분산형 RAID 시스템의 장애 사이의 평균 시간이 증가된다. 특정 실시예는 내부 장애에 의해 데이터가 손상된 경우에도 데이터 뱅크가 손상된 데이터를 내부적으로 재생성할 수 있게 함으로써 데이터 뱅크들 간의 감소된 네트워크 트래픽의 장점을 또한 제공할 수 있다.
본 발명의 상기 및 기타의 태양들은 이하의 설명 및 첨부 도면과 함께 고려할 때 더 잘 인식되고 이해될 것이다. 이하의 설명은, 비록 본 발명의 각종 실시예 및 그에 대한 많은 특정 세부를 표시하고 있지만, 단지 예시를 위해 주어진 것이고 제한하는 의도는 없다. 많은 대체, 수정, 추가 또는 재구성이 본 발명의 범위 내에서 이루어질 수 있고, 본 발명은 그러한 대체, 수정, 추가 또는 재구성을 모두 포함하는 것으로 한다.
다중 장애로부터 RAID 시스템을 보호하는 방법 및 시스템이 제공된다.
이 명세서에 첨부되어 이 명세서의 일부를 형성하는 도면은 본 발명의 특정 태양들을 묘사하기 위해 포함되었다. 본 발명의 명확한 인상 및 본 발명에서 제공하는 시스템의 구성 요소와 동작에 대한 명확한 인상이 도면에 도시한 예시적이고 비제한적인 실시예를 참조함으로써 더욱 쉽게 인식될 것이고, 도면에 있어서 동일한 참조번호는 동일한 구성 요소를 표시한다. 도면에 도시된 특징들은 반드시 정확한 축척으로 도시된 것이 아님에 주목한다.
도 1은 분산형 RAID 시스템을 사용하는 아키텍쳐의 일 실시예를 보인 블록도이다.
도 2A는 데이터 뱅크의 일 실시예의 블록도이다.
도 2B는 데이터 뱅크의 아키텍쳐의 일 실시예의 블록도이다.
도 3은 분산형 RAID 시스템에 의해 구현되는 방법의 일 실시예의 흐름도이다.
도 4는 분산형 RAID 시스템을 사용하는 아키텍쳐의 일 실시예의 블록도이다.
도 5는 테이블의 일 실시예의 블록도이다.
도 6은 테이블의 일 실시예의 블록도이다.
도 7은 테이블의 일 실시예의 블록도이다.
도 8은 분산형 RAID 시스템에 의해 구현되는 방법의 일 실시예의 흐름도이다.
도 9A는 분산형 RAID 시스템에 의해 구현되는 방법의 일 실시예의 흐름도이다.
도 9B는 분산형 RAID 시스템에 의해 구현되는 방법의 일 실시예의 흐름도이다.
도 10은 기록 캐시의 일 실시예의 블록도이다.
도 11은 분산형 RAID 시스템에 의해 구현되는 방법의 일 실시예의 흐름도이다.
도 12는 분산형 RAID 시스템에 의해 구현되는 방법의 일 실시예의 흐름도이다.
도 13A 내지 도 13C는 데이터 뱅크 내에서 소정의 RAID 레벨을 구현하는 일 예의 블록도이다.
본 발명 및 그 각종 특징과 유리한 세부는 첨부 도면에 도시되고 이하의 설명에서 상세화되는 비제한적인 실시예를 참조하여 더욱 완전하게 설명된다. 잘 알려져 있는 시작 물질, 처리 기술, 구성 요소 및 설비에 관한 설명은 본 발명의 세부를 불필요하게 불명료하게 하는 것을 방지하기 위해 생략한다. 그러나, 본 발명의 양호한 실시예를 표시하는 것이지만, 그 실시예에 대한 상세한 설명 및 특수한 예는 제한하는 의도가 없이 단지 예시적인 용도로만 주어진다는 것을 이해하여야 한다. 근원적인 발명 개념의 정신 및/또는 범위 내에서의 각종 치환, 수정, 추가 및/또는 재구성이 이 기술에 숙련된 사람에게는 이 명세서의 설명으로부터 명백할 것이다. 여기에서 설명하는 실시예들은 컴퓨터 판독가능 매체(예를 들면, HD), 하드웨어 회로 등에, 또는 임의의 조합에 존재할 수 있는 적당한 컴퓨터 실행가능 명령어로 구현될 수 있다.
특정 실시예를 설명하기 전에, 특정 실시예를 구현하기 위한 하드웨어 아키텍쳐의 실시예를 설명한다. 일 실시예는 네트워크에 통신적으로 결합된 하나 이상의 컴퓨터를 포함할 수 있다. 이 기술에 숙련된 사람이라면 알고 있는 바와 같이, 컴퓨터는 중앙 처리 장치("CPU"), 적어도 하나의 읽기 전용 메모리("ROM"), 적어도 하나의 랜덤 액세스 메모리("RAM"), 적어도 하나의 하드 드라이브("HD") 및 하나 이상의 입력/출력("I/O") 장치를 포함할 수 있다. I/O 장치는 키보드, 모니터, 프린터, 전자식 포인팅 장치(마우스, 트랙볼, 스타일리스트 등) 등을 포함할 수 있다. 각종 실시예에 있어서, 컴퓨터는 네트워크를 통해 적어도 하나의 데이터베이스에 액세스한다.
ROM, RAM 및 HD는 CPU에 의해 실행가능한 컴퓨터 실행가능 명령어를 저장하기 위한 컴퓨터 메모리이다. 이 명세서에서, 용어 "컴퓨터 판독가능 매체"는 ROM, RAM 및 HD로 제한되는 것이 아니고, 프로세서에 의해 판독가능한 임의 유형의 데이터 기억 매체를 포함할 수 있다. 일부 실시예에서, 컴퓨터 판독가능 매체는 데이터 카트리지, 데이터 백업용 자기 테이프, 플로피 디스켓, 플래시 메모리 드라이브, 광학 데이터 기억장치 드라이브, CD-ROM, ROM, RAM, HD 등을 인용할 수 있다.
여기에서 설명하는 기능 또는 처리의 적어도 일부는 적당한 컴퓨터 실행가능 명령어로 구현될 수 있다. 컴퓨터 실행가능 명령어는 하나 이상의 컴퓨터 판독가능 매체(비휘발성 메모리, 휘발성 메모리, DASD 어레이, 자기 테이프, 플로피 디스켓, 하드 드라이브, 광학 기억 장치 등, 또는 임의의 다른 적당한 컴퓨터 판독가능 매체 또는 기억 장치)에 소프트웨어 코드 성분 또는 모듈로서 저장될 수 있다. 일 실시예에 있어서, 컴퓨터 실행가능 명령어는 컴파일드 C++의 행(lines), 자바, HTML, 또는 임의의 다른 프로그래밍 또는 스크립팅 코드를 포함할 수 있다.
또한, 개시된 실시예의 기능들은 하나의 컴퓨터에서 구현되거나, 네트워크 내의 또는 네트워크에 걸친 2개 이상의 컴퓨터 사이에서 공유/분산될 수 있다. 실시예를 구현하는 컴퓨터들 간의 통신은 임의의 전자 신호, 광학 신호, 고주파수 신호, 또는 공지의 네트워크 프로토콜과 호환하는 다른 적당한 방법 및 통신 도구를 이용하여 달성될 수 있다.
여기에서 사용되는 용어 "포함한다", "포함하는", "구비한다", "구비하는", "갖는다", "갖는" 또는 이들의 임의의 다른 변형 용어는 비배타적 내포를 포괄하는 것으로 의도된다. 예를 들면, 요소들의 리스트를 포함하는 프로세스, 물품 또는 장치는 단지 그 요소로만 제한될 필요는 없고, 명시적으로 리스트되지 않은 다른 요소 또는 그러한 프로세스, 물품 또는 장치에 고유한 다른 요소들을 포함할 수 있다. 또한, 명시적으로 다르게 설명되지 않는 한, "또는"은 총괄적 또는(inclusive or)을 인용하는 것이고 배타적 또는(exclusive or)을 의미하는 것이 아니다. 예를 들면, 조건 A 또는 B는 하기의 것 중 임의의 하나에 의해 만족된다; A는 참(또는 존재)이고 B는 거짓(또는 부재)이거나, A는 거짓(또는 부재)이고 B는 참(또는 존재)이거나, A와 B가 둘 다 참(또는 존재)이다.
추가적으로, 여기에서 주어진 임의의 예 또는 설명은 어떻게든 이들이 사용하는 임의의 용어 또는 용어들로 구속되는 것으로서, 제한되는 것으로서, 또는 용어들의 정의를 표현하는 것으로서 간주되지 않는다. 그 대신에, 이들 예 및 설명은 하나의 특수한 실시예와 관련하여 설명하고 단지 예시하는 것으로서 간주되어야 한다. 이 기술에 숙련된 사람이라면, 이들 예 및 설명에서 사용하는 임의의 용어 또는 용어들이 이 명세서의 어딘가에서 제시하거나 제시하지 않을 수 있는 다른 실시예에도 적용된다는 것을 알 것이며, 그러한 모든 실시예는 그 용어 또는 용어들의 범위에 내포된 것으로 의도된다. 그러한 비제한적인 예 및 설명을 지시하는 용어는, 비제한적인 예를 들자면, "예를 들면", "예로서", "예컨대", "일 실시예에 있어서" 등이 있다.
이 출원은 "분산형 RAID 구현을 위한 방법 및 시스템"이라는 명칭으로 갤로웨이(Galloway) 등에 의해 2009년 6월 5일자 출원한 미국 특허 출원 제12/479,319호; "분산형 RAID 구현에서 데이터 이주를 위한 방법 및 시스템"이라는 명칭으로 갤로웨이 등에 의해 2009년 6월 5일자 출원한 미국 특허 출원 제12/479,360호; "명령(command)을 타겟에 분산시키는 방법 및 시스템"이라는 명칭으로 갤로웨이 등에 의해 2009년 6월 5일자 출원한 미국 특허 출원 제12/479,403호; "기억장치 시스템에서 기억장치를 초기화시키는 방법 및 시스템"이라는 명칭으로 갤로웨이 등에 의해 2009년 6월 5일자 출원한 미국 특허 출원 제12/479,377호; "분산형 RAID 시스템에서 데이터를 재구축하는 방법 및 시스템"이라는 명칭으로 갤로웨이 등에 의해 2009년 6월 5일자 출원한 미국 특허 출원 제12/479,434호; 및 "기억 장치에 데이터를 배치하기 위한 방법 및 시스템"이라는 명칭으로 갤로웨이 등에 의해 2009년 6월 5일자 출원한 미국 특허 출원 제12/479,394호와 관련이 있으며, 상기 특허 출원들은 인용에 의해 그 전체 내용이 여기에 통합된다.
특히 데이터 기억 장치와 관련한 관계를 간단히 설명하는 것이 도움이 될 것이다. 위에서 설명한 바와 같이, RAID 시스템은 집합적으로 어레이라고 부르는 복수의 하드 디스크 드라이브(또는 다른 유형의 저장 매체)에 걸쳐서 데이터를 분할 및 복제함으로써 신뢰도를 향상시키고, 일부 경우에는 저장을 위해 이러한 RAID 시스템을 이용하는 컴퓨팅 장치(호스트라고 함)의 처리량을 개선한다. 그러나, 현재의 RAID 구현 방식은 여러 가지 문제점을 갖고 있다. 이 문제점들은 많은 경우에 RAID 시스템과의 모든 통신이 RAID 시스템을 제어 및 관리하는 단일 서버로 지향되어야 하는 것과 같이, RAID 시스템의 아키텍쳐에 의해 부과되는 제한으로부터 유래할 수 있다. 다른 문제점들은 RAID 시스템을 포함한 디스크에서의 데이터의 구성 또는 레이아웃으로부터 발생할 수 있다. 예를 들면, 특수한 경우에, RAID 시스템이 활용될 수 있기 전에 RAID 시스템 내에서 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) 및 호스트(102) 간의 통신적 결합은 이더넷, SCSI, iSCSI, 파이버 채널, 직렬 결합 SCSI("SAS"), 고급 기술 결합(advanced technology attachment; ATA), 직렬 ATA("SATA") 또는 공지된 다른 프로토콜을 포함한 거의 모든 전송 매체(유선 또는 무선)를 이용하여 달성될 수 있다. 또한, 통신적 결합은 인터넷, LAN, WAN, 무선 네트워크와 같은 통신 네트워크 또는 공지된 임의의 다른 통신 네트워크와 협력하여 구현될 수 있다.
일 실시예에 있어서, 그 다음에, 호스트(102)는 iSCSI, SCSI 등의 명령 프로토콜을 이용하여 데이터 뱅크(110)와 통신하여 데이터를 조작할 수 있다. 더 구체적으로, 각 데이터 뱅크(110)는 기억 매체(뒤에서 더 구체적으로 설명함)를 포함한다. 종합적으로, 데이터 뱅크(110)의 기억 매체는 가상화되고 호스트(102)에 하나 이상의 연속적인 저장 블록, 기억 장치 등으로서 제시된다. 예를 들면, iSCSI 프로토콜을 사용하는 경우, 데이터 뱅크(110)의 기억 매체는 일 실시예로서 호스트(102)에 복수의 포트를 가진 SCSI 타겟으로서 제시될 수 있다.
따라서, 동작 중에, 일 실시예로서, 호스트(102)(또는 호스트(102)에서의 사용자 또는 데이터 뱅크(110)와 인터페이스 접속하는 사용자)는 볼륨의 생성을 요청할 수 있고, 그 볼륨과 협력하여 구현될 RAID의 레벨을 특정할 수 있다. 그 볼륨과 관련된 데이터 및 그 볼륨과 관련된 RAID의 소망하는 레벨의 구현은 데이터 뱅크(110)에 걸쳐 저장된다. 호스트(102)는 그 다음에 볼륨에 대응하는 논리 어드레스 또는 그 일부를 이용하여 이 볼륨에 액세스할 수 있다. 이와 같은 방법으로, 호스트(102)는 기억 장치의 생성된 볼륨을 사용할 수 있고, 오차 허용도는 호스트(102)에 실질적으로 보이지 않게 이 볼륨과 협력하여 달성될 수 있다.
기억 장치의 가상화 및 데이터 뱅크(110)를 이용한 RAID의 구현은 분산형 RAID를 구현하도록 동작가능한 데이터 뱅크(110) 컴퓨터의 일 실시예의 블록도를 도시한 도 2A를 참조함으로써 더 잘 이해할 수 있다. 여기에서, 데이터 뱅크(110)는 데이터 기억부(250), 및 컴퓨터 판독가능 매체에 저장된 명령어를 실행하도록 동작하는 프로세서(202)를 포함하고, 명령어들은 분산형 RAID 애플리케이션(210)을 구현하도록 동작할 수 있다. 분산형 RAID 애플리케이션(210)은 다른 데이터 뱅크(110)의 분산형 RAID 애플리케이션(210)에 허트비트(heartbeat) 통신을 주기적으로 발행하여 그 데이터 뱅크(110)와 관련하여 장애가 있었는지를 판단한다. 만일 다른 데이터 뱅크(110)에 장애가 있다고 분산형 RAID 애플리케이션(210)이 판단하면, 그 데이터 뱅크(110)에 대응하는 하나 이상의 장애 플래그가 설정될 수 있다. 각 데이터 뱅크(110)의 각 분산형 RAID 애플리케이션(210)에 대하여 상기 장애 플래그를 이용함으로써, 특수한 분산형 RAID 애플리케이션(210)은 특정 데이터 뱅크(110)에 장애가 있는지를 판단할 수 있다.
분산형 RAID 애플리케이션(210)은 또한, SATA, PATA, FC 등과 같은 공지된 거의 모든 프로토콜에 따라 동작하는 디스크(252)일 수 있는 하나 이상의 기억 매체를 포함하는 데이터 기억부(250)에 대한 액세스(예를 들면 읽기, 쓰기, 명령 발행 등)를 할 수 있다. 각 데이터 뱅크(110)에서 실행하는 분산형 RAID 애플리케이션(210)은 데이터 뱅크(110)에 걸친 데이터 기억부(250)를 이용한 볼륨의 할당 및 이용, 및 데이터 뱅크(110) 사이에 공유된 글로벌 테이블(240)의 집합, 로컬 테이블(245)의 집합 및 기록 캐시(260)를 이용하여 상기 볼륨과 함께 RAID의 구현을 가능하게 하며, 이들은 모두 메모리(230)(데이터 기억부(250) 또는 일괄하여 다른 메모리일 수 있음)에 저장될 수 있다.
도 2B는 분산형 RAID를 구현할 수 있는 데이터 뱅크(110) 컴퓨터를 구현하도록 사용될 수 있는 하드웨어 아키텍쳐의 일 실시예의 블록도를 보인 것이다. 이 구조적 예에 있어서, 데이터 뱅크(110)는 인텔 x86 아키텍쳐 또는 일괄하여 어떤 다른 아키텍쳐에 유착할 수 있는 하나 이상의 프로세서(202), 및 일 실시예에 있어서 사우스브릿지 칩(southbridge chip) 등일 수 있는 I/O 컨트롤러 허브(212)에 버스를 통해 결합된 메모리(230)를 포함한다. I/O 컨트롤러 허브(212)는 PCI-X 버스, PCI-익스프레스 버스 등의 버스(272)에 결합되어 이 버스를 제어한다. 이 버스(272)에는 예를 들면 SLI 1068 SATA/SAS 컨트롤러와 같은 하나 이상의 디스크 제어기(262)가 결합된다. 이 디스크 제어기(262)는 각각 하나 이상의 디스크(252)에 결합되고, 이 디스크(252)는 집합적으로 데이터 기억부(250)를 구성할 수 있다. 추가적으로, 하나 이상의 네트워크 인터페이스(282)가 또한 버스(272)에 결합될 수 있다. 이 네트워크 인터페이스(282)는 머더보드에 포함된 네트워크 인터페이스(이더넷 등)일 수 있고, 이더넷, 파이버 채널 등과 같은 하나 이상의 프로토콜을 거쳐 인터페이스 접속하도록 구성된 하나 이상의 네트워크 인터페이스 카드를 포함할 수 있으며, 또는 데이터 뱅크(110)가 이들 네트워크 인터페이스(282)를 통해 스위치(120)와 통신하게 하는 어떤 다른 유형의 네트워크 인터페이스일 수 있다.
이제, 도 3을 참조하면, 볼륨의 할당 및 데이터 뱅크(110)의 데이터 기억부(250)에서 상기 볼륨과 관련된 데이터의 배치 방법의 일 실시예가 도시되어 있다. 초기에, 볼륨이 데이터 기억부(250)의 디스크(252)에 할당되기 전에, 디스크가 단계 305에서 포맷된다. 전술한 바와 같이, 임의의 장애로부터 쉽고 간단하게 복구하는 능력을 갖기 위해, 임의의 대응하는 저장 데이터에 관하여 용장 데이터가 정확하게 될 필요가 있다. 많은 경우에, 이것은 볼륨의 일부가 저장되는 디스크(252)의 영역에 있는 현재 데이터로부터 용장 데이터를 계산함으로써, 비록 상기 영역에 저장된 데이터가 현재 가비지 값(garbage value)이라고 하더라도, 볼륨을 저장하기 위해 사용되는 디스크(252)를 포맷하는 것을 수반한다. 이 계산은 바람직하지 않게 많은 시간을 소비할 수 있다.
또한, 도 1과 관련하여 설명한 바와 같은 분산형 RAID 환경에서는 다른 문제점들이 발생할 수 있다. 더 구체적으로 말하면, 볼륨의 상이한 부분들이 상이한 데이터 뱅크(110)에 저장될 수 있고 그 볼륨에 대응하는 용장 데이터가 또한 각종 데이터 뱅크(110)에 저장될 수 있기 때문에, 이러한 유형의 포맷팅을 달성하는 것은 데이터 뱅크(110)에서 분산형 RAID 애플리케이션(210)들 간에 추가적으로 많은 통신을 요구함으로써 프로세서 사이클 및 통신 대역폭을 소비할 수 있다.
따라서, 일 실시예에 있어서, 볼륨의 데이터가 저장되는 디스크 영역에 대응하는 용장 데이터가 볼륨의 데이터가 저장되는 디스크(252) 영역에 관하여 정확히 되는 것을 보장하기 위해, 볼륨에 대응하는 데이터가 저장되는 디스크(252) 영역 및 용장 데이터가 저장되는 디스크(252) 영역에 제로 값이 기록될 수 있다. 볼륨의 데이터가 저장되는 디스크(252) 영역 및 용장 데이터가 저장되는 디스크(252) 영역 둘 다에 제로 값을 줌으로써, 볼륨의 임의의 데이터가 그 대응하는 용장 데이터로부터 재생성되는 것을 보장할 수 있다.
디스크(252)를 제로화하는 것은 다른 장점을 가질 수 있다. 즉, 용장 데이터를 결정하기 위해 복잡한 계산을 수행할 필요가 없고, 볼륨이 저장되는 영역과 이 영역에 대응하는 용장 데이터가 저장되는 영역들 간의 상대적 정확성을 달성하기 위해 분산형 RAID 애플리케이션(210)들 간에 통신이 이루어질 필요가 없다.
볼륨 및 그 대응하는 용장 데이터와 함께 사용하는 디스크(252)의 영역들을 제로화함으로써, RAID 시스템(100)의 유용성에 있어서 상당한 지연이 회피될 수 있다는 것은 중요한 사항이다. 이러한 장점은 예컨대 분산형 RAID 시스템(100)의 초기 사용, 새로운 디스크(252)의 설치, 볼륨의 삭제 등으로부터 야기하는 디스크의 비할당 영역을 동작 중에 실질적으로 계속적으로 제로화하는 프로세스의 사용을 통하여 달성될 수 있다. 이러한 예에서, 각 데이터 뱅크(110)에 있는 디스크(252)의 현재 비할당된(즉, 현재 할당되지 않은) 영역들은 제로가 기록될 수 있다(영역의 "제로화"라고 부름).
제로화된 디스크(252)의 비할당 영역들은 볼륨 부분에 대응하는 명령 또는 볼륨 부분과 관련된 용장 데이터가 상기 부분이 지정되는 데이터 뱅크(110)에서 수신된 때, 상기 부분이 지정된 데이터 뱅크(110)의 디스크(252)의 대응하는 영역을 상기 부분이 지정하였는지를 결정하기 위해 분산형 RAID 애플리케이션(210)이 체크하도록 추적될 수 있다. 데이터 뱅크(110)에서 디스크(252)의 대응하는 영역이 지정되지 않았으면, 분산형 RAID 애플리케이션(210)은 제로화된 디스크(252)의 영역을 선택하고, 디스크(252)의 상기 영역을 볼륨 부분 또는 대응하는 용장 데이터에 지정할 수 있다.
이전에 제로화되지 않은 임의의 비할당 영역들을 동시에 제로화하고 볼륨 부분 또는 용장 데이터에 대응하는 명령이 디스크(252)의 제로화 영역을 지정하기 위해 상기 부분에 수신될 때까지 대기함으로써, 분산형 RAID 시스템(100)은 수반되는 긴 포맷팅 처리없이 실질적으로 즉시 동작할 수 있으며, 새로운 디스크(252)가 추가되고 볼륨이 분산형 RAID 시스템(100)의 동작에 대하여 비교적 눈에 띄지 않게 삭제 또는 해방될 수 있다.
그러므로, 전술한 내용에 의해, 디스크(252)를 포맷하는 단계(305)는 분산형 RAID 시스템(100)과 관련하여 볼륨을 생성하기 전에, 생성하는 동안에 또는 생성한 후에 달성될 수 있다는 것, 및 단계 305(및 여기에서 제시하는 모든 흐름도의 모든 다른 단계들)의 배치 위치는 단계들에 대한 특정의 순서를 암시하는 것이 아니라는 것을 알 것이다. 역시 도 1의 단계들의 나머지 및 나머지 설명 부분을 전체적으로 검토한 후에는 알 수 있는 바와 같이, 볼륨 부분 또는 용장 데이터를 저장하기 위하여 상기 데이터 뱅크(110)에 있는 디스크(252)의 물리적인 영역들이 지정되기 전에 볼륨이 생성되고 이 볼륨 부분 및 이 볼륨에 대응하는 용장 데이터가 데이터 뱅크(110)에 지정될 수 있고, 또한 상기 부분에 대응하는 데이터를 저장하기 위해 사용된 디스크(252)의 물리적 영역의 제로화는 볼륨의 생성 전에, 또는 볼륨 생성 후이지만 상기 물리적 영역이 대응하는 볼륨 부분 또는 용장 데이터에 지정되기 전에 발생할 수 있다(이것에 대해서는 뒤에서 더 자세히 설명한다).
상기 위치들은 분산형 RAID 애플리케이션(210)의 실시예에 의해 사용될 수 있는 세그멘트의 개념과 관련하여 더 잘 설명될 수 있고, 상기 세그멘트는 2048 논리적 블록 어드레스(LBA)의 사이즈(또는 어떤 다른 사이즈) 및 디스크(252)의 섹터 사이즈에 대응하는 논리적 블록 어드레스의 사이즈로 될 수 있다. 그러므로, 각 데이터 뱅크(110)의 데이터 기억부(250)에 있는 디스크(252)들은 단계 310에서 동일 사이즈의 세그멘트(예를 들면, 1 MB)로 분할될 수 있다. 이 세그멘트들은 디스크 드라이브(252)의 하나 이상의 연속적인 데이터 블록에 대응한다. 그러므로, 사용자 또는 호스트(102)가 단계 320에서 분산형 RAID 애플리케이션(210)으로부터 볼륨의 생성을 요청하고 단계 330에서 그 볼륨과 함께 사용되는 RAID의 레벨을 특정한 때, 요청된 사이즈의 볼륨에 대응하는 세그멘트의 수, 및 볼륨과 함께 RAID의 소망하는 레벨을 구현하기 위해 필요한 세그멘트의 수가 단계 340에서 볼륨에 지정될 수 있다.
따라서, 볼륨은 다수의 세그멘트(논리 세그멘트라고도 함)를 포함하고, 각 세그멘트는 특수 데이터 뱅크(110)와 결합되어 데이터 뱅크(110)가 상기 볼륨 세그멘트를 관리하도록 지정될 수 있다. 이 세그멘트는, 예를 들면, 2048 논리 블록 어드레스(LBA)의 사이즈를 가질 수 있고, 상기 논리 블록 어드레스의 사이즈는 디스크(252)의 사이즈 섹터 사이즈에 대응한다(다른 구성 및 사이즈를 또한 사용할 수 있다). 대부분의 경우, 볼륨 세그멘트를 포함하는 물리적 기억 장치는 그 세그멘트를 관리하는 데이터 뱅크(110)의 데이터 기억부(250)에 저장될 것이다. 그러나, 다른 경우에, 상기 세그멘트에 대응하는 데이터는 다른 데이터 뱅크(110)의 데이터 기억부(205)에 저장될 수 있다(다시 말하면, 특수한 경우에, 상기 세그멘트를 관리하는 분산형 RAID 애플리케이션을 포함한 데이터 뱅크(110)는 상기 세그멘트에 대응하는 데이터를 저장하는 데이터 기억부(250)를 포함한 데이터 뱅크(110)와 별개의 것일 수 있다).
일 실시예에 있어서, 특수한 볼륨에 대응하는 데이터 뱅크(110)에 세그멘트를 할당하는 것은 분산형 RAID 시스템(100)에 대응하는 데이터 뱅크(110) 집합의 무작위 순열(random permutation)을 결정함으로써 달성될 수 있다. 따라서, 만일 6개의 데이터 뱅크가 있으면, 사이즈 6의 무작위 순열(무작위 순열은 각각의 데이터 뱅크를 구성한다)이 결정되어 세그멘트들이 무작위 순열의 순서에 따라 연속적으로 각 데이터 뱅크에 지정된다.
예를 들어서, 분산형 RAID 시스템에 4개의 데이터 뱅크(110)가 있다고 가정한다(4개의 데이터 뱅크는 데이터 뱅크 1, 데이터 뱅크 2 등으로 부른다). 데이터 뱅크 2, 데이터 뱅크 4, 데이터 뱅크 1 및 데이터 뱅크 3의 무작위 순열이 결정될 수 있다. 이 경우에 , 볼륨에 대응하는 제1 세그멘트는 데이터 뱅크 2에 있고, 제2 세그멘트는 데이터 뱅크 4에, 제3 세그멘트는 데이터 뱅크 1에, 제4 세그멘트는 데이터 뱅크 3에 및 제5 세그멘트는 다시 데이터 뱅크 4에 있을 수 있다. 이러한 방법으로, 만일 볼륨에 대응하는 무작위 순열을 알고 있으면, 볼륨에 대응하는 특수한 세그멘트의 위치를 수학적으로 결정할 수 있다.
위에서 언급한 바와 같이, 사용자는 소정 레벨의 RAID가 볼륨과 협력하여 구현되어야 한다는 것을 단계 330에서 특정할 수 있다. 이 경우에, 분산형 RAID 애플리케이션(210)은 볼륨과 관련한 RAID의 구현에 대응하는 임의의 데이터가 단계 350에서 적당한 위치에 저장되는 것을 보장하여, RAID 정보가 데이터 뱅크(110)에 걸쳐 적절히 분산되게 함으로써 RAID의 소망하는 레벨이 달성되는 것을 보장할 수 있다.
예를 들어서, 만일 볼륨과 협력하여 RAID 5의 구현이 요구되면, 분산형 RAID 애플리케이션(210)은 소망하는 RAID 패리티 그룹 사이즈를 결정할 수 있다(예를 들면, 사용자가 구성한 RAID 집합에 기초해서 또는 다른 방식으로 결정될 수 있다). 이 결정은 분산형 RAID 시스템 내의 데이터 뱅크(110)의 수에 기초하여 이루어질 수 있고, 일 실시예로서, 데이터 뱅크(110)의 수보다 작은 수일 수 있다(패리티 데이터를 고려해서 추가의 1을 더함).
설명을 위해서, 만일 5개의 데이터 뱅크(110)가 있고 매 4개의 세그멘트(데이터 세그멘트라고 부름)마다 볼륨과 관련한 데이터를 저장한다고 하면, 하나의 세그멘트가 패리티에 전용되고, 4개의 세그멘트에 대한 패리티가 계산되어 이 패리티 세그멘트에 저장된다. 패리티 세그멘트는 패리티 세그멘트의 패리티 데이터를 계산하였던 데이터 세그멘트를 데이터 기억부(250)가 포함하고 있지 않은 데이터 뱅크(110)에서 전용될 것이다.
이 점에서, 논리적 볼륨에 대응하는 각 세그멘트가 특수 데이터 뱅크(110)에 지정되었고, 그 볼륨에 대응하는 RAID 데이터를 저장하기 위해 사용되는 임의의 세그멘트(100)(여기에서는 볼륨과 함께 RAID의 임의 레벨의 구현과 관련된 임의 유형의 용장 데이터를 저장하기 위한 세그멘트의 사용에 대한 일반적인 응용성의 손실없이 상호 교환적으로 용장 세그멘트 또는 패리티 세그멘트라고 부름)가 또한 데이터 뱅크(110)에 지정되었다. 그러나, 데이터 뱅크의 데이터 기억부(250)의 디스크(250)의 물리적 섹터는 상기 세그멘트에 대응하는 데이터를 저장하도록 아직 지정되지 않았다. 따라서, 단계 360에서, 볼륨의 논리 세그멘트가 지정된 데이터 뱅크(110)의 디스크(252)의 물리적 세그멘트가 결정되고 논리 세그멘트에 지정된다. 이 세그멘트 맵핑은 각 데이터 뱅크(110)의 로컬 테이블(245)에 저장될 수 있다. 이러한 지정은, 위에서 언급한 바와 같이, 약간 더 늦은 지점에서, 예를 들면 명령이 논리 세그멘트에 대한 쓰기(write)를 최초로 시도할 때 발생할 수 있다.
이러한 지정을 행할 때, 일 실시예로서, 디스크(252)의 다른 영역의 성능 특성은 액세스된 논리 세그멘트와 관련하여 고려될 수 있다. 다시 말하면, 디스크(252)는 동일한 디스크의 다른 세그멘트보다 더 효율적으로 액세스되는 세그멘트를 가질 수 있다. 그러므로, 일 실시예로서, 논리 세그멘트와 관련된 기준에 따라서 디스크(252)의 물리적 세그멘트를 지정하는 것이 바람직하다. 특성들은 예를 들면 논리 세그멘트에 대응하는 볼륨과 관련된 서비스 지정 품질, 논리 세그멘트를 포함한 볼륨에 대한 액세스의 수 등을 포함할 수 있다.
그 다음에, 단계 370에서, 볼륨에 대응하는 정보가 저장되어 볼륨에 대응하는 세그멘트의 위치 또는 볼륨과 함께하는 RAID 구현에 대응하는 세그멘트가 상기 저장된 정보로부터 결정될 수 있다. 그러므로, 상기 저장된 정보(집합적으로 맵핑 데이터라고 부름)는 볼륨, 볼륨에 대응하는 무작위 순열(예를 들면, 세그멘트가 위치되는 데이터 뱅크(110)의 순서를 표시함) 및 임의의 RAID 구현의 패리티 그룹 사이즈(예를 들면, 볼륨이 4+1 RAID 세트에 대응하는지, 7+1 RAID 세트에 대응하는지, RAID 1이 구현되는지 등)에 관한 표식(identification)을 포함할 수 있다. 이 데이터는 예를 들면 글로벌 테이블(240)에 저장되고 다른 데이터 뱅크(110)의 다른 분산형 RAID 애플리케이션(210)과 통신함으로써 각 분산형 RAID 애플리케이션(210)과 관련된 테이블(240) 집합의 적어도 일부가 실질적으로 일정하게 그 위치에서 유지되게 보장한다.
전술한 내용은 5개의 데이터 뱅크(110)를 가진 분산형 RAID 시스템의 일 실시예를 도시한 도 4를 참조함으로써 더 잘 이해할 수 있을 것이다. 여기에서, 각 데이터 뱅크(110)의 각 데이터 기억부(250)는 동일한 사이즈의 세그멘트(402)의 집합으로서 배치되었고, 상기 동일 사이즈의 세그멘트는 설명의 목적상 사이즈가 1MB인 것으로 가정한다. 이제, 호스트(102)는 데이터 뱅크(110b)의 분산형 RAID 애플리케이션(210b)으로부터 RAID 레벨 5를 가진 8MB의 볼륨을 요청한 것으로 가정한다. 이 경우, 분산형 RAID 애플리케이션(210b)은 볼륨의 데이터부에 대하여 8개의 세그멘트(402)가 필요하고, 볼륨에 대한 소망하는 RAID 레벨의 구현과 관련하여 볼륨에 대한 용장 데이터를 저장하기 위해 2개의 세그멘트(402)가 필요하다고 결정할 수 있다. 그 다음에, 분산형 RAID 애플리케이션(210b)은 볼륨에 대한 무작위 순열을 결정한다. 이 예에서의 목적상, 무작위 순열은 데이터 뱅크(110b), 데이터 뱅크(110d), 데이터 뱅크(110a), 데이터 뱅크(110c) 및 데이터 뱅크(110e)인 것으로 가정한다. 따라서, 데이터 뱅크(110b)는 요청된 볼륨의 제1 세그멘트인 세그멘트(402a)가 지정되고, 데이터 뱅크(110d)는 요청된 볼륨의 제2 세그멘트인 세그멘트(402b)가 지정되고, 데이터 뱅크(110a)는 요청된 볼륨의 제3 세그멘트인 세그멘트(402c)가 지정되고, 데이터 뱅크(110c)는 요청된 볼륨의 제4 세그멘트인 세그멘트(402d)가 지정되며, 데이터 뱅크(110e)는 요청된 볼륨의 제5 세그멘트인 세그멘트(402e)가 지정될 수 있다. 그 다음에, 지정은 무작위 순서의 제1 데이터 뱅크(110)에서 다시 시작하여 데이터 뱅크(110b)는 요청된 볼륨의 제6 세그멘트인 세그멘트(402f)가 지정되고, 데이터 뱅크(110d)는 요청된 볼륨의 제7 세그멘트인 세그멘트(402g)가 지정되고, 데이터 뱅크(110a)는 요청된 볼륨의 제8 세그멘트인 세그멘트(402h)가 지정될 수 있다.
일단 볼륨과 관련된 데이터를 저장하기 위한 데이터 세그멘트(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) 중의 하나는 데이터 기억부(250)가 볼륨의 특정 세그멘트를 포함하는 데이터 뱅크(110)를 식별하기 위해 사용되는 데이터를 내포할 수 있다. 구체적으로, 이 테이블은 볼륨과 관련된 논리 어드레스를 그 논리 어드레스에 대응하는 세그멘트(데이터, 용장 등)가 저장되는 데이터 뱅크(110)와 상관시키기 위해 사용될 수 있다.
도 5는 이러한 유형의 테이블의 일 실시예를 그래픽적으로 표시한 것이고, 여기에서 각 볼륨은 관련 테이블의 관련 인스턴스를 가질 수 있다. 테이블(550)은 LV 번호(504), 세그멘트 사이즈(508), 세그멘트 카운트(512), 서비스 품질(QOS)(514), 레인지(range) 카운트(518), 및 이 실시예에서 제1 레인지(524a), 제2 레인지(524b) 및 임의의 추가적인 레인지 엔트리(524n)라고 표시된 레인지 엔트리의 정보를 포함한다.
LV 번호(504)는 특정 볼륨을 식별하기 위해 사용되는 유일한(unique) 번호이고, 세그멘트 사이즈(508)는 볼륨을 구현하기 위해 사용된 세그멘트의 사이즈에 대응하며, 세그멘트 카운트(512)는 논리적 볼륨에 대응하는 세그멘트의 수(예를 들면, 데이터 세그멘트와 용장 세그멘트 둘 다의 수, 데이터 세그멘트만의 수 등)에 대응하며, QOS(514)는 볼륨과 관련하여 구현되는 것이 바람직한 서비스의 품질을 표시하고(이 QOS 표시자는 데이터 뱅크(110)에 저장된 다른 볼륨에 대하여 그 볼륨에 주어지는 우선권(priority)을 표시할 수 있음에 주목한다), 레인지 카운트(518)는 볼륨과 관련된 레인지의 수를 표시하고, 레인지 엔트리(524)는 상기 레인지들 중의 하나에 각각 대응한다.
레인지는 특정의 데이터 뱅크(110) 순서 및 RAID 구현에 대응한다. 다양한 이유로 볼륨을 구현하기 위해 복수의 레인지가 사용될 수 있다. 구체적으로, 예를 들면, 복수의 레인지는 상이한 데이터 뱅크(110)의 상이한 데이터 기억부(250)가 사용이 가능한 데이터 기억부(250)의 상이한 기억 용량을 가질 수 있기 때문에 볼륨과 함께 사용될 수 있다. 이것은 예를 들면 제1 레인지의 볼륨에 대하여 모든 데이터 뱅크(110)가 제1 RAID 구현과 함께 사용되고, 제2 레인지의 볼륨에서 전부보다는 적은 수의 이용가능한 데이터 뱅크(110)가 제2 RAID 구현과 함께 사용될 수 있는 상황을 유도할 수 있다(여기에서, 제1 및 제2 RAID 구현은 사실상 서로 다른 레벨일 수 있다). 그러므로, 상기 레인지들은 각각 상이한 데이터 뱅크(110) 순서(예를 들면, 무작위 순열, 등)에 따라 배치되고 이용가능한 상이한 수의 데이터 뱅크(110), 다른 유형의 RAID 등을 가진 세그멘트에 대응할 수 있다.
구체적인 예를 이용해서 설명하기 위해, 다시 도 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를 할당하는 것일 수 있다. 또한, 단지 2개의 데이터 뱅크(110)만이 이용가능하기 때문에, 볼륨의 최초 8MB와 함께 사용될 때 RAID 5 대신에 1의 RAID 레벨을 사용하는 것만이 가능하다. 따라서, 이 경우에, 볼륨의 최초 8MB는 제1 레인지에 대응하고 테이블 내의 제1 레인지 엔트리가 제1 집합의 값을 가진 볼륨에 대응하게 하며, 볼륨의 다음 3MB는 제2 레인지에 대응하고 테이블 내의 제2 레인지 엔트리가 제2 집합의 값을 가진 볼륨에 대응하게 한다. 이 명세서를 읽은 후에는 명백한 바와 같이, 이런 유형의 발생은 소정의 빈도로 발생할 수 있다.
도 5로 되돌아가서, 이러한 유형의 상황을 다루기 위해, 다른 무엇보다도, 각 레인지의 볼륨은 그 특정 레인지 내 세그멘트의 위치가 그 레인지에 대응하는 레인지 엔트리로부터 결정될 수 있도록 테이블(550) 내에 엔트리를 가질 수 있다. 테이블(550)에 대응하는 볼륨의 레인지 각각에 대한 엔트리(524)는 레인지 카운트(518)와 결합된다. 일 실시예에 있어서, 레인지 카운트(518)는 레인지 엔트리(524)의 수가 레인지 카운트(518)에 대응하도록 볼륨의 레인지의 수에 대응할 수 있다. 단지 레인지 엔트리 524a와 524b만이 도시되어 있지만, 테이블 내 레인지 엔트리(524)의 수는 그 테이블이 대응하는 볼륨에 대응하는 레인지의 수에 따라 다르게 할 수 있다. 따라서, 만일 볼륨이 3개의 레인지로 분할되면, 테이블(550)에는 3개의 레인지 엔트리(524)가 있을 것이고, 레인지 엔트리(524)는 테이블(550)에 대응하는 볼륨의 각 레인지에 대한 정보를 포함한다.
레인지 엔트리(524)에 대한 정보는 레인지 엔트리(524)와 관련된 세그멘트들을 저장하기 위해 사용된 각 데이터 뱅크(110)에 대응하는 유형(526), 시작(530), 끝(534), 네트워크 RAID(538), 네트워크 RAID 사이즈(542), 디스크 RAID(546), 디스크 RAID 사이즈(542), 데이터 뱅크 카운트(554), 데이터 뱅크 순서(558), 디스크 카운트(562) 및 디스크 순서(566)를 포함한다(다시 말해서, 그 레인지 엔트리(524)의 데이터 뱅크 카운트(554)와 동일한 디스크 카운트(562) 및 디스크 순서(566)가 있을 것이다). 유형(526)은 레인지 엔트리(524)의 정보에 대응하는 레인지의 유형, 즉 예를 들면 레인지의 정상(normal), 소스(SRC), 목적지(DST) 또는 다른 유형을 묘사한다. 시작(230)은 레인지 엔트리(524)에 대응하는 볼륨의 레인지의 최초 논리 세그멘트 어드레스이다. 끝(234)은 레인지 엔트리(524)에 대응하는 볼륨의 레인지에 대한 정보에 대응하는 레인지의 최종 논리 세그멘트 어드레스이다. 다른 배열이 또한 가능하다. 예를 들면, 끝(524)은 레인지 내의 세그멘트 또는 블록의 최대수인 카운트일 수 있다.
데이터 뱅크 카운트(562)는 레인지 엔트리에 대응하는 레인지가 존재하는 데이터 뱅크(110)의 수에 대응할 수 있고, 데이터 뱅크 순서(558)는 그 레인지 내의 세그멘트들이 데이터 뱅크(110)에 지정된 순서일 수 있으며, 네트워크 RAID(538), 네트워크 RAID 사이즈(542), 디스크 RAID(546) 및 디스크 RAID 사이즈(552)는 레인지 엔트리(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 사이즈(552) 중의 어느 하나 또는 둘 다는 사용되지 않을 수 있고 또는 생략하여도 좋다.
데이터 뱅크 카운트(554)는 레인지 내 데이터 뱅크의 수이고, 데이터 뱅크 순서(558)는 레인지 내 데이터 뱅크(110)에 결쳐 RAID가 구현되는(예를 들면, 스트립되는) 순서이다. 예를 들면, 데이터 뱅크(110)는 특정 순서로 저장된 볼륨의 논리 어드레스에 대응하는 데이터를 가질 수 있고, 데이터뱅크 순서(558)는 이 순서에 대응한다. 디스크 카운트(562)는 레인지의 데이터 뱅크(110) 내에 있는 디스크의 수이고, 디스크 순서(566)는 특정 데이터 뱅크(110)의 디스크에 걸쳐 RAID가 구현되는 순서이다. 예를 들면, 디스크(252)는 특정 순서로 그들에게 저장된 세그멘트를 가질 수 있고, 디스크 순서(566)는 세그멘트가 데이터 뱅크(110) 내 디스크(252)에 걸쳐 저장되는 순서이다. 따라서, 레인지 엔트리(524)와 관련된 레인지의 세그멘트들을 저장하기 위해 사용된 각 데이터 뱅크(110)에 대하여, 대응하는 디스크 카운트(562) 및 디스크 순서(566)가 있을 것이다(다시 말하면, 디스크 카운트(562) 및 디스크 순서(566)의 수는, 일 실시예에서, 그 레인지 엔트리(524)의 데이터 뱅크 카운트(554)와 동일할 것이다). 실시예에 있어서, 데이터 뱅크(110) 내 디스크(252)에 걸친 RAID는 선택적인 것으로서 사용하지 않아도 좋다. 비록 테이블(550)을 특이성있게 설명하였지만, 이 설명은 단지 예일 뿐이고 제한되지 않으며, 다른 형태의 테이블(550)을 사용할 수 있다. 예를 들면, 테이블(550) 대신에 가상 테이블을 사용할 수 있고, 이 가상 테이블은 각 논리 어드레스에 대응하는 세그멘트(402) 및 데이터 뱅크(110)를 명확하게 리스트할 수 있다.
따라서, 전술한 바와 같이, 테이블(550) 내의 정보는 논리 어드레스에 대응하는 데이터 세그멘트(402)를 포함하는 데이터 뱅크(110)를 식별하기 위해 사용될 수 있다(명령 또는 임의의 다른 콘텍스트에서 호스트(102)에 의해 참조된다). 예를 들면, 세그멘트(402)의 사이즈를 알고 있고 시작(530), 끝(534), 어드레스에 대응하는 레인지 엔트리(524) 등을 사용하면 볼륨의 논리 어드레스에 대응하는 특정 데이터 뱅크(110)를 결정할 수 있다.
비록 테이블(240)의 하나 이상의 부분이 모든 데이터 뱅크(110)에 걸쳐서 실질적으로 동일할 수 있고, 전술한 바와 같이 하나 이상의 데이터 뱅크(110)에 걸친하나 이상의 논리적 볼륨을 묘사하고 있지만, 데이터 뱅크(110)의 다른 테이블(245)들은 그것이 대응하는 데이터 뱅크(110)에 대해 별개의 것일 수 있다((예를 들면, 테이블(245)은 대응하는 분산형 RAID 애플리케이션(210)이 실행하는 데이터 뱅크(110)에 대해 유일할 수 있다). 이 테이블(245)은 대응하는 데이터 뱅크(110)의 데이터 기억부(250)에 내포된 각 디스크(252)에 속하는 데이터를 포함하고, 데이터 기억부의 디스크(252)에서 또는 디스크(252) 중에서 정보가 어디에 저장되는지에 관한 정보, 예를 들면, 데이터 뱅크(110)에 지정된 세그멘트가 데이터 기억부(250)에서 위치되는 디스크(252)의 섹터에 관한 정보를 포함할 수 있다.
도 6에는 이러한 테이블 유형의 일 실시에의 그래픽적 표시가 도시되어 있다. 테이블(660)은 특정 데이터 뱅크(110)에 저장될 수 있고 복수의 디스크 테이블(670)을 포함하며, 각 디스크 테이블(670)은 그 데이터 뱅크(110) 내에서 데이터 기억부(250)의 디스크(252)에 대응하고 그 디스크(252) 내에 저장된 세그멘트의 위치를 리스트한다. 더 구체적으로, 대부분의 경우, 디스크(252)는 물리적 섹터로 분할 되고, 각 물리적 섹터는 대응하는 어드레스 또는 어드레스의 레인지를 갖는다.
디스크 테이블(670)은 볼륨의 세그멘트가 저장되는 데이터 뱅크(110)의 디스크(252)의 섹터 위치를 결정하기 위해 사용할 수 있는 맵핑 테이블일 수 있다. 따라서, 테이블(670)을 이용해서, 볼륨의 세그멘트에 대응하는 디스크(252)상의 섹터의 어드레스를 결정할 수 있다. 또한, 테이블은 디스크의 세그멘트 또는 섹터에 대응하는 엔트리마다 섹터 또는 그 섹터에 저장된 세그멘트를 설명하는 하나 이상의 플래그 또는 설명 비트를 내포할 수 있다.
이제, 도 7을 참조하면, 디스크 테이블(670)의 일 실시예의 그래픽적 표시가 도시되어 있다. 디스크 테이블(670)은 복수의 엔트리를 구비하고, 각 엔트리는 대응하는 디스크의 물리 세그멘트에 대응하며 디스크 테이블(670)의 엔트리는 디스크(252)의 물리 세그멘트를 설명한다. 디스크 테이블(670)의 각 엔트리는 물리 세그멘트 또는 대응 섹터에 저장된 볼륨이 세그멘트를 설명하는 하나 이상의 플래그 또는 비트 필드를 또한 포함할 수 있다. 특히, 도 7에 도시된 바와 같이, 일 실시예에 있어서, 디스크 테이블(670)의 엔트리는 논리 볼륨(logical volume; LV) 번호, 논리 세그멘트 번호, 어드레스 공간 및 섹터 상태에 관한 필드들을 포함하고 있다. LV 번호는 그 물리 세그멘트에 저장된 데이터가 대응하는 논리 볼륨을 식별한다. 논리 세그멘트 번호는 그 데이터에 대응하는 논리 볼륨의 세그멘트를 식별한다. 어드레스 공간은 '데이터' 또는 '용장'으로서 저장된 세그멘트를 식별한다. '데이터'의 값은 데이터가 엔트리에 의해 표시된 섹터에 저장된 것을 표시하고, '용장'의 값은 섹터에 저장된 정보가 RAID 데이터 보호를 위해 사용될 수 있고, RAID 레벨에 따라서, 용장 데이터, 미러 데이터 또는 패리티 정보일 수 있음을 표시한다. 섹터 상태는 세그멘트의 상태를 '할당(allocated)', '제로화(zeroed)' 또는 '더티(dirty)'로 표시한다. '할당'은 세그멘트가 할당되었고 유효 데이터를 포함하고 있음을 표시한다. '제로화'는 세그멘트에 0(제로)을 기입함으로써 세그멘트가 소거되었음을 표시하고, '더티'는 예를 들면 세그멘트가 소거되거나 할당되지 않았기 때문에 세그멘트가 사용불능 또는 바람직하지 않은 값인 가비지를 포함할 수 있고 무작위 비트 또는 데이터를 저장할 수 있음을 표시한다. 일 실시예에 있어서, 예를 들면, 새로운 디스크에 대하여, 디스크의 모든 세그멘트는 새로운 디스크 또는 새로 추가된 디스크에 대응하는 디스크 테이블에 더티로서 표시될 수 있다.
테이블에 대한 상기 설명을 읽음으로써, 분산형 RAID 애플리케이션(210)은 글로벌 테이블(240)을 이용하여 어떤 세그멘트가 볼륨의 논리 어드레스에 대응하는지, 볼륨에 대응하는 세그멘트(데이터 세그멘트 또는 용장 세그멘트)가 어떤 데이터 뱅크(110)에 위치되는지, 볼륨의 어떤 세그멘트가 볼륨의 논리 어드레스에 대응하는지, 볼륨의 세그멘트와 관련된 RAID 데이터(패리티 데이터, 미러 데이터 등)가 어디에 위치되는지, 특정 데이터 뱅크(110)의 어떤 디스크가 세그멘트, 또는 상기 특정 데이터 뱅크(110)에 대응하는 볼륨, 세그멘트 또는 디스크(252)에 관한 기타 정보, 또는 볼륨, 세그멘트(402), 데이터 뱅크(110), RAID 데이터 등에 관한 기타 정보를 포함하는지 결정할 수 있다는 것을 알 것이다.
유사하게, 각 개별 데이터 뱅크(110)의 분산형 RAID 애플리케이션(210)은 그 데이터 뱅크(110)의 로컬 테이블(245)를 이용하여 상기 데이터 뱅크(110)의 어디에(디스크(252)의 어떤 섹터 등) 특정 세그멘트가 위치되는지 또는 상기 특정 데이터 뱅크(110)에 대응하는 볼륨, 세그멘트 또는 디스크(252)에 관한 기타 정보가 위치되는지를 결정할 수 있다.
데이터 뱅크(110)들 사이에 공유된 글로벌 테이블(240)과 각 개별 데이터 뱅크(110)에 대응하는 로컬 테이블(245)의 조합을 이용해서, 특정의 동작이 데이터 뱅크(110)에서 서로 협력하여 분산형 RAID 애플리케이션(210)에 의해 수행될 수 있다. 이러한 유형의 동작에 대하여 이제 구체적으로 설명한다. 구체적으로, RAID 레벨 5가 볼륨과 함께 구현되는 볼륨에서 읽기(READ) 명령과 쓰기(WRITE) 명령을 구현하는 일 실시예를 이제 더 상세하게 설명하고, 그 다음에 상기 명령들을 구현하는 구체적인 예를 예시적인 분산형 RAID 시스템과 관련하여 설명한다. 이 명세서를 완전히 검토한 후에는 다른 유형의 실시예, 명령, RAID 레벨 등이 어떻게 구현되는지를 알게 될 것이다.
먼저 도 8을 참조하면, 분산형 RAID 시스템에서 읽기 명령을 구현하는 방법의 일 실시예에 관한 흐름도가 도시되어 있다. 이 읽기 명령은 호스트(102)에 의해서 스위치(120)를 통해 데이터 뱅크(110)로 또는 하나의 데이터 뱅크(110)로부터 다른 데이터 뱅크(110)로 전송될 수 있다. 특정 실시예에 있어서, 호스트(102)는 하나 이상의 애플리케이션 및 관련 라우팅 정보를 포함하여 읽기 명령이 명령을 발행하는 호스트(102)로부터 적당한 데이터 뱅크(110)로, 상기 명령 발행 호스트(102)와 상기 적당한 데이터 뱅크(110) 사이에 있는 경로를 따라 라우트될 수 있다. 그러나, 다른 경우에, 상기 애플리케이션 또는 라우팅 정보가 호스트(102)에 제공되지 않을 수 있고, 따라서 호스트(102)로부터 발행된 읽기 명령이 임의의 데이터 뱅크(110)로 라우트될 수 있다. 이 실시예에서 설명하는 것은 후자의 경우이지만, 이 실시예의 설명을 읽은 후에는 어떤 단계들이 전자의 경우에도 또한 적용할 수 있는지 당업자라면 알게 될 것이다.
단계 810에서는 데이터 뱅크(110)에서 읽기 명령을 수신한다. 단계 820에서는 데이터 뱅크(110)의 분산형 RAID 애플리케이션(210)이 수신된 읽기 명령에서 참조된 논리 어드레스에 대응하는 볼륨의 세그멘트를 결정하고, 단계 830에서는 볼륨의 세그멘트가 어떤 데이터 뱅크(110)에 저장되었는지를 결정한다. 전술한 바와 같이, 이 정보는 분산형 RAID 애플리케이션(210)과 관련된 글로벌 테이블(240)을 이용하여 결정될 수 있다. 만일 세그멘트를 저장하고 있는 데이터 뱅크(110)가 읽기 명령을 수신한 데이터 뱅크(110)와 동일하면(단계 832에서 결정함), 피요청 데이터가 수신 데이터 뱅크(110)의 데이터 기억부(250)의 적당한 디스크(252)로부터 획득될 수 있고(단계 840) 단계 850에서 읽기 명령이 응답된다. 전술한 바와 같이, 세그멘트가 저장된 데이터 뱅크(110)의 데이터 기억부(250)의 특정 디스크(252)는 글로벌 테이블(240))을 이용하여 결정될 수 있고, 세그멘트에 대응하는 데이터가 저장된 디스크(252) 상의 위치는 글로벌 테이블(245)을 이용하여 결정될 수 있으며, 글로벌 테이블(245)은 디스크(252) 상의 물리적 위치에 볼륨의 세그멘트를 맵하기 위해 사용될 수 있다. 만일 수신 데이터 뱅크(110)가 호스트(102)로부터 읽기 명령을 수신하였으면, 호스트(102)는 응답될 수 있고, 만일 수신 데이터 뱅크(110)가 다른 데이터 뱅크(110)로부터 읽기 명령을 수신하였으면 응답이 읽기 명령을 발행한 데이터 뱅크(110)의 분산형 RAID 애플리케이션(210)에 전송될 수 있다.
그러나, 만일 세그멘트가 원격 데이터 뱅크(110)(명령을 수신한 데이터 뱅크가 아닌 다른 데이터 뱅크(110))에 저장되어 있으면, 단계 860에서, 읽기 명령이 원격 데이터 뱅크(110)의 분산형 RAID 애플리케이션(210)에 전송될 수 있다. 일 실시예에 있어서, 이 읽기 명령은 분산형 RAID 애플리케이션(210)에 의해 사용된 명령 포맷을 이용하여 원격 데이터 뱅크(110)의 분산형 RAID 애플리케이션(210)에 전달될 수 있다. 이 명령은 최초 읽기 명령에 대한 영속적인 정보를 제공하면서 읽기 명령의 결과를 그 읽기 명령을 최초로 수신한 데이터 뱅크(110)에 되돌려 보내도록, 또는 다른 기능을 수행하도록 분산형 RAID 애플리케이션을 또한 지시한다. 따라서, 읽기 명령이 원격 데이터 뱅크(110)에 전송된 후에, 단계 870에서, 피요청 데이터를 포함한 응답이 원격 데이터 뱅크(110)로부터 수신될 수 있고, 단계 880에서, 수신된 읽기 명령이 그 응답으로 수신된 데이터를 이용하여 응답된다.
이제, 도 9A 및 도 9B를 참조하면, 분산형 RAID 애플리케이션에서 쓰기 명령을 구현하는 방법의 일 실시예의 흐름도가 도시되어 있다. 이 쓰기 명령은 호스트(102)에 의해서 스위치(120)를 통해 데이터 뱅크(110)로 또는 하나의 데이터 뱅크(110)로부터 다른 데이터 뱅크(110)로 전송될 수 있다. 특정 실시예에 있어서, 호스트(102)는 하나 이상의 애플리케이션 및 관련 라우팅 정보를 포함하여 쓰기 명령이 명령을 발행하는 호스트(102)로부터 적당한 데이터 뱅크(110)로, 상기 명령 발행 호스트(102)와 상기 적당한 데이터 뱅크(110) 사이에 있는 경로를 따라 라우트될 수 있다. 그러나, 다른 경우에, 상기 애플리케이션 또는 라우팅 정보가 호스트(102)에 제공되지 않을 수 있고, 따라서 호스트(102)로부터 발행된 쓰기 명령이 임의의 데이터 뱅크(110)로 라우트될 수 있다. 이 실시예에서 설명하는 것은 후자의 경우이지만, 이 실시예의 설명을 읽은 후에는 어떤 단계들이 전자의 경우에도 또한 적용할 수 있는지 당업자라면 알게 될 것이다.
단계 910에서는 수신 데이터 뱅크(110)에서 쓰기 명령을 수신한다. 단계 920, 930 및 940에서는 수신 데이터 뱅크(110)의 분산형 RAID 애플리케이션(210)이 쓰기 명령에 의해 참조된 논리 어드레스에 대응하는 볼륨의 세그멘트, 그 세그멘트의 위치(예를 들면, 어떤 데이터 뱅크(110)가 그 세그멘트에 대응하는 데이터를 저장하고 있는지) 및 그 세그멘트에 대응하는 패리티의 위치(예를 들면, 어떤 데이터 뱅크(110)가 그 세그멘트에 대응하는 데이터로부터 생성된 패리티 데이터가 저장되어 있는 세그멘트를 저장하고 있는지)를 결정한다. 전술한 바와 같이, 데이터 세그멘트와 패리티 세그멘트 둘 다의 위치는 수신 데이터 뱅크(110)에 저장된 글로벌 테이블(240)을 이용하여 결정될 수 있다.
만일 데이터 세그멘트(데이터를 저장하고 있는 세그멘트)도 용장 세그멘트(다시 말하면, 데이터 세그멘트로부터 생성된 패리티 또는 다른 유형의 용장 데이터를 저장하고 있는 세그멘트)도 수신 데이터 뱅크(110)에 저장되어 있지 않으면(단계 950 및 960에서 결정됨), 쓰기 명령은, 단계 964에서, 데이터 세그멘트가 저장되어 있는 원격 데이터 뱅크(110)의 분산형 RAID 애플리케이션(210)에 전달될 수 있고, 단계 966에서, 패리티 세그멘트가 저장되어 있는 원격 패리티 데이터 뱅크(110)의 분산형 RAID 애플리케이션(210)에 전달될 수 있다. 일 실시예에 있어서, 이 쓰기 명령은 분산형 RAID 애플리케이션(210)에 의해 사용된 명령 포맷을 이용하여 원격 데이터 뱅크(110) 및 원격 패리티 데이터 뱅크(110)의 분산형 RAID 애플리케이션(210)에 전달될 수 있다. 이 명령은 최초 쓰기 명령에 대한 영속적인 정보를 제공하면서, 다른 소망하는 기능을 수행하도록 분산형 RAID 애플리케이션을 또한 지시할 수 있다.
따라서, 쓰기 명령이 원격 데이터 뱅크(110) 및 원격 패리티 데이터 뱅크에 전송된 후에, 단계 968 및 970에서, 완료 통지가 원격 데이터 뱅크(110) 및 원격 패리티 데이터 뱅크(110)의 분산형 RAID 애플리케이션(210)으로부터 수신될 수 있다. 이 통지가 수신되면, 쓰기 명령은 수신 데이터 뱅크(110)의 분산형 RAID 애플리케이션(210)에 의해 응답될 수 있다.
단계 950으로 되돌아가서, 만일 데이터 세그멘트가 수신 데이터 뱅크(110)에 저장되어 있으면, 단계 952에서, 쓰기 명령이 호스트(102)로부터 수신되었는지 다른 데이터 뱅크(110)로부터 수신되었는지를 결정할 수 있다. 만일 쓰기 명령이 호스트(102)로부터 수신되었으면, 쓰기 명령은 단계 976에서 원격 패리티 데이터 뱅크(110)의 분산형 RAID 애플리케이션(210)에 전달되고, 단계 974에서 수신 데이터 뱅크(110)의 기록 캐시에 배치될 수 있다. 단계 978에서 원격 패리티 데이터 뱅크(110)의 분산형 RAID 애플리케이션(210)으로부터 완료 통지를 수신한 후에, 쓰기 명령은, 단계 980에서, 수신 데이터 뱅크(110)의 분산형 RAID 애플리케이션(210)에 의해 응답될 수 있다(예를 들면, 응답이 호스트(102)에 전송된다). 또한, 쓰기 명령 자체가 단계 982에서 처리된다. 이 처리는 쓰기 명령과 관련된 데이터를 수신 데이터 뱅크(110)에 저장된 데이터 세그멘트에 저장하는 처리 또는 다른 기능을 수반할 수 있다.
반면에, 단계 952에서 만일 쓰기 명령이 호스트로부터 수신되지 않았으면, 이것은 쓰기 명령이 다른 데이터 뱅크(110)(많은 경우에, 이것은 호스트(102)로부터 쓰기 명령을 최초로 수신한 데이터 뱅크(110)이다)로부터 수신되었다는 표시일 수 있다. 이 경우, 데이터 뱅크(110)는 단계 984에서 상기 수신된 쓰기 명령을 그 기록 캐시에 배치하고, 단계 986에서 완료 통지를 명령 발행 데이터 뱅크(110)에 전송한다. 그 다음에, 어떤 늦은 지점에서, 쓰기 명령 자체가 단계 988에서 처리될 수 있다.
다시 단계 950으로 되돌아가서, 만일 데이터 세그멘트가 수신 데이터 뱅크(110)에 저장되어 있지 않지만 단계 960에서 패리티 세그멘트가 수신 데이터 뱅크(110)에 저장되어 있는 것으로 결정되면, 단계 962에서 쓰기 명령이 호스트(102)로부터 수신되었는지 다른 데이터 뱅크(110)로부터 수신되었는지가 결정된다. 만일 쓰기 명령이 호스트(102)로부터 수신되었으면, 쓰기 명령은 쓰기 명령에 대응하는 데이터 세그멘트가 저장된 원격 데이터 뱅크(110)의 분산형 RAID 애플리케이션(210)에 전송되고(단계 1002), 수신 데이터 뱅크(110)의 기록 캐시에 배치된다(단계 1000). 단계 1004에서 원격 데이터 뱅크(110)의 분산형 RAID 애플리케이션(210)으로부터 완료 통지를 수신한 후에, 쓰기 명령은 단계 1006에서 수신 데이터 뱅크(110)의 분산형 RAID 애플리케이션(210)에 의해 응답될 수 있고, 단계 1008에서 쓰기 명령이 수신 데이터 뱅크(110)에 의해 처리된다.
여기에서, 쓰기 명령의 처리는 수신 데이터 뱅크(110)에 저장된 패리티 세그멘트가 쓰기 명령에 기초해서 갱신되는 것을 수반할 수 있다. 이러한 패리티 세그멘트의 갱신은 여기에서 모두를 열거하지는 않지만 당업자라면 잘 알고 있는 다양한 방법으로 달성될 수 있다. 예를 들면, 패리티 데이터 뱅크(110)의 분산형 RAID 애플리케이션(210)은 패리티 세그멘트를 갱신하기 위해 기록 취소(backed out write)를 수행할 수 있다. 이러한 기록 취소의 수행은 패리티 세그멘트로부터 데이터 세그멘트를 획득하는 것 및 획득된 데이터 세그멘트 및 쓰기 명령과 관련하여 기록되는 데이터를 이용하여 논리 연산(배타적 오어(XOR) 연산 등)을 수행하는 것을 수반할 수 있다. 대안적으로, 만일 수신 데이터 뱅크(110)의 분산형 RAID 애플리케이션(210)이 패리티 세그멘트가 생성된 각 데이터 세그멘트에 대응하는 복수의 쓰기 명령을 갖고 있으면, 새로운 패리티 세그멘트가 계산되고 최초의 패리티 세그멘트가 새로 계산된 패리티 세그멘트와 교체됨으로써 갱신될 수 있다. 패리티 세그멘트를 갱신하는 다른 방법은 여기에서의 설명을 읽음으로써 실현될 수 있고, 분산형 RAID 애플리케이션에 의해 패리티 세그멘트를 갱신하기 위해 사용되는 특수한 방법은 구성 파라미터, 특정 데이터(예를 들면, 패리티를 생성하기 위해 사용하는 모든 데이터 세그멘트에 대응하는 쓰기 명령 등)의 이용가능성을 포함한 다양한 인자들 또는 다수의 다른 인자들 중 임의의 것에 의존할 수 있다.
이제 단계 962로 되돌아가서, 만일 쓰기 명령이 호스트로부터 수신되지 않았으면, 이것은 쓰기 명령이 다른 데이터 뱅크(110)(많은 경우에, 이것은 호스트(102)로부터 쓰기 명령을 최초로 수신한 데이터 뱅크(110)이다)로부터 수신되었다는 표시일 수 있다. 이 경우, 쓰기 명령은 단계 990에서 수신 데이터 뱅크(110)의 기록 캐시에 배치되고, 단계 992에서 완료 통지를 명령 발행 데이터 뱅크에 전송한다. 그 다음에, 쓰기 명령은 단계 994에서 처리될 수 있다(예를 들면, 패리티 세그멘트가 위에서 설명한 것처럼 갱신될 수 있다).
전술한 내용을 검토함으로써, 많은 경우에, 특정 데이터 뱅크(110)의 분산형 RAID 애플리케이션(210)은 수신된 쓰기 명령을 패리티 데이터 뱅크(110)로부터 통지가 수신될 때까지 처리할 수 없다는 것, 및 패리티 데이터 뱅크가 하나 이상의 쓰기 명령을 저장하거나 저장된 쓰기 명령의 집합을 평가하고자 할 때 패리티 또는 다수의 다른 인스턴스들 중 임의의 것을 갱신하는 방법을 결정 또는 구현하기 위해 복수의 수신된 쓰기 명령을 평가할 필요가 있다는 것을 알 것이다. 쓰기(또는 다른) 명령의 저장 및 평가를 용이하게 하기 위해, 각 분산형 RAID 애플리케이션(210)은 관련된 기록 캐시(260)를 가질 수 있다.
기록 캐시의 일 실시예의 표시는 도 10에 도시되어 있다. 쓰기 명령이 분산형 RAID 애플리케이션(210)에 의해 수신된 때, 쓰기 명령은 기록 캐시(1100)에 배치된다. 이들 쓰기 명령(1160)은 각각 쓰기 명령(1160)이 수신된 때를 표시하는 관련 타임스탬프를 가질 수 있다. 따라서, 일 실시예에 있어서, 기록 캐시(1100)는 타임스탬프된 쓰기 명령(1160)의 큐(queue)를 포함할 수 있다. 어떤 지점에서, 분산형 RAID 애플리케이션(210)에 의해 타임스탬프 마커가 발행될 수 있다. 이 타임스탬프 마커는 시간을 포함하고 각각의 분산형 RAID 애플리케이션(210)과 통신할 수 있다. 언제 타임스탬프 마커를 발생할 것인지는 기록 캐시가 특정 백분율로 충만되었을 때 또는 특정 수의 쓰기 명령(1160)이 수신되었을 때와 같은 다양한 방법으로, 또는 특정 시간 간격으로, 또는 다양한 다른 방법으로 결정될 수 있다.
어쨋든, 이 타임스탬프 마커(1110)는 각 분산형 RAID 애플리케이션(210)과 관련된 각 기록 캐시(1110)를 적어도 2개의 세그멘트, 즉 타임스탬프 마커(1110) 이전에 수신한 쓰기 명령(1160)(이 예에서는 쓰기 명령 1160a, 1160b, 1160c 및 1160d)을 포함한 폐쇄 마커(1150)와 타임스탬프 마커(1110) 이후에 수신한 쓰기 명령(1160)(이 예에서는 쓰기 명령 1160e, 1160f 및 1160g)을 포함한 개방 마커(1140)로 분할한다. 그 다음에, 분산형 RAID 애플리케이션(210)은 폐쇄 마커(1150) 내의 쓰기 명령(1160)의 집합(이 예에서는 쓰기 명령 1160a, 1160b, 1160c 및 1160d)을 평가하여 상기 쓰기 명령(1160)들을 어떻게 처리할 것인지를 결정할 수 있고, 그 동안에 수신된 쓰기 명령은 여전히 개방 마커(1140)에 추가될 수 있다.
반대로, 폐쇄 마커(1150)가 더 이상 변경되지 않는 쓰기 명령의 집합을 포함하고 있을 때, 분산형 RAID 애플리케이션은 상기 쓰기 명령(1160)의 집합을 서로에 대하여(또는 다른 기준으로) 평가하여, 실행 순서(및 그에 따라 폐쇄 마커(1160) 내의 쓰기 명령(1160)들을 재정렬함), 패리티 세그멘트를 갱신하는 방법(예를 들면 패리티를 생성하기 위해 사용한 각 데이터 세그멘트에 대응하는 쓰기 명령이 폐쇄 마커(1150)에 있는지)을 결정하거나, 또는 쓰기 명령(1160)의 처리와 관련된 다른 결정을 행할 수 있다. 타임스탬프 마커(1110)가 각 데이터 뱅크(110)의 임의의 분산형 RAID 애플리케이션(210)에 의해 여러 가지 이유로 발행될 수 있기 때문에, 복수의 폐쇄 마커는 임의의 한 지점에서, 예를 들면, 기록 캐시가 임의의 하나의 분산형 RAID 애플리케이션(210)에 의해 평가된 시간 사이에서 복수의 타임스탬프 마커(1110)가 분산형 RAID 애플리케이션(210)에 의해 발행된 때, 존재할 수 있다는 것을 알 수 있다.
전술한 내용을 검토하면, 데이터 뱅크(110)의 분산형 RAID 애플리케이션(210)이 가상화 기억 및 RAID 구현을 달성하기 위해 어떻게 세로로 동작하는지를 이해할 수 있을 것이다. 그러나, 장애 발생 후에 분산형 RAID 애플리케이션(210)의 특정 실시예의 기능을 설명하는 것이 특정 실시예를 이해하는데 도움이 될 수 있다. 전술한 바와 같이, 분산형 RAID 애플리케이션(210)은 장애가 있는 데이터 뱅크를 알고(예를 들면, 저장하고) 있을 수 있다(다시 말해서, 데이터 뱅크는 데이터 뱅크(110)가 동작하거나 데이터에 액세스하는 능력을 방해하거나 훼방하는 하드웨어 장애, 소프트웨어 장애, 통신 장애 또는 기타의 장애를 가질 수 있다). 분산형 RAID 애플리케이션(210)은 호스트(102)로부터의 명령들을 만족시키면서 그러한 장애에 대하여 책임을 질 수 있다.
도 11은 분산형 RAID 시스템에서 읽기 명령을 구현하는 방법의 일 실시예의 흐름도를 보인 것이다. 이 방법은 RAID 5가 볼륨의 레인지와 함께 구현되는 실시예에 적용할 수 있고, 다른 레벨의(또는 레벨 없는) RAID가 구현된 경우에는 다른 실시예가 동일하게 잘 적용될 수 있다는 것을 이해할 것이다. 읽기 명령은 호스트(102)에 의해 스위치(120)를 통해 데이터 뱅크(110)로, 또는 다른 데이터 뱅크(110)로부터 수신 데이터 뱅크(110)로 전송될 수 있다. 단계 1210에서, 읽기 명령이 데이터 뱅크(110)에 수신된다. 데이터 뱅크(110)의 분산형 RAID 애플리케이션(210)은, 단계 1220에서, 수신된 읽기 명령에서 참조된 논리 어드레스에 대응하는 데이터 세그멘트를 결정하고, 단계 1230에서 데이터 세그멘트가 어떤 데이터 뱅크(110)에 저장되었는지를 결정한다. 만일 데이터 세그멘트를 저장하는 데이터 뱅크(110)가 읽기 명령을 수신한 데이터 뱅크(110)와 동일하면(단계 1240에서 결정함), 단계 1250에서, 요청된 데이터가 수신 데이터 뱅크(110)의 데이터 기억부(250)의 적당한 디스크(252)로부터 획득될 수 있고, 수신된 읽기 명령은, 단계 1252에서, 획득된 데이터를 이용하여 응답된다. 만일 수신 데이터 뱅크(110)가 호스트(102)로부터 읽기 명령을 수신하였으면 호스트(102)가 응답될 수 있고, 만일 수신 데이터 뱅크(110)가 다른 데이터 뱅크(110)로부터 읽기 명령을 수신하였으면, 응답이 읽기 명령을 발행한 데이터 뱅크(110)의 분산형 RAID 애플리케이션(210)에 전송될 수 있다.
그러나, 만일 단계 1254에서 데이터 세그멘트가 원격 데이터 뱅크(110)(명령을 수신한 데이터 뱅크가 아닌 다른 데이터 뱅크(110))에 저장되었다고 판정되면, 판독할 데이터 세그멘트가 저장된 원격 데이터 뱅크(110)가 장애를 받았는지 결정할 수 있다. 만일 장애를 받지 않았으면, 읽기 명령은 원격 데이터 뱅크(110)에 있는 분산형 RAID 애플리케이션에 전송된다. 단계 1258에서, 피요청 데이터를 포함한 응답이 원격 데이터 뱅크(110)로부터 수신된 후에, 단계 1260에서, 수신된 읽기 명령이 그 데이터를 이용하여 응답될 수 있다.
그러나, 만일 원격 데이터 뱅크(110)가 장애를 받았으면, 단계 1254에서, 수신 데이터 뱅크(110)가 읽기 명령과 관련된 데이터 세그멘트에 대응하는 패리티 세그멘트를 저장하고 있는지가 결정된다. 만일 패리티 세그멘트가 수신 데이터 뱅크(110)에 저장되어 있으면, 읽기 명령에 대응하는 데이터 세그멘트가 수신 데이터 뱅크(110)에 저장된 패리티 세그멘트를 이용하여 획득될 수 있다.
패리티 데이터로부터 데이터 세그멘트를 획득하는 것은 다른 데이터 뱅크(110)로부터 다른 데이터 세그멘트(읽기 명령에 대응하는 것이 아닌 다른 데이터 세그멘트)를 획득하는 것 및 다른 데이터 세그멘트와 패리티 세그멘트 사이에 논리 연산을 수행함으로써 희망하는 데이터 세그멘트를 획득하는 것 등을 비롯해서, 여기에서 구체적으로 상술하지 않은 다양한 방법으로 달성될 수 있다. 단계 1268에서 일단 피요청 데이터 세그멘트가 패리티 데이터를 이용하여 획득되었으면, 단계 1270에서, 수신된 읽기 명령이 응답될 수 있다. 만일, 수신 데이터 뱅크(110)가 호스트(102)로부터 읽기 명령을 수신하였으면, 호스트(102)가 응답될 수 있고, 만일 수신 데이터 뱅크(110)가 다른 데이터 뱅크(110)로부터 읽기 명령을 수신하였으면 응답이 읽기 명령을 발행한 데이터 뱅크(110)의 분산형 RAID 애플리케이션(210)에 전송될 수 있다.
만일 수신 데이터 뱅크(110)가 패리티 블록을 저장하는 데이터 뱅크(110)가 아니면, 단계 1262에서, 읽기 명령에서 참조한 데이터 세그멘트에 대응하는 패리티 세그멘트가 저장된 원격 데이터 뱅크(110)로 읽기 명령이 전송될 수 있다. 단계 1264에서, 피요청 데이터를 포함하는 응답이 원격 패리티 데이터 뱅크(110)로부터 수신된 후에, 단계 1266에서, 수신된 읽기 명령이 그 데이터를 이용하여 응답될 수 있다.
도 12를 참조하면, 분산형 RAID 시스템에서 쓰기 명령을 구현하는 방법의 일 실시예의 흐름도가 도시되어 있다. 이 쓰기 명령은 호스트(102)에 의해 스위치(120)를 통해 데이터 뱅크(110)로, 또는 하나의 데이터 뱅크(110)로부터 다른 데이터 뱅크(110)로 전송될 수 있다. 단계 1310에서, 쓰기 명령이 수신 데이터 뱅크(110)에 수신된다. 그 다음에, 단계 1312, 1314 및 1320에서, 수신 데이터 뱅크(110)의 분산형 RAID 애플리케이션(210)은 쓰기 명령에 의해 참조된 논리 어드레스에 대응하는 데이터 세그멘트, 데이터 세그멘트의 위치(예를 들면, 어떤 데이터 뱅크(110)가 그 세그멘트에 대응하는 데이터를 저장하고 있는지), 및 그 데이터 세그멘트에 대응하는 패리티 세그멘트의 위치(예를 들면, 그 세그멘트에 대응하는 데이터로부터 생성된 패리티 데이터가 저장된 세그멘트를 어떤 데이터 뱅크(110)가 저장하고 있는지)를 결정할 수 있다. 전술한 바와 같이, 데이터 세그멘트와 패리티 세그멘트 둘 다의 위치는 수신 데이터 뱅크(110)에 저장된 테이블(240)의 집합을 이용하여 결정할 수 있다.
그 다음에, 데이터 세그멘트가 저장된 데이터 뱅크(110) 또는 패리티 세그멘트가 저장된 데이터 뱅크(110)가 장애를 받았는지 결정될 수 있다. 만일 상기 2개의 데이터 뱅크(110)가 모두 장애를 받지 않았으면, 단계 1324에서, 분산형 RAID 애플리케이션에 의해 정상적인 쓰기 동작이 수행될 수 있다. 정상적인 쓰기 동작에 대해서는 도 9A 및 도 9B를 참조하여 위에서 설명하였으므로 여기에서 더 설명하지 않는다.
그러나, 만일 상기 2개의 데이터 뱅크(110) 중 어느 하나가 장애를 받았으면, 단계 1326에서, 장애를 받은 데이터 뱅크(110)를 고려한 쓰기 동작이 수행된다. 이 쓰기 동작은, 쓰기 명령이 데이터 뱅크(110)에 전송되기 전에, 쓰기 명령이 전송될 데이터 뱅크(110)에 장애가 있는지를 결정하고 만일 장애가 있으면 그 쓰기 명령이 장애있는 데이터 뱅크(110)에 전송되지 않는다는 점을 제외하면, 도 9A 및 도 9B를 참조하여 설명한 쓰기 동작과 실질적으로 동일하다. 다른 모든 점에서는 쓰기 동작이 실질적으로 동일하다.
전술한 흐름도를 검토하여 보면, 특정 실시예의 동작이 동작중인 분산형 RAID 시스템의 일 실시예의 특정 예와 관련하여 더 잘 이해될 수 있을 것이다. 이를 위하여, 5개의 데이터 뱅크(110)를 가진 분산형 RAID 시스템의 일 실시예를 도시한 도 4를 다시 참조한다. 제1 예를 시작하기 위해서, 호스트(102b)가 읽기 명령을 데이터 뱅크(110c)에 발행하고, 읽기 명령이 데이터 뱅크(110a)의 데이터 세그멘트 "2"(402c)에 대응하는 논리 어드레스를 참조한다고 가정하자. 여기에서, 데이터 뱅크(110c)의 분산형 RAID 애플리케이션(210c)은 수신된 읽기 명령의 논리 어드레스가 데이터 세그멘트 "2"(402c)를 참조하는지 및 데이터 세그멘트 "2"(402c)가 데이터 뱅크(110a)에 저장되어 있는지를 결정한다. 그 다음에, 분산형 RAID 애플리케이션(210c)은 대응하는 읽기 명령을 데이터 뱅크(110a)에 전송할 수 있다.
데이터 뱅크(110a)의 분산형 RAID 애플리케이션(210a)은 상기 읽기 명령을 수신하고, 읽기 명령이 데이터 세그멘트 "2"(402c)에 대응하는 논리 어드레스를 참조하는지 및 데이터 세그멘트 "2"(402c)가 그것이 실행하는 데이터 뱅크(110a)에 위치되어 있는지를 결정한다. 그 다음에, 분산형 RAID 애플리케이션(210a)은 데이터 기억부(250a)에 액세스하여 데이터 세그멘트 "2"(402c)로부터 요청된 데이터를 획득하고 상기 획득된 데이터를 명령 발행 데이터 뱅크(110c)의 분산형 RAID 애플리케이션(210c)에 돌려보낸다. 데이터 뱅크(110c)의 분산형 RAID 애플리케이션(210c)은 이 응답을 데이터 뱅크(110a)의 분산형 RAID 애플리케이션(210a)으로부터 수신하고, 이 응답으로부터의 데이터를 이용하여 호스트(102b)로부터 발행된 최초 읽기 명령에 응답한다.
이제, 호스트(102b)가 읽기 명령을 데이터 뱅크(110c)에 발행하고, 읽기 명령이 데이터 뱅크(110a)의 데이터 세그멘트 "2"(402c)에 대응하는 논리 어드레스를 참조하지만, 그 데이터 뱅크(110a)가 장애가 있고 더 이상 동작하지 않는다고 가정하자. 이 경우에, 데이터 뱅크(110c)의 분산형 RAID 애플리케이션(210c)은 수신된 읽기 명령의 논리 어드레스가 데이터 세그멘트 "2"(402c)를 참조하는지 및 데이터 세그멘트 "2"(402c)가 데이터 뱅크(110a)에 저장되어 있는지를 결정한다. 또한, 데이터 뱅크(110c)의 분산형 RAID 애플리케이션(210c)은 데이터 뱅크(110a)에 장애가 있는지를 결정할 수 있다.
따라서, 분산형 RAID 애플리케이션(210c)은 데이터 세그멘트 "2"(402c)에 대응하는 패리티 세그멘트(402j)의 위치가 데이터 뱅크(110e)인지를 결정할 수 있다. 그 다음에, 분산형 RAID 애플리케이션(210c)은 읽기 명령을 데이터 뱅크(110e)에 전송할 수 있다. 데이터 뱅크(110e)의 분산형 RAID 애플리케이션(210e)은 상기 읽기 명령을 수신하고, 읽기 명령이 데이터 세그멘트 "2"(402c)에 대응하는 논리 어드레스를 참조하는지 및 데이터 세그멘트 "2"(402c)에 대응하는 패리티 세그멘트(402j)가 그것이 실행하는 데이터 뱅크(110a)에 위치되어 있는지를 결정한다. 그 다음에, 분산형 RAID 애플리케이션(210e)은 데이터 기억부(250e)에 액세스하여 패리티 세그멘트(402j)에 액세스하고 데이터 세그멘트 "2"(402c)로부터 요청된 데이터를 패리티 세그멘트(402j)를 이용하여 획득한다. 상기 획득된 데이터는 명령 발행 데이터 뱅크(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)에 전송함으로써 데이터 세그멘트 "0"(402a), 데이터 세그멘트 "1"(402b) 및 데이터 세그멘트 "3"(402d)를 획득하고 패리티 세그멘트(402j)와 함께 데이터 세그멘트 "0"(402a), 데이터 세그멘트 "1"(402b) 및 데이터 세그멘트 "3"(402d)를 이용하여 데이터 세그멘트 "2"(402c)로부터 요청된 데이터를 획득할 수 있다.
데이터 뱅크(110c)의 분산형 RAID 애플리케이션(210c)은 이 응답을 데이터 뱅크(110e)의 분산형 RAID 애플리케이션(210e)으로부터 수신하고, 이 응답으로부터의 데이터를 이용하여 호스트(102b)로부터 발행된 최초 읽기 명령에 응답한다. 이 방법으로, 데이터 세그멘트에 대응하는 데이터가 분산형 RAID 시스템에서의 장애 발생에도 불구하고 호스트에 의해 여전히 판독될 수 있다.
쓰기 명령과 관련해서 설명하기 위해, 호스트(102b)가 쓰기 명령을 데이터 뱅크(110c)에 발행하고, 쓰기 명령이 데이터 뱅크(110a)의 데이터 세그멘트 "2"(402c)에 대응하는 논리 어드레스를 참조한다고 가정하자. 여기에서, 데이터 뱅크(110c)의 분산형 RAID 애플리케이션(210c)은 수신된 쓰기 명령의 논리 어드레스가 데이터 세그멘트 "2"(402c)를 참조하는지 및 데이터 세그멘트 "2"(402c)가 데이터 뱅크(110a)에 저장되어 있는지를 결정한다. 또한, 분산형 RAID 애플리케이션(210c)은 데이터 세그멘트 "2"(402c)에 대응하는 패리티 세그멘트(402j)가 데이터 뱅크(110e)에 위치되어 있는지를 결정한다.
그 다음에, 분산형 RAID 애플리케이션(210c)은 대응하는 쓰기 명령을 데이터 뱅크(110a, 110e)에 전송할 수 있다. 분산형 RAID 애플리케이션(210a, 210e)으로부터 완료 통지를 수신한 때, 분산형 RAID 애플리케이션(210c)은 최초로 수신한 쓰기 명령에 응답할 수 있다.
데이터 뱅크(110e)의 분산형 RAID 애플리케이션(210e)은 그 대응하는 쓰기 명령을 수신하고, 쓰기 명령이 데이터 세그멘트 "2"(402c)에 대응하는 논리 어드레스를 참조하는지 및 데이터 세그멘트 "2"(402c)에 대응하는 패리티 세그멘트(402j)가 그것이 실행하는 데이터 뱅크(110e)에 위치되어 있는지를 결정한다. 분산형 RAID 애플리케이션(210e)은 쓰기 명령을 그 기록 캐시에 배치하고 완료 통지를 데이터 뱅크(110c)에 전송한다. 그 다음에, 분산형 RAID 애플리케이션(210e)은 데이터 기억부(250e)에 액세스하여 패리티 세그멘트(402j)에 액세스하고, 수신된 쓰기 명령에서 참조한 데이터를 이용하여 패리티 세그멘트(402j)를 갱신할 수 있다.
데이터 뱅크(110a)의 분산형 RAID 애플리케이션(210a)은 그 대응하는 쓰기 명령을 수신하고, 쓰기 명령이 데이터 세그멘트 "2"(402c)에 대응하는 논리 어드레스를 참조하는지 및 데이터 세그멘트 "2"(402c)가 그것이 실행하는 데이터 뱅크(110a)에 위치되어 있는지를 결정한다. 분산형 RAID 애플리케이션(210a)은 쓰기 명령을 그 기록 캐시에 배치하고 완료 통지를 데이터 뱅크(110c)에 전송한다. 그 다음에, 분산형 RAID 애플리케이션(210a)은 데이터 기억부(250a)에 액세스하여 수신된 쓰기 명령에서 참조한 데이터를 이용하여 세그멘트 "2"(402c)를 갱신할 수 있다.
다시, 호스트(102b)가 쓰기 명령을 데이터 뱅크(110c)에 발행하고, 쓰기 명령이 데이터 뱅크(110a)의 데이터 세그멘트 "2"(402c)에 대응하는 논리 어드레스를 참조하지만, 그 데이터 뱅크(110a)가 장애가 있고 더 이상 동작하지 않는다고 가정하자. 이 경우에, 데이터 뱅크(110c)의 분산형 RAID 애플리케이션(210c)은 수신된 쓰기 명령의 논리 어드레스가 데이터 세그멘트 "2"(402c)를 참조하는지 및 데이터 세그멘트 "2"(402c)가 데이터 뱅크(110a)에 저장되어 있는지를 결정한다. 또한, 데이터 뱅크(110c)의 분산형 RAID 애플리케이션(210c)은 데이터 뱅크(110a)에 장애가 있는지를 결정할 수 있다. 더 나아가, 분산형 RAID 애플리케이션(210c)은 데이터 세그멘트 "2"(402c)에 대응하는 패리티 세그멘트(402j)가 데이터 뱅크(110e)에 위치되어 있는지를 결정할 수 있다. 그 다음에, 분산형 RAID 애플리케이션(210c)은 대응하는 쓰기 명령을 데이터 뱅크(110e)에 전송할 수 있다. 분산형 RAID 애플리케이션(210e)으로부터 완료 통지를 수신한 때 분산형 RAID 애플리케이션(210c)은 최초로 수신한 쓰기 명령에 응답할 수 있다.
데이터 뱅크(110e)의 분산형 RAID 애플리케이션(210e)은 대응하는 쓰기 명령을 수신하고, 쓰기 명령이 데이터 세그멘트 "2"(402c)에 대응하는 논리 어드레스를 참조하는지 및 데이터 세그멘트 "2"(402c)에 대응하는 패리티 세그멘트(402j)가 그것이 실행하는 데이터 뱅크(110e)에 위치되어 있는지를 결정한다. 분산형 RAID 애플리케이션(210e)은 쓰기 명령을 그 기록 캐시에 배치하고 완료 통지를 데이터 뱅크(110c)에 전송할 수 있다. 그 다음에, 분산형 RAID 애플리케이션(210e)은 데이터 기억부(250e)에 액세스하여 패리티 세그멘트(402j)에 액세스하고, 수신된 쓰기 명령에서 참조한 데이터를 이용하여 패리티 세그멘트(402j)를 갱신할 수 있다. 이 방법으로, 데이터 세그멘트에 대응하는 데이터가 분산형 RAID 시스템에서의 장애 발생에도 불구하고 호스트에 의해 여전히 기록될 수 있다.
전술한 내용에 의해, 여기에서 설명한 분산 방식으로 RAID를 구현함으로써 분산형 RAID 시스템 내에서 디스크 또는 데이터 뱅크의 장애로부터 보호할 수 있다는 것을 알 것이다. 그러나, 논리적 볼륨의 계속적인 성장에 따라서(이것은 약 1 페타바이트 이상일 수 있음), 그러한 분산형 RAID 시스템에서 사용되는 디스크 또는 데이터 뱅크의 수의 상응한 증가를 가져오고, 사용하는 데이터 뱅크 및 디스크의 수의 증가에 따라서 디스크 또는 데이터 뱅크에서 장애가 발생할 위험성이 더 커진다. 특히, 임의의 주어진 시간 내에 다중 장애가 발생할 위험성이 증가한다. 특히, 데이터 뱅크 또는 디스크에 장애가 있을 때, 디스크 및 데이터 뱅크의 수가 증가할수록, 이미 발생한 기존의 장애에 대하여 치료 동작이 완료되기 전에 하나 이상의 추가적인 데이터 뱅크, 디스크, 또는 그 조합이 계속해서 장애를 일으킬 확률이 더 커진다. 그러므로, 각종 분산형 RAID 시스템은 복수의 데이터 뱅크 또는 디스크에서 장애를 받을 수 있다.
그러므로, 분산형 RAID 시스템에서 사용되는 데이터 뱅크 또는 디스크의 다중 장애를 보호하는 것이 유용하다. 그 때문에, 이제 분산형 RAID 시스템에서의 다중 장애를 보호하기 위해 분산형 RAID 시스템과 함께 사용될 수 있는 각종 방법의 실시예에 관하여 설명한다. 특히, 전술한 바와 같이, 분산형 RAID 시스템의 각 데이터 뱅크는 볼륨의 데이터를 포함하는 세그멘트(데이터 세그멘트) 및 볼륨의 데이터 세그멘트에 대응하는 용장 데이터를 저장하는 세그멘트를 저장할 수 있고, 상기 각 용장 세그멘트에 있어서, 용장 세그멘트에 저장되는 용장 데이터를 발생하기 위해 사용되는 데이터 세그멘트는 그 데이터 뱅크에 저장되지 않는다. 이 명세서의 나머지 설명을 위하여, 상이한 데이터 뱅크에 저장된 볼륨의 데이터 세그멘트로부터 발생되는 용장 데이터를 저장하는 용장 세그멘트는 네트워크 패리티(NP) 세그멘트라고 인용하겠다(상기 설명으로부터 NP 세그멘트는 임의 유형의 용장 데이터를 내포할 수 있고, 명칭 NP는 NP 세그멘트가 RAID 레벨 5인 실시예와 관련된 용장 데이터만을 저장할 수 있다는 의미로 취해져야 한다는 것을 이해하여야 한다).
따라서, 각 데이터 뱅크는 볼륨의 데이터 세그멘트, 및 다른 데이터 뱅크에 저장된 데이터 세그멘트로부터 발생된 NP 세그멘트를 포함한다. 이 구성은 디스크 드라이브 또는 데이터 뱅크 장애를 보호할 수 있다. 그러나, 분산형 RAID 시스템에서 추가의 디스크 또는 데이터 뱅크 장애를 보호하는 것이 바람직하다. 이것을 달성하기 위해, 일부 실시예에 있어서, (예를 들면, 대응하는 데이터 세그멘트와는 다른 데이터 뱅크에 저장된 NP 세그멘트를 이용해서) 볼륨과 함께 데이터 뱅크에 걸쳐 구현되는 RAID의 레벨뿐만 아니라, 추가적으로 소정의 RAID 레벨이 분산형 RAID 시스템의 각 데이터 뱅크 내에서 구현되어 각 데이터 뱅크 내의 데이터를 보호할 수 있다. 데이터 뱅크에 걸쳐서 뿐만 아니라 데이터 뱅크 내에서 RAID를 이용함으로써, 분산형 RAID 시스템 전체의 장애에 대한 추가적인 보호를 실현할 수 있다.
특히, 일 실시예에 있어서, 데이터 뱅크의 집합에 걸쳐서 볼륨과 함께 구현되는 RAID의 레벨 외에도, 각 데이터 뱅크에 저장된 데이터 세그멘트와 함께 소정의 RAID 레벨이 구현될 수 있다. 다시 말하면, 일 실시예에 있어서, 분산형 RAID 애플리케이션(210)은 전술한 기능 외에도, 특정 데이터 뱅크에 저장된 데이터 세그멘트 또는 NP 세그멘트와 관련하여 RAID의 하나 이상의 레벨을 구현하도록 또한 구성될 수 있다. 예를 들면, RAID 레벨 5는 용장 세그멘트가 데이터 뱅크 내에 저장된 대응하는 데이터 세그멘트로부터 형성되고(이러한 유형의 용장 세그멘트는 여기에서 데이터 패리티(parity of data; POD) 세그멘트라고 인용하겠다), 대응하는 데이터 세그멘트와는 다른 디스크의 데이터 뱅크에 저장되어 대응하는 데이터 세그멘트가 상기 POD를 이용하여 복구되도록 데이터 뱅크 내에서 구현될 수 있다. 마찬가지로, 용장 세그멘트는 데이터 뱅크 내에 저장된 대응하는 네트워크 패리티 세그멘트로부터 형성되고(이러한 유형의 용장 세그멘트는 여기에서 패리티 패리티(parity of parity; POP) 세그멘트라고 인용하겠다), 대응하는 NP 세그멘트와는 다른 디스크의 데이터 뱅크에 저장되어 대응하는 NP 세그멘트가 상기 POP를 이용하여 복구되도록 할 수 있다.
또한, 일부 실시예에 있어서, 대응하는 데이터 세그멘트로부터 발생된 각 POD 세그멘트 외에, 리드-솔로몬 ECC 코드 발생 또는 다른 코드 발생 기술(가끔 Q라고 인용한다)을 이용하여 동일한 대응 데이터 세그멘트로부터 용장 세그멘트(이러한 유형의 용장 세그멘트는 여기에서 데이터 Q(Q of data; QOD) 세그멘트라고 인용하겠다)를 발생하도록 RAID 레벨 6이 데이터 뱅크 내에서 구현될 수 있다. 대응하는 POD와는 다른 디스크에 QOD 세그멘트를 저장함으로써, 대응하는 데이터 세그멘트가 또한 QOD를 이용하여 복구될 수 있다. 마찬가지로, RAID 레벨 6 용장 세그멘트가 동일한 대응하는 네트워크 패리티 세그멘트로부터 발생되고(이러한 유형의 용장 세그멘트는 여기에서 패리티 Q(Q of parity; QOP) 세그멘트라고 인용하겠다), 대응하는 POP 세그멘트와는 다른 디스크의 데이터 뱅크에 저장되어 대응하는 네트워크 패리티 세그멘트가 추가적으로 상기 QOP 세그멘트를 이용하여 복구되도록 할 수 있다.
볼륨과 함께 사용되기 원하는 용장 및 보호의 크기는 볼륨을 생성할 때 그 볼륨과 함께 사용자가 원하는 교환 조건에 따라서 선택될 수 있다. 이 선택은 볼륨과 함께 RAID의 소정 레벨을 단독으로 사용하는 옵션을 포함하여 그 RAID 레벨이 데이터 뱅크에 걸쳐서(다시 말하면 각 데이터 뱅크의 NP 세그멘트만을 이용해서) 구현되게 할 수 있다. 이 옵션은 적어도 임의의 하나의 드라이브 장애 또는 임의의 하나의 데이터 뱅크 장애에 대하여 보호할 수 있다. 다른 하나의 옵션은 각 데이터 뱅크 내에서 RAID 레벨 5(POD, POP)를 사용하는 것과 함께, 볼륨과 협력하여 (NP 세그멘트를 이용해서) RAID의 소정 레벨을 사용하는 것이다. 이 옵션은 적어도 1 데이터 뱅크와 1 디스크의 장애에 대하여 또는 3 디스크의 장애에 대하여 보호를 제공함으로써 증가된 장애 허용도를 제공할 수 있다. 그러나, 이 옵션은 데이터 뱅크에 결쳐 RAID를 구현하는 것에 비하여 성능 및 용량 페널티를 부과할 수 있다. 대부분의 장애 허용도 옵션은 데이터 뱅크 내에서 RAID 레벨 6(POD, POP, QOD 및 QOP)을 사용하는 것과 함께 볼륨과 협력하여 (NP 세그멘트를 이용하여) RAID의 소정 레벨을 구현하도록 사용자가 선택하는 것일 수 있다. 비록 이 옵션이 최고 레벨의 장애 허용도, 및 1 데이터뱅크와 2 드라이브 장애에 대한 보호 또는 5 드라이브 장애에 대한 보호를 갖지만, 성능 및 용량과 관련하여 최고의 비용을 또한 부과할 수 있다.
독자의 이해를 돕기 위해 상기 실시예의 특정 예를 설명하는 것이 유용할 것이다. 비록 특정 예는 단일 데이터 뱅크와 관련하여 설명하지만, 본 발명의 실시예와 관련된 장점을 달성하기 위해서, 분산형 RAID 시스템에 분산된 다른 데이터 뱅크들이 유사하게 구성될 수 있다는 것을 이해할 것이다. 다시 말해서, 이 예는 RAID 레벨이 특정 데이터 뱅크 내에서 어떻게 구현되는지를 설명하기 위해 사용되지만, 본 발명의 실시예에서 RAID의 레벨은 분산형 RAID 시스템의 각 데이터 뱅크에서 구현될 수 있다는 점에 주목하여야 한다. 이하에서의 예는 본 발명의 실시예를 제한하는 것으로 해석되어서는 안되고 데이터 뱅크 내에서 RAID를 구현하는 특정 실시예의 비제한적인 예를 설명하기 위해 사용될 뿐이라는 점을 또한 주목하여야 한다.
이 설명을 위하여, 이제 도 13A~13C를 참조한다. 이 예의 설명을 위하여, 도 13A~13C에 도시된 데이터 뱅크(1110b)는 도 4와 관련하여 위에서 설명한 데이터 뱅크(110b)와 유사하고, 5개의 데이터 뱅크가 있는 분산형 RAID 시스템에 존재하며, 볼륨은 5개의 데이터 뱅크에 걸쳐 배치되고, 데이터 뱅크(1110b)가 무작위 순열에서 첫번째 데이터 뱅크라고 가정한다. 그래서, 데이터 뱅크(1110b)는 볼륨의 제1 데이터 세그멘트인 데이터 세그멘트 "0"(1102a), 볼륨의 제6 데이터 세그멘트인 데이터 세그멘트 "5"(1102b), 볼륨의 제11 데이터 세그멘트인 데이터 세그멘트 "10"(1102c), 볼륨의 제16 데이터 세그멘트인 데이터 세그멘트 "15"(1102d), 볼륨의 제21 데이터 세그멘트인 데이터 세그멘트 "20"(1102e), 볼륨의 제26 데이터 세그멘트인 데이터 세그멘트 "25"(1102f), 볼륨의 제31 데이터 세그멘트인 데이터 세그멘트 "30"(1102g) 등으로 지정될 수 있다.
데이터 뱅크(1110b)가 데이터 기억부에 6개의 디스크(2252)를 가질 수 있기 때문에, 데이터 뱅크(1110b)에 지정된 데이터 세그멘트(1102)는 상기 디스크에 걸쳐 배치될 수 있다. 여기에서, 데이터 세그멘트 "0"(1102a)는 디스크(2252a)에 저장되고, 데이터 세그멘트 "5"(1102b)는 디스크(2252b)에 저장되고, 데이터 세그멘트 "10"(1102c)은 디스크(2252c)에 저장되고, 데이터 세그멘트 "15"(1102d)는 디스크(2252d)에 저장되고, 데이터 세그멘트 "20"(1102e)은 디스크(2252e)에 저장되며, 데이터 세그멘트 "25"(1102f)는 디스크(2252f)에 저장된다. 그 다음에 제1 디스크에 대하여 지정이 다시 시작되고, 데이터 세그멘트 "30"(1102g)이 디스크(2252a)에 저장되는 등으로 각 데이터 세그멘트가 각 디스크에 저장된다.
이 예의 설명을 위하여, RAID 레벨 5가 볼륨과 협력하여 구현되고 (4+1)의 패리티 집합이 사용된다고 또한 가정한다. 그래서, 전술한 바와 같이, 볼륨과 관련된 네트워크 패리티 세그멘트는 데이터 뱅크(1110b)에 또한 저장될 수 있고, 상기 네트워크 패리티 세그멘트를 발생하기 위해 사용되는 대응 데이터 세그멘트가 분산형 RAID 시스템의 다른 데이터 뱅크에 지정 및 저장된다. 이 예에서, 볼륨의 대응하는 데이터 세그멘트 "16", 볼륨의 데이터 세그멘트 "17", 볼륨의 데이터 세그멘트 "18" 및 볼륨의 데이터 세그멘트 "19"를 이용하여 발생된 NP 세그멘트 "1"(1102ar)은 디스크 2252a에 저장되고, 볼륨의 대응하는 데이터 세그멘트 "36", 볼륨의 데이터 세그멘트 "37", 볼륨의 데이터 세그멘트 "38" 및 볼륨의 데이터 세그멘트 "39"를 이용하여 발생된 NP 세그멘트 "2"(1102as)는 디스크 2252b에 저장되고, 볼륨의 대응하는 데이터 세그멘트 "56", 볼륨의 데이터 세그멘트 "57", 볼륨의 데이터 세그멘트 "58" 및 볼륨의 데이터 세그멘트 "59"를 이용하여 발생된 NP 세그멘트 "3"(1102at)은 디스크 2252c에 저장되는 등으로 각 NP 세그멘트가 각 디스크에 저장된다.
이제, 도 13A를 구체적으로 참조하면, 이 예에 있어서, 데이터 세그멘트 및 NP 세그멘트는 데이터 뱅크(1110b)의 다른 디스크(2252)에 저장된다. 데이터 뱅크(1110b)에 저장된 각 NP 세그멘트는 데이터 뱅크(1110b)에 저장되지 않은 대응하는 데이터 세그멘트로부터 발생된다는 점에 또한 주목한다. 이제, 사용자가 이 볼륨과 관련하여 추가 레벨의 장애 허용도를 구현하기 원하고, 데이터 뱅크(1110b)를 그 일부로 하여 분산형 RAID 시스템을 구성하는 각 데이터 뱅크 내에서 RAID 레벨 5가 구현되어야 하는 것을 지정하였다고 가정한다.
도 13B는 분산형 RAID 시스템의 데이터 뱅크 내에서 RAID 레벨 5가 구현되고 (4+1) 패리티 집합이 각 데이터 뱅크 내에서 RAID 5를 구현하기 위해 사용되는 것을 사용자가 지정하였을 때 데이터 뱅크(1110b)의 결과적인 구성을 보인 도이다. 여기에서, POD 세그멘트는 데이터 뱅크(1110b)에 저장된 대응하는 데이터 세그멘트로부터 생성되고 그들의 대응하는 데이터 세그멘트와는 다른 디스크(2252)에 저장되며, POP 세그멘트는 데이터 뱅크(1110b)에 저장된 대응하는 패리티 세그멘트로부터 생성되고 그들의 대응하는 패리티 세그멘트와는 다른 디스크(2252)에 저장된다. 따라서, 이제 데이터 뱅크(1110b) 내의 데이터 세그멘트는 그 데이터 세그멘트에 대응하며 다른 데이터 뱅크에 존재하는 NP 세그멘트를 이용하여 복구될 수 있고, 추가적으로 데이터 뱅크(1110b) 내의 데이터 세그멘트는 동일한 데이터 뱅크에 존재하는 대응하는 POD 세그멘트를 이용하여 복구될 수 있다. 또한, 데이터 뱅크 내의 NP 세그멘트는 이제 동일한 데이터 뱅크에 존재하는 POP 세그멘트를 이용하여 복구될 수 있다.
도시된 특정 예에 있어서, 디스크 2252f에 저장된 POD1(1102bb)은 디스크 2252a의 대응하는 데이터 세그멘트 "0"(1102a), 디스크 2252b의 데이터 세그멘트 "5"(1102b), 디스크 2252c의 데이터 세그멘트 "10"(1102c) 및 디스크 2252d의 데이터 세그멘트 "15"(1110d)로부터 생성되고; 디스크 2252d에 저장된 POD2(1102bc)는 디스크 2252e의 대응하는 데이터 세그멘트 "20"(1102e), 디스크 2252f의 데이터 세그멘트 "25"(1102f), 디스크 2252a의 데이터 세그멘트 "30"(1102g) 및 디스크 2252b의 데이터 세그멘트 "35"(1110h)로부터 생성되고; 디스크 2252b에 저장된 POD3(1102bd)는 디스크 2252c의 대응하는 데이터 세그멘트 "40"(1102i), 디스크 2252d의 데이터 세그멘트 "45"(1102j), 디스크 2252e의 데이터 세그멘트 "50"(1102k) 및 디스크 2252f의 데이터 세그멘트 "55"(1110l)로부터 생성되는 등으로 POD가 생성되었다.
이와 유사하게, 디스크 2252f에 저장된 POP1(1102bz)은 디스크 2252a의 대응하는 NP 세그멘트 "1"(1102ar), 디스크 2252b의 NP 세그멘트 "2"(1102as), 디스크 2252c의 NP 세그멘트 "3"(1102at) 및 디스크 2252d의 NP 세그멘트 "4"(1102au)로부터 생성되고; 디스크 2252c에 저장된 POP2(1102by)는 디스크 2252e의 대응하는 NP 세그멘트 "5"(1102av), 디스크 2252f의 NP 세그멘트 "6"(1102aw), 디스크 2252a의 NP 세그멘트 "7"(1102ax) 및 디스크 2252b의 NP 세그멘트 "8"(1102ay)로부터 생성되고; 디스크 2252b에 저장된 POP3(1102bx)는 디스크 2252c의 대응하는 NP 세그멘트 "9"(1102az) 및 디스크 2252d의 NP 세그멘트 "10"(1102ba)으로부터 생성되었다.
이제, 사용자가 이 볼륨과 관련하여 추가 레벨의 장애 허용도를 구현하기 원하고, 데이터 뱅크(1110b)를 일부로 하여 분산형 RAID 시스템을 구성하는 각 데이터 뱅크 내에서 RAID 레벨 6이 구현되는 것을 지정하였다고 가정한다. 여기에서, 각 POD 세그멘트에 대응하는 QOD 세그멘트는 대응하는 POD 세그멘트와 동일한 데이터 세그멘트로부터 생성되고 대응하는 POD 세그멘트와는 다른 디스크(2252)의 데이터 뱅크(1110b) 내에 저장된다. 또한, 각 POP 세그멘트에 대응하는 QOP 세그멘트는 대응하는 POP 세그멘트와 동일한 패리티 세그멘트로부터 생성되고 대응하는 POP 세그멘트와는 다른 디스크(2252)의 데이터 뱅크(1110b) 내에 저장된다. 따라서, 이제 데이터 뱅크(1110b) 내의 데이터 세그멘트는 그 데이터 세그멘트에 대응하며 다른 데이터 뱅크에 존재하는 NP 세그멘트를 이용하여 복구될 수 있고, 추가적으로 데이터 뱅크(1110b) 내의 데이터 세그멘트는 동일한 데이터 뱅크에 존재하는 대응하는 POD 세그멘트 또는 대응하는 QOD 세그멘트를 이용하여 복구될 수 있다. 더 나아가, 데이터 뱅크 내의 NP 세그멘트는 이제 동일한 데이터 뱅크에 존재하는 POP 세그멘트 또는 QOP를 이용하여 복구될 수 있다.
도 13C는 분산형 RAID 시스템의 데이터 뱅크 내에서 RAID 레벨 6이 구현되는 것을 사용자가 지정하였을 때 데이터 뱅크(1110b)의 결과적인 구성을 보인 도이다. 여기에서, 위에서 설명한 POD 세그멘트 및 POP 세그멘트 외에, QOD 세그멘트는 대응하는 POD 세그멘트와 동일한 대응하는 데이터 세그멘트로부터 생성되고 대응하는 POD 세그멘트와는 다른 디스크(2252)의 데이터 뱅크(1110b)에 저장되며, QOP 세그멘트는 대응하는 POP 세그멘트와 동일한 대응하는 패리티 세그멘트로부터 생성되고 대응하는 POP 세그멘트와는 다른 디스크에 저장된다.
도시된 특정 예에 있어서, 디스크 2252e에 저장된 QOD1(1102bm)은 디스크 2252f에 저장된 POD1(1102bb)에 대응하고 디스크 2252a의 동일한 대응하는 데이터 세그멘트 "0"(1102a), 디스크 2252b의 데이터 세그멘트 "5"(1102b), 디스크 2252c의 데이터 세그멘트 "10"(1102c) 및 디스크 2252d의 데이터 세그멘트 "15"(1110d)로부터 생성되었으며; 디스크 2252c에 저장된 QOD2(1102bn)는 디스크 2252d에 저장된 POD2(1102bc)에 대응하고 디스크 2252e의 동일한 대응하는 데이터 세그멘트 "20"(1102e), 디스크 2252f의 데이터 세그멘트 "25"(1102f), 디스크 2252a의 데이터 세그멘트 "30"(1102g) 및 디스크 2252b의 데이터 세그멘트 "35"(1110h)로부터 생성되었으며; 디스크 2252a에 저장된 QOD3는 디스크 2252b에 저장된 POD3(1102bd)에 대응하고 디스크 2252c의 동일한 대응하는 데이터 세그멘트 "40"(1102i), 디스크 2252d의 데이터 세그멘트 "45"(1102j), 디스크 2252e의 데이터 세그멘트 "50"(1102k) 및 디스크 2252f의 데이터 세그멘트 "55"(1110l)로부터 생성되는 등으로 QOD가 생성되었다.
이와 유사하게, 디스크 2252e에 저장된 QOP1(1102ca)은 디스크 2252f에 저장된 POP1(1102bz)에 대응하고 디스크 2252a의 동일한 대응하는 NP 세그멘트 "1"(1102ar), 디스크 2252b의 NP 세그멘트 "2"(1102as), 디스크 2252c의 NP 세그멘트 "3"(1102at) 및 디스크 2252d의 NP 세그멘트 "4"(1102au)로부터 생성되었으며; 디스크 2252d에 저장된 QOP2는 디스크 2252c에 저장된 POP2(1102by)에 대응하고 디스크 2252e의 동일한 대응하는 NP 세그멘트 "5"(1102av), 디스크 2252f의 NP 세그멘트 "6"(1102aw), 디스크 2252a의 NP 세그멘트 "7"(1102ax) 및 디스크 2252b의 NP 세그멘트 "8"(1102ay)로부터 생성되었으며; 디스크 2252a에 저장된 QOP3는 디스크 2252b에 저장된 POP3(1102bx)에 대응하고 디스크 2252c의 동일한 대응하는 NP 세그멘트 "9"(1102az) 및 디스크 2252d의 NP 세그멘트 "10"(1102ba)으로부터 생성되었다.
따라서, 본 발명의 실시예는 데이터 뱅크 또는 디스크 장애에 대한 보호를 제공하는 능력을 비롯해서 예전에 이용가능한 데이터 기억 장치를 능가하는 장점을 제공할 수 있다. 사실, 일부 실시예는 4개, 5개 또는 아마도 더 많은 디스크 장애에 대하여 보호를 제공할 수 있다. 따라서, 장애가 있는 데이터 뱅크 또는 디스크를 복구 또는 교체하기 위해 개인적인 관리에 이용할 수 있는 시간이 증가하고, 분산형 RAID 시스템의 장애 사이의 평균 시간이 증가된다. 특정 실시예는 내부 장애가 데이터를 손상시킨 경우에도 데이터 뱅크가 손상된 데이터를 내부적으로 재생성할 수 있게 함으로써 데이터 뱅크들 간의 감소된 네트워크 트래픽의 장점을 또한 제공할 수 있다.
전술한 설명에서, 본 발명은 특정 실시예를 인용하여 설명하였다. 그러나, 이 기술에 숙련된 사람이라면 이하의 청구범위에서 규정하고 있는 본 발명의 범위로부터 벗어나지 않고 각종 수정 및 변경이 가능하다는 것을 알 것이다. 그러므로, 이 명세서 및 도면은 제한하는 의도가 없는 단지 예시하는 것으로 간주되어야 하고, 그러한 모든 수정들은 본 발명의 범위에 포함되는 것으로 의도된다.
위에서는 본 발명의 잇점, 다른 장점, 및 종래 문제점에 대한 해법을 특정 실시예와 관련하여 설명하였다. 그러나, 상기 잇점, 장점, 문제점에 대한 해법, 및 임의의 잇점, 장점 또는 해법을 발생시키거나 더욱 명백하게 하는 컴포넌트들은 임의의 또는 모든 청구범위의 절대적이거나 필요하거나 본질적인 특징 또는 구성 요소로서 해석되어서는 안된다.
120a, 120b: 스위치
202: 프로세서
210: 분산형 RAID 애플리케이션
240, 245: 테이블
260: 기록 캐시
262a, 262n: 디스크 제어기
202a, 202n: 프로세서
230: 메모리
212: I/O 컨트롤러 허브
282: 네트워크 인터페이스
120a, 120b: 스위치

Claims (15)

  1. RAID 시스템을 다중 장애로부터 보호하는 방법에 있어서,
    복수의 데이터 뱅크 컴퓨터가 각각의 다른 데이터 뱅크 컴퓨터 및 하나 이상의 호스트 각각에 네트워크를 통하여 결합되고 각 데이터 뱅크가 분산형 RAID 애플리케이션을 실행하는 시스템을 제공하는 단계와;
    복수의 데이터 뱅크에 저장되는 세그멘트 집합을 포함한 볼륨을 복수의 데이터 뱅크에서 확립하는 단계와;
    볼륨과 협력하여 제1 RAID 레벨을 구현하는 단계- 이 제1 RAID 레벨을 구현하는 단계는 네트워크 패리티(NP) 세그멘트의 집합을 저장하는 단계를 포함하고, 각 NP 세그멘트는 각 NP 세그멘트가 대응하는 하나 이상의 세그멘트 집합과 동일한 데이터 뱅크에 존재하지 않도록 하나 이상의 세그멘트 집합과 대응하는 것임 -와;
    복수의 데이터 뱅크 내에서 제2 RAID 레벨을 구현하는 단계를 포함하고,
    제1 데이터 뱅크에 대하여 제2 RAID 레벨을 구현하는 단계는, 제1 데이터 뱅크에 저장된 세그멘트의 집합에 대해서,
    각 데이터 패리티(POD) 세그멘트가 제1 데이터 뱅크의 대응하는 하나 이상의 세그멘트 집합과 동일한 디스크에 존재하지 않도록 제1 데이터 뱅크의 하나 이상의 데이터 세그멘트 집합에 각각 대응하는 POD 세그멘트의 집합을 저장하는 단계와;
    각 패리티 패리티(POP) 세그멘트가 제1 데이터 뱅크의 대응하는 하나 이상의 NP 세그멘트 집합과 동일한 디스크에 존재하지 않도록 제1 데이터 뱅크에 저장된 하나 이상의 NP 세그멘트 집합에 각각 대응하는 POP 세그멘트의 집합을 저장하는 단계를 포함하는 것인 RAID 시스템 보호 방법.
  2. 제1항에 있어서, 제2 RAID 레벨을 구현하는 단계는, 제1 데이터 뱅크에 저장된 세그멘트의 집합에 대해서,
    각 데이터 Q(QOD) 세그멘트가 대응하는 POD 세그멘트와 동일한 디스크에 존재하지 않도록, POD 세그멘트에 각각 대응하고 POD 세그멘트에 대응하는 제1 데이터 뱅크의 하나 이상의 데이터 세그멘트 집합으로부터 각각 생성된 QOD 세그멘트의 집합을 저장하는 단계와;
    각 패리티 Q(QOP) 세그멘트가 대응하는 POP 세그멘트와 동일한 디스크에 존재하지 않도록, POP 세그멘트에 각각 대응하고 POD 세그멘트에 대응하는 하나 이상의 NP 세그멘트로부터 각각 생성된 QOP 세그멘트의 집합을 저장하는 단계를 더 포함하는 것인 RAID 시스템 보호 방법.
  3. 제2항에 있어서, 볼륨의 각 세그멘트 집합은 복수의 데이터 뱅크 중 하나에 대응하고, 각 세그멘트는 복수의 데이터 뱅크의 순열에 따라서 데이터 뱅크에 할당되며, 각 용장 세그멘트 집합은 용장 세그멘트에 대응하는 하나 이상의 세그멘트 중 임의의 세그멘트에 대응하는 복수의 각 데이터 뱅크와는 다른 데이터 뱅크에 할당되는 것인 RAID 시스템 보호 방법.
  4. 제3항에 있어서, 제1 명령이 쓰기 명령인지를 결정하는 단계와, 제1 명령이 쓰기 명령이면 복수의 데이터 뱅크 중에서 제2 데이터 뱅크를 결정하는 단계를 더 포함하고, 제2 데이터 뱅크는 제1 세그멘트와 관련된 제1 용장 세그멘트에 대응하고 제1 용장 세그멘트와 관련하여 제1 명령을 실행하며, 제1 명령은 제2 데이터 뱅크에서 실행되는 것인 RAID 시스템 보호 방법.
  5. 제4항에 있어서, 제1 데이터 뱅크를 결정하는 단계와 제2 데이터 뱅크를 결정하는 단계는 데이터 뱅크의 순열과 RAID 레벨을 포함하는 글로벌 테이블에 액세스하는 단계를 포함한 것인 RAID 시스템 보호 방법.
  6. 분산형 RAID를 구현하는 시스템에 있어서,
    하나 이상의 호스트와;
    복수의 데이터 뱅크 컴퓨터를 포함하고, 각 데이터 뱅크는 각 호스트 및 다른 복수의 데이터 뱅크 각각에 결합되며, 각 데이터 뱅크는,
    프로세서와;
    디스크의 집합을 포함하는 데이터 기억부와;
    컴퓨터 판독가능 매체를 포함하고, 컴퓨터 판독가능 매체는,
    하나 이상의 호스트 중 제1 호스트로부터 볼륨의 제1 세그멘트에 대응하는 명령을 수신- 볼륨 및 이 볼륨과 협력하여 구현되는 RAID 레벨에 대응하는 용장 데이터는 복수의 데이터 뱅크 각각에 저장되고, 볼륨은 복수의 데이터 뱅크에 저장된 세그멘트의 집합을 포함하며, 제1 RAID 레벨이 볼륨과 협력하여 구현되고, 제1 RAID 레벨의 구현은 용장 세그멘트의 집합을 저장하는 것을 포함하고, 각 용장 세그멘트는 각 용장 세그멘트가 대응하는 하나 이상의 세그멘트 집합과 동일한 데이터 뱅크에 존재하지 않도록 하나 이상의 세그멘트 집합에 대응하는 것임- 하고;
    복수의 데이터 뱅크 내에서 제2 RAID 레벨을 구현하도록 실행가능한 명령어를 내포하는 것이며,
    제1 데이터 뱅크에 대해 제2 RAID 레벨을 구현하는 것은, 제1 데이터 뱅크에 저장된 세그멘트의 집합에 대해서,
    각 데이터 패리티(POD) 세그멘트가 제1 데이터 뱅크의 대응하는 하나 이상의 세그멘트 집합과 동일한 디스크에 존재하지 않도록 제1 데이터 뱅크의 하나 이상의 데이터 세그멘트 집합에 각각 대응하는 POD 세그멘트의 집합을 저장하는 것; 및
    각 패리티 패리티(POP) 세그멘트가 제1 데이터 뱅크의 대응하는 하나 이상의 NP 세그멘트 집합과 동일한 디스크에 존재하지 않도록 제1 데이터 뱅크에 저장된 하나 이상의 NP 세그멘트 집합에 각각 대응하는 POP 세그멘트의 집합을 저장하는 것을 포함하는 것인 분산형 RAID 구현 시스템.
  7. 제6항에 있어서, 컴퓨터 명령어는, 제1 데이터 뱅크에 저장된 세그멘트의 집합에 대해서,
    각 데이터 Q(QOD) 세그멘트가 대응하는 POD 세그멘트와 동일한 디스크에 존재하지 않도록, POD 세그멘트에 각각 대응하고 POD 세그멘트에 대응하는 제1 데이터 뱅크의 하나 이상의 데이터 세그멘트 집합으로부터 각각 생성된 QOD 세그멘트의 집합을 저장하고;
    각 패리티 Q(QOP) 세그멘트가 대응하는 POP 세그멘트와 동일한 디스크에 존재하지 않도록, POP 세그멘트에 각각 대응하고 POD 세그멘트에 대응하는 하나 이상의 NP 세그멘트로부터 각각 생성된 QOP 세그멘트의 집합을 저장함으로써 제2 RAID 레벨을 구현하도록 추가로 실행가능한 것인 분산형 RAID 구현 시스템.
  8. 제7항에 있어서, 볼륨의 각 세그멘트는 복수의 데이터 뱅크 중 하나에 대응하고, 각 세그멘트는 복수의 데이터 뱅크의 순열에 따라서 복수의 데이터 뱅크 중 하나에 할당되며, 각 용장 세그멘트는 용장 세그멘트와 관련된 볼륨의 임의의 세그멘트에 대응하는 복수의 각 데이터 뱅크와는 다른 복수의 데이터 뱅크 중의 하나에 할당되는 것인 분산형 RAID 구현 시스템.
  9. 제8항에 있어서, 컴퓨터 명령어는 제1 명령이 쓰기 명령인지를 결정하고 제1 명령이 쓰기 명령이면 복수의 데이터 뱅크 중에서 제2 데이터 뱅크를 결정하도록 추가로 실행가능한 것이며, 제2 데이터 뱅크는 제1 세그멘트와 관련된 제1 용장 세그멘트에 대응하고, 제2 데이터 뱅크가 명령을 수신한 데이터 뱅크이면 제1 용장 세그멘트와 관련하여 제1 명령을 실행하고, 제2 데이터 뱅크가 명령을 수신한 데이터 뱅크가 아니면 제1 명령을 제2 데이터 뱅크로 보내는 것인 분산형 RAID 구현 시스템.
  10. 제9항에 있어서, 제1 데이터 뱅크를 결정하는 것과 제2 데이터 뱅크를 결정하는 것은 데이터 기억부 내의 글로벌 테이블에 액세스하는 것을 포함하고, 글로벌 테이블은 데이터 뱅크의 순열과 RAID 레벨을 포함한 것인 분산형 RAID 구현 시스템.
  11. 분산형 RAID를 구현하는 컴퓨터 실행가능 명령어를 내포한 컴퓨터 판독가능 매체에 있어서, 컴퓨터 명령어는,
    복수의 데이터 뱅크에 저장되는 세그멘트 집합을 포함한 볼륨을 복수의 데이터 뱅크에서 확립하는 단계와;
    볼륨과 협력하여 제1 RAID 레벨을 구현하는 단계- 이 제1 RAID 레벨을 구현하는 단계는 네트워크 패리티(NP) 세그멘트의 집합을 저장하는 단계를 포함하고, 각 NP 세그멘트는 각 NP 세그멘트가 대응하는 하나 이상의 세그멘트 집합과 동일한 데이터 뱅크에 존재하지 않도록 하나 이상의 세그멘트 집합과 대응하는 것임 -와;
    복수의 데이터 뱅크 내에서 제2 RAID 레벨을 구현하는 단계를 수행하도록 실행가능한 것이고,
    제1 데이터 뱅크에 대하여 제2 RAID 레벨을 구현하는 단계는, 제1 데이터 뱅크에 저장된 세그멘트의 집합에 대해서,
    각 데이터 패리티(POD) 세그멘트가 제1 데이터 뱅크의 대응하는 하나 이상의 세그멘트 집합과 동일한 디스크에 존재하지 않도록 제1 데이터 뱅크의 하나 이상의 데이터 세그멘트 집합에 각각 대응하는 POD 세그멘트의 집합을 저장하는 단계와;
    각 패리티 패리티(POP) 세그멘트가 제1 데이터 뱅크의 대응하는 하나 이상의 NP 세그멘트 집합과 동일한 디스크에 존재하지 않도록 제1 데이터 뱅크에 저장된 하나 이상의 NP 세그멘트 집합에 각각 대응하는 POP 세그멘트의 집합을 저장하는 단계를 포함하는 것인 컴퓨터 판독가능 매체.
  12. 제11항에 있어서, 명령어는, 제1 데이터 뱅크에 저장된 세그멘트의 집합에 대해서,
    각 데이터 Q(QOD) 세그멘트가 대응하는 POD 세그멘트와 동일한 디스크에 존재하지 않도록, POD 세그멘트에 각각 대응하고 POD 세그멘트에 대응하는 제1 데이터 뱅크의 하나 이상의 데이터 세그멘트 집합으로부터 각각 생성된 QOD 세그멘트의 집합을 저장하고;
    각 패리티 Q(QOP) 세그멘트가 대응하는 POP 세그멘트와 동일한 디스크에 존재하지 않도록, POP 세그멘트에 각각 대응하고 POD 세그멘트에 대응하는 하나 이상의 NP 세그멘트로부터 각각 생성된 QOP 세그멘트의 집합을 저장함으로써 제2 RAID 레벨을 구현하도록 추가로 실행가능한 것인 컴퓨터 판독가능 매체.
  13. 제12항에 있어서, 볼륨의 각 세그멘트는 복수의 데이터 뱅크 중 하나에 대응하고, 각 세그멘트는 복수의 데이터 뱅크의 순열에 따라서 복수의 데이터 뱅크 중 하나에 할당되며, 각 용장 세그멘트는 용장 세그멘트와 관련된 볼륨의 임의의 세그멘트에 대응하는 복수의 각 데이터 뱅크와는 다른 복수의 데이터 뱅크 중의 하나에 할당되는 것인 컴퓨터 판독가능 매체.
  14. 제13항에 있어서, 컴퓨터 명령어는 제1 명령이 쓰기 명령인지를 결정하고 제1 명령이 쓰기 명령이면 복수의 데이터 뱅크 중에서 제2 데이터 뱅크를 결정하도록 추가로 실행가능한 것이며, 제2 데이터 뱅크는 제1 세그멘트와 관련된 제1 용장 세그멘트에 대응하고, 제2 데이터 뱅크가 명령을 수신한 데이터 뱅크이면 제1 용장 세그멘트와 관련하여 제1 명령을 실행하고, 제2 데이터 뱅크가 명령을 수신한 데이터 뱅크가 아니면 제1 명령을 제2 데이터 뱅크로 보내는 것인 컴퓨터 판독가능 매체.
  15. 제14항에 있어서, 제1 데이터 뱅크를 결정하는 것과 제2 데이터 뱅크를 결정하는 것은 데이터 기억부 내의 글로벌 테이블에 액세스하는 것을 포함하고, 글로벌 테이블은 데이터 뱅크의 순열과 RAID 레벨을 포함한 것인 컴퓨터 판독가능 매체.
KR1020117012194A 2008-10-28 2009-06-25 Raid 시스템에서 다중 장애에 대한 보호를 제공하는 방법 및 시스템 KR20110089316A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10901408P 2008-10-28 2008-10-28
US61/109,014 2008-10-28

Publications (1)

Publication Number Publication Date
KR20110089316A true KR20110089316A (ko) 2011-08-05

Family

ID=42118601

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020117012194A KR20110089316A (ko) 2008-10-28 2009-06-25 Raid 시스템에서 다중 장애에 대한 보호를 제공하는 방법 및 시스템

Country Status (6)

Country Link
US (2) US8176247B2 (ko)
EP (1) EP2356570A1 (ko)
KR (1) KR20110089316A (ko)
CN (1) CN102265265A (ko)
IL (1) IL212609A0 (ko)
WO (1) WO2010051078A1 (ko)

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8046629B1 (en) 2006-07-24 2011-10-25 Marvell World Trade Ltd. File server for redundant array of independent disks (RAID) system
US7634686B2 (en) * 2006-07-24 2009-12-15 Marvell World Trade Ltd. File server for redundant array of independent disks (RAID) system
WO2009149386A1 (en) 2008-06-06 2009-12-10 Pivot3 Method and system for distributed raid implementation
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
US8484536B1 (en) * 2010-03-26 2013-07-09 Google Inc. Techniques for data storage, access, and maintenance
US8719675B1 (en) 2010-06-16 2014-05-06 Google Inc. Orthogonal coding for data storage, access, and maintenance
US8639907B2 (en) * 2010-07-22 2014-01-28 Netgear, Inc. Method and apparatus for dynamically adjusting memory capacity in accordance with data storage
US8661135B2 (en) * 2010-12-07 2014-02-25 Nec Laboratories America, Inc. System and method for providing a platform as a service (PaaS) with a materialized shared space
US8527699B2 (en) 2011-04-25 2013-09-03 Pivot3, Inc. Method and system for distributed RAID implementation
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
CN103019614B (zh) 2011-09-23 2015-11-25 阿里巴巴集团控股有限公司 分布式存储系统管理装置及方法
US8615698B1 (en) 2011-09-28 2013-12-24 Google Inc. Skewed orthogonal coding techniques
US8856619B1 (en) 2012-03-09 2014-10-07 Google Inc. Storing data across groups of storage nodes
CN103631535B (zh) * 2013-11-20 2016-08-17 华为技术有限公司 一种实现存储池内空间分配的方法及装置
US10565074B2 (en) 2014-08-29 2020-02-18 Cynny Space Srl Systems and methods to distribute computing tasks among multiple computers
US10785294B1 (en) * 2015-07-30 2020-09-22 EMC IP Holding Company LLC Methods, systems, and computer readable mediums for managing fault tolerance of hardware storage nodes
US9858148B2 (en) 2015-11-22 2018-01-02 International Business Machines Corporation Raid data loss prevention
US9880903B2 (en) 2015-11-22 2018-01-30 International Business Machines Corporation Intelligent stress testing and raid rebuild to prevent data loss
US10372334B2 (en) 2016-02-11 2019-08-06 International Business Machines Corporation Reclaiming free space in a storage system
US10146652B2 (en) 2016-02-11 2018-12-04 International Business Machines Corporation Resilient distributed storage system
CN107632944B (zh) * 2017-09-22 2021-06-18 郑州云海信息技术有限公司 一种读取数据的方法及装置
US11023322B2 (en) * 2019-09-27 2021-06-01 Dell Products L.P. Raid storage-device-assisted parity update data storage system
US11023321B2 (en) * 2019-09-27 2021-06-01 Dell Products L.P. Raid storage-device-assisted deferred parity data update system
US10936420B1 (en) * 2019-09-27 2021-03-02 Dell Products L.P. RAID storage-device-assisted deferred Q data determination system
US11437119B2 (en) 2020-08-19 2022-09-06 Micron Technology, Inc. Error read flow component
US11734094B2 (en) 2020-08-19 2023-08-22 Micron Technology, Inc. Memory component quality statistics

Family Cites Families (46)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
US20020069317A1 (en) 2000-12-01 2002-06-06 Chow Yan Chiew E-RAID system 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
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
CN1692356B (zh) 2002-11-14 2014-06-04 易斯龙系统公司 用于对现存文件重新条带化的方法
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
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
CN100518061C (zh) 2004-09-07 2009-07-22 北京邦诺存储科技有限公司 写一次读多次磁盘存储系统和设计方法
US7389393B1 (en) 2004-10-21 2008-06-17 Symantec Operating Corporation System and method for write forwarding in a storage environment employing distributed virtualization
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 株式会社日立製作所 ストレージ管理システム、ストレージ管理サーバ、データ再配置制御方法およびデータ再配置制御プログラム
US7904649B2 (en) 2005-04-29 2011-03-08 Netapp, Inc. System and method for restriping data across a plurality of volumes
US7617370B2 (en) 2005-04-29 2009-11-10 Netapp, Inc. Data allocation within a storage system architecture
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
JP5124103B2 (ja) 2006-05-16 2013-01-23 株式会社日立製作所 計算機システム
US7886111B2 (en) 2006-05-24 2011-02-08 Compellent Technologies System and method for raid management, reallocation, and restriping
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
WO2008070803A1 (en) 2006-12-06 2008-06-12 Fusion Multisystems, Inc. (Dba Fusion-Io) Apparatus, system, and method for managing data from a requesting device with an empty data token directive
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 日本電気株式会社 仮想装置構成システム、及びその方法
US20090172335A1 (en) 2007-12-31 2009-07-02 Anand Krishnamurthi Kulkarni Flash devices with raid
WO2009149386A1 (en) 2008-06-06 2009-12-10 Pivot3 Method and system for distributed raid implementation
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
US8527699B2 (en) 2011-04-25 2013-09-03 Pivot3, Inc. Method and system for distributed RAID implementation

Also Published As

Publication number Publication date
WO2010051078A1 (en) 2010-05-06
US8176247B2 (en) 2012-05-08
CN102265265A (zh) 2011-11-30
EP2356570A1 (en) 2011-08-17
US8386709B2 (en) 2013-02-26
US20120131383A1 (en) 2012-05-24
US20100106906A1 (en) 2010-04-29
IL212609A0 (en) 2011-07-31

Similar Documents

Publication Publication Date Title
KR20110089316A (ko) Raid 시스템에서 다중 장애에 대한 보호를 제공하는 방법 및 시스템
US9535632B2 (en) Method and system for distributed raid implementation
US20120271998A1 (en) Method and system for distributed raid implementation

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right