KR20150121703A - 데이터를 저장 및 검색하기 위한 방법 및 시스템 - Google Patents

데이터를 저장 및 검색하기 위한 방법 및 시스템 Download PDF

Info

Publication number
KR20150121703A
KR20150121703A KR1020157023746A KR20157023746A KR20150121703A KR 20150121703 A KR20150121703 A KR 20150121703A KR 1020157023746 A KR1020157023746 A KR 1020157023746A KR 20157023746 A KR20157023746 A KR 20157023746A KR 20150121703 A KR20150121703 A KR 20150121703A
Authority
KR
South Korea
Prior art keywords
file
unit
bit
data
sub
Prior art date
Application number
KR1020157023746A
Other languages
English (en)
Inventor
브라이언 이그노미레로
Original Assignee
심볼릭 아이오 코퍼레이션
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 claimed from US13/756,921 external-priority patent/US20140223118A1/en
Priority claimed from US13/797,093 external-priority patent/US10133636B2/en
Application filed by 심볼릭 아이오 코퍼레이션 filed Critical 심볼릭 아이오 코퍼레이션
Publication of KR20150121703A publication Critical patent/KR20150121703A/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0643Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • H03M7/3088Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing the use of a dictionary, e.g. LZ78
    • 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/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1448Management of the data involved in backup or backup restore
    • G06F11/1453Management of the data involved in backup or backup restore using de-duplication of the data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9014Indexing; Data structures therefor; Storage structures hash tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • G06F21/6218Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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 or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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 or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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 or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • G06F3/0641De-duplication techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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 or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0661Format or protocol conversion arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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 or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0688Non-volatile semiconductor memory arrays
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • H03M7/3091Data deduplication
    • H03M7/3093Data deduplication using fixed length segments
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3236Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
    • H04L9/3239Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions involving non-keyed hash functions, e.g. modification detection codes [MDCs], MD5, SHA or RIPEMD
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/11File system administration, e.g. details of archiving or snapshots
    • G06F16/113Details of archiving
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/34Encoding or coding, e.g. Huffman coding or error correction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/91Entropy coding, e.g. variable length coding [VLC] or arithmetic coding

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Databases & Information Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Data Mining & Analysis (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Computer Hardware Design (AREA)
  • Power Engineering (AREA)
  • Quality & Reliability (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Communication Control (AREA)

Abstract

본 발명의 기술의 사용을 통해, 데이터를 효율적으로 저장하고 검색할 수 있다. 다양한 실시예에 있어서는, 데이터를 코딩하고 원래 데이터보다 더 작은 사이즈인 코딩된 데이터를 저장함으로써 이들 효율을 실현할 수 있다.

Description

데이터를 저장 및 검색하기 위한 방법 및 시스템{METHODS AND SYSTEMS FOR STORING AND RETRIEVING DATA}
본 발명은 데이터 저장 및 검색 분야에 관한 것이다.
21세기는 사람들 및 회사들이 발생시키고 저장하는 디지털식 정보의 양의 기하급수적 성장을 목격해 왔다. 이러한 정보는 전형적으로는, 사이즈가 마이크로미터-이하이고 개개의 2진 조각의 정보를 저장할 수 있는 작은 영역을 포함하고 있는, 디스크와 같은 자기 표면 상에 저장되는 전자 데이터로 이루어져 있다.
여러 개체가 발생시키는 다량의 데이터 때문에, 데이터 저장 산업은 네트워크-기반 저장 시스템에 맞춰졌다. 이들 유형의 저장 시스템은 하나 이상의 개체를 대신하여 데이터를 저장 및 검색하도록 구성되는 처리 시스템을 형성하거나 그 일부분인 적어도 하나의 저장 서버를 포함할 수 있다. 데이터는, 블록 및/또는 파일과 같은, 저장 오브젝트로서 저장 및 검색될 수 있다.
저장을 위해 사용되는 하나의 시스템은 NAS(Network Attached Storage) 시스템이다. NAS의 맥락에 있어서, 저장 서버는 데이터로의 파일-레벨 액세스를 저장 및 관리하도록 하나 이상의 클라이언트를 대신하여 동작한다. 파일은, 자기 또는 광학 디스크 또는 테이프와 같은, 하나 이상의 대용량 저장 디바이스 어레이를 포함하는 저장 시스템에 저장될 수 있다. 부가적으로, 이러한 데이터 저장 모델은 RAID(Redundant Array of Independent Disks) 기술을 채용할 수 있다.
저장을 위해 사용되는 다른 시스템은 SAN(Storage Area Network)이다. SAN 시스템에 있어서, 전형적으로 저장 서버는, 저장된 데이터로의 파일-레벨 액세스보다는, 블록-레벨 액세스를 클라이언트에 제공한다. 그렇지만, 일부 저장 서버는 클라이언트에 파일-레벨 액세스도 블록-레벨 액세스도 제공할 수 있다.
NAS를 사용하든지 SAN을 사용하든지 무관하게, 데이터를 발생시키는 모든 산업은 그 데이터를 저장 및 검색하는 비용을 고려하여야 한다. 그래서, 데이터를 경제적으로 저장 및 검색하기 위한 새로운 기술에 대한 필요성이 있다.
본 발명은 데이터를 저장 및 검색하는 효율을 개선하기 위한 방법, 시스템 및 컴퓨터 프로그램 제품을 제공한다. 본 발명의 다양한 실시예를 사용함으로써, 선택사항으로서는 변환 또는 인코딩된 데이터를 효율적으로 저장하고 액세스할 수 있다. 부가적으로 또는 대안으로, 본 발명의 다양한 실시예는 효율적 데이터 저장 및 데이터 액세스를 용이하게 하는 중개자를 사용한다.
본 발명의 다양한 실시예는 원시 데이터 및/또는 원시 데이터로부터의 별개 메타데이터와 작동한다. 결과적으로, 본 발명과 연관하여 저장 및/또는 검색될 수 있는 파일 유형에 기반한 제한은 없다. 사용될 수 있는 파일 유형의 예는, 국한되는 것은 아니지만, JPEG, PDF, WORD 문서, MPEG 및 TXT 문서를 포함한다. 본 발명의 다양한 실시예를 통해, 데이터를 변환하고 그리고/또는 변환되거나 전환된 데이터가 저장되는 물리적 디바이스를 변경할 수 있다. 이들 실시예는 실행될 때 본 발명의 방법 또는 프로세스의 단계의 수행을 야기하는 컴퓨터 프로그램 제품에 동작가능하게 결합되거나 포함하는 컴퓨터를 채용하는 자동화된 프로세스를 통해 수행될 수 있다. 이들 방법 또는 프로세스는, 예를 들어, 컴퓨터 알고리즘 또는 스크립트에 매립되거나 포함하고 선택사항으로서는 본 발명의 시스템에 의해 수행될 수 있다.
제1 실시예에 의하면, 본 발명은 기록 매체 상에 데이터를 저장하기 위한 방법에 관한 것으로서: (i) 복수의 디지털 2진 신호를 수신하는 단계로서, 디지털 2진 신호는 복수의 청크렛(chunklet)으로 조직되고, 각각의 청크렛은 N 비트 길이이되, N은 1보다 큰 정수이고 청크렛은 순서를 갖는 상기 수신하는 단계; (ii) 각각의 청크렛을 균일한 사이즈의 서브유닛으로 분할하고 복수의 마커의 세트를 형성하도록 X개의 마커의 세트로부터 각각의 서브유닛에 마커를 배정하는 단계로서, X는 서브유닛 내 비트의 여러 다른 조합의 수와 같고, 똑같은 서브유닛에는 동일한 마커가 배정되고 적어도 하나의 마커는 서브유닛의 사이즈보다 작은 상기 배정하는 단계; 및 (iii) 청크렛의 순서에 대응하는 순서로든 청크렛의 순서의 재생성을 허용하는 다른 구성으로든 비-일시적 기록 매체 상에 복수의 마커의 세트를 저장하는 단계를 포함한다.
제2 실시예에 의하면, 본 발명은 기록 매체로부터 데이터를 검색하기 위한 방법에 관한 것으로서: (i) 기록 매체에 액세스하는 단계로서, 기록 매체는 복수의 마커를 순서대로 저장하는 상기 액세스하는 단계; (ii) 복수의 마커를 청크렛의 세트로 번역하는 단계로서, 각각의 청크렛은 N 비트 길이이고, N은 1보다 큰 정수이고 청크렛은 복수의 마커의 순서에 대응하는 순서를 갖고 번역하는 단계는 비트 마커 테이블에 액세스함으로써 성취되되, 비트 마커 테이블 내에서 각각의 고유 마커는 고유 비트 스트링에 대응하는 것으로 식별되는 상기 번역하는 단계; 및 (iii) 청크렛의 세트를 포함하는 출력을 발생시키는 단계를 포함한다. 마커는 청크렛의 순서와 동일한 순서로 저장될 수도 있고 그렇지 않을 수도 있지만, 그것들이 저장되는 순서에 무관하게, 그것들이 유도된 어느 파일 및 청크렛의 순서를 재생성할 수 있다.
제3 실시예에 의하면, 본 발명은 기록 매체 상에 데이터를 저장하기 위한 방법에 관한 것으로서: (i) 복수의 디지털 2진 신호를 수신하는 단계로서, 디지털 2진 신호는 청크렛으로 조직되되, 각각의 청크렛은 N 비트 길이이고, 각각의 청크렛은 제1 단부 및 제2 단부를 갖고, N은 1보다 큰 정수이고, 청크렛은 순서를 갖는 상기 수신하는 단계; (ii) 각각의 청크렛을 복수의 서브유닛으로 분할하는 단계로서, 각각의 서브유닛은 A 비트 길이인 상기 분할하는 단계; (iii) 제2 단부에서의 비트가 0 값을 갖는지 결정하도록 각각의 서브유닛을 분석하고, 제2 단부에서의 비트가 0 값을 가지면, 제2 단부에서의 비트 및 0 값을 갖는 모든 비트를 제거하고 제2 단부에서의 상기 비트와 인접하는 비트 스트링을 형성하고, 그로써 제2 단부에서 0을 갖는 어느 청크렛에 대해 개정된 청크렛을 형성하는 단계; 및 (iv) 비-일시적 기록 매체 상에, A 비트 길이이고 그 제2 단부에 1을 갖는 각각의 서브유닛 및 각각의 개정된 서브유닛을 청크렛의 복원을 순서대로 허용하는 방식으로 저장하는 단계를 포함한다.
제4 실시예에 의하면, 본 발명은 기록 매체 상에 데이터를 저장하기 위한 방법을 제공하며: (i) 복수의 디지털 2진 신호를 수신하는 단계로서, 디지털 2진 신호는 청크렛으로 조직되되, 각각의 청크렛은 N 비트 길이이고, 각각의 청크렛은 제1 단부 및 제2 단부를 갖고, N은 1보다 큰 정수이고, 청크렛은 순서를 갖는 상기 수신하는 단계; (ii) 제1 단부에서의 비트가 0 값을 갖는지 결정하도록 각각의 청크렛을 분석하고, 제1 단부에서의 비트가 0 값을 가지면, 제1 단부에서의 비트 및 0 값을 갖는 모든 비트를 제거하고 제1 단부에서의 비트와 인접하는 비트 스트링을 형성하고, 그로써 제1 단부에서 0을 갖는 어느 청크렛에 대해 제1 개정된 청크렛을 형성하는 단계; 및 (iii) 제2 단부에서의 비트가 0 값을 갖는지 결정하도록 각각의 청크렛을 분석하고, 제2 단부에서의 비트가 0 값을 가지면, 제2 단부에서의 비트 및 0 값을 갖는 모든 비트를 제거하고 제2 단부에서의 비트와 인접하는 비트 스트링을 형성하고, 그로써 제2 단부에서 0을 갖는 어느 청크렛에 대해 제2 개정된 청크렛을 형성하는 단계; 및 (iv) 각각의 청크렛에 대해 (a) 제1 개정된 청크렛과 제2 개정된 청크렛의 사이즈가 동일하면, 제1 개정된 청크렛 또는 제2 개정된 청크렛을 저장하고, (b) 제1 개정된 청크렛이 제2 개정된 청크렛보다 작으면, 제1 개정된 청크렛을 저장하고, (c) 제2 개정된 청크렛이 제1 개정된 청크렛보다 작으면, 제2 개정된 청크렛을 저장하고, (d) 개정된 청크렛이 없으면, 청크렛을 저장하고, (e) 제1 개정된 청크렛이 없지만 제2 개정된 청크렛이 있으면, 제2 개정된 청크렛을 저장하고, (f) 제2 개정된 청크렛이 없지만 제1 개정된 청크렛이 있으면, 제1 개정된 청크렛을 저장하는 단계를 포함하되, 저장되는 각각의 개정된 청크렛은 하나 이상의 비트가 제1 단부 또는 제2 단부로부터 제거되었는지 나타내는 정보와 저장된다. 하나 이상의 비트가 제1 단부 또는 제2 단부로부터 제거되었는지 나타내는 정보는, 예를 들어, 서브유닛의 고유도의 형태일 수 있다. 어느 비교에서 비교될 제1 및 제2 개정된 청크렛의 각각을 발생시킬 때, 바람직하게는 어느 하나의 단부로부터든 0이 제거되었지만, 양단으로부터는 아니다.
제5 실시예에 의하면, 본 발명은 기록 매체 상에 데이터를 저장하기 위한 방법을 제공하며: (i) 복수의 디지털 2진 신호를 수신하는 단계로서, 디지털 2진 신호는 청크렛으로 조직되되, 각각의 청크렛은 N 비트 길이이고, 각각의 청크렛은 제1 단부 및 제2 단부를 갖고, N은 1보다 큰 정수이고, 청크렛은 순서를 갖는 상기 수신하는 단계; (ii) 각각의 청크렛을 복수의 서브유닛으로 분할하는 단계로서, 각각의 서브유닛은 A 비트 길이인 상기 분할하는 단계; (iii) 제1 단부에서의 비트가 0 값을 갖는지 결정하도록 각각의 서브유닛을 분석하고, 제1 단부에서의 비트가 0 값을 가지면, 제1 단부에서의 비트 및 0 값을 갖는 모든 비트를 제거하고 제1 단부에서의 비트와 인접하는 비트 스트링을 형성하고, 그로써 제1 단부에서 0을 갖는 어느 서브유닛에 대해 제1 개정된 서브유닛을 형성하는 단계; 및 (iv) 제2 단부에서의 비트가 0 값을 갖는지 결정하도록 각각의 서브유닛을 분석하고, 제2 단부에서의 비트가 0 값을 가지면, 제2 단부에서의 비트 및 0 값을 갖는 모든 비트를 제거하고 제2 단부에서의 비트와 인접하는 비트 스트링을 형성하고, 그로써 제2 단부에서 0을 갖는 어느 서브유닛에 대해 제2 개정된 서브유닛을 형성하는 단계; 및 (v) 각각의 서브유닛에 대해 (a) 제1 개정된 서브유닛과 제2 개정된 서브유닛의 사이즈가 동일하면, 제1 개정된 서브유닛 또는 제2 개정된 서브유닛을 저장하고, (b) 제1 개정된 서브유닛이 제2 개정된 서브유닛보다 작으면, 제1 개정된 서브유닛을 저장하고, (c) 제2 개정된 서브유닛이 제1 개정된 서브유닛보다 작으면, 제2 개정된 서브유닛을 저장하고, (d) 개정된 서브유닛이 없으면, 서브유닛을 저장하고, (e) 제1 개정된 서브유닛이 없지만 제2 개정된 서브유닛이 있으면, 제2 개정된 서브유닛을 저장하고, (f) 제2 개정된 서브유닛이 없지만 제1 개정된 서브유닛이 있으면, 제1 개정된 서브유닛을 저장하는 단계를 포함하되, 저장되는 각각의 개정된 서브유닛은 하나 이상의 비트가 제1 단부 또는 제2 단부로부터 제거되었는지 나타내는 정보와 저장된다. 하나 이상의 비트가 제1 단부 또는 제2 단부로부터 제거되었는지 나타내는 정보는, 예를 들어, 서브유닛의 고유도의 형태일 수 있다.
제6 실시예에 의하면, 본 발명은 기록 매체로부터 데이터를 검색하기 위한 방법을 제공하며: (i) 기록 매체에 액세스하는 단계로서, 기록 매체는 복수의 위치 내 복수의 데이터 유닛을 저장하되, 각각의 데이터 유닛은 복수의 비트를 포함하고 있고 데이터 유닛의 최대 사이즈는 N 비트이고, 적어도 하나의 데이터 유닛은 N보다 적은 비트를 포함하고 있고, 데이터 유닛은 순서를 갖는 상기 액세스하는 단계; (ii) 데이터 유닛을 검색하고 데이터 유닛에 대응하는 청크렛의 세트를 발생시키도록 N보다 적은 비트 길이인 어느 데이터 유닛의 일단에 하나 이상의 비트를 부가하는 단계로서, 각각의 청크렛은 동일한 비트 수를 포함하고 있는 상기 부가하는 단계; 및 (iii) 데이터 유닛의 순서에 대응하는 순서로 청크렛의 세트를 포함하는 출력을 발생시키는 단계를 포함한다.
제7 실시예에 의하면, 본 발명은 전자 데이터를 저장하기 위한 방법에 관한 것으로서, 상기 방법은: (i) 파라미터의 세트를 수신하는 단계로서, 파라미터는 파일 시스템 정보, 부팅가능성 정보 및 파티션 정보 중 하나 이상을 포함하는 상기 수신하는 단계; (ii) 메타데이터를 수신하는 단계; (iii) 파일 이름을 각각 갖는 하나 이상의 파일을 수신하는 단계; (iv) 파라미터 및 메타데이터를 중개자 상에 저장하는 단계; (v) 소정 위치에 비-캐시 매체 상에 상기 파일의 각각을 저장하는 단계; 및 (vi) 비-캐시 매체 상의 소정 위치와 각각의 파일 이름의 상관을 중개자 상에 저장하는 단계를 포함한다. 본 발명의 중개자는 다음 목적 중 하나 이상을 제공할 수 있다: (1) 데이터를 인코딩하기 위한 프로토콜을 저장하는 것; (2) 기록 매체 상에 물리적 공간을 할당하는 것; (3) 호스트 개시자의 디스크 기하체계에 대한 중심 포인트로서 역할하는 것; (4) 보안을 부가하는 것; (5) 시스템 내장품이 하나 또는 2개의 예약(R1 및 R2)과 상호작용, 판독 및 로깅할 수 있게 하는 것; (6) 스냅샷을 찍도록(즉, 특정 시간에 저장된 데이터를 프리징하도록) 그리고/또는 디스크를 클로닝하도록 새로운 방식에 대한 프레임워크를 제공하는 것; 및 (7) 메타데이터를 제공하는 것. 이들 특징 중 전부는 아니더라도 하나 이상의 실현은 데이터를 저장하고, 무단 액세스로부터 데이터를 보호하고 그리고/또는 데이터를 검색하기 위한 방법의 효율에 기여할 수 있다.
제8 실시예에 의하면, 데이터를 백업하기 위한 방법에 관하 것으로서, 상기 방법은: (i) 제1 중개자 상에서, 복수의 파일 이름을 데이터 파일의 복수의 위치와 상관시키는 단계로서, 데이터 파일의 위치는 제1 비-캐시 매체 상의 위치에 대응하고 제1 중개자는 특정 파일 이름을 식별하는 사용자가 특정 파일 이름에 대응하는 데이터 파일을 검색할 수 있게 하도록 구성되는 상기 상관시키는 단계; (ii) 복수의 데이터 파일을 제2 비-캐시 매체에 복사하는 단계; (iii) 제2 중개자를 발생시키는 단계로서, 제2 중개자는 시간 T1에서 제1 중개자의 사본이고 제2 중개자 내에서 제2 비-캐시 매체 상의 복수의 데이터 파일의 위치는 파일 이름과 상관되는 상기 발생시키는 단계; (iv) 데이터 파일에 대한 개정을 저장하라는 명령어를 수신하는 단계; 및 (v) T1 후에 있는 시간 T2에서, 제1 비-캐시 매체 상에 데이터 파일에 대한 개정을 저장하는 단계를 포함한다. 바람직하게는 개정은 제2 비-캐시 매체 상에 대응하는 데이터 파일 내 저장되지 않는다.
제9 실시예에 의하면, 본 발명은 데이터 저장 및 검색 시스템을 제공하며: (i) 비-캐시 데이터 저장 매체; (ii) 중개자로서, 중개자는 비-캐시 데이터 저장 매체로부터 원격에 저장되고, 중개자는: (a) 제1 트랙 세트; (b) 제2 트랙 세트; (c) 제3 트랙 세트; 및 (d) 제4 트랙 세트를 포함하는 상기 중개자; 및 (ii) 매니저로서, 매니저는: (a) 파일 시스템 정보, 부팅가능성 정보 및 파티션 정보 중 하나 이상을 포함하는 데이터를 제1 트랙 세트 내 저장하고; (b) 메타데이터를 제3 트랙 세트 내 저장하고; (c) 하나 이상의 파일로서, 파일 시스템 정보, 부팅가능성 정보 및 파티션 정보 중 어느 것도 없이 비-캐시 매체 상에 저장되는 하나 이상의 파일을 비-캐시 매체 상에 저장하고; (d) 비-캐시 매체 내 각각의 파일의 위치를 제4 트랙 세트 내 저장하고; 그리고 (e) 파일에 대한 호스트 이름과 비-캐시 매체 내 각각의 파일의 위치의 상관을 저장하도록 구성되는 상기 매니저를 포함한다.
제10 실시예에 의하면, 본 발명은 비-캐시 기록 매체 상에 데이터를 저장하기 위한 방법에 관한 것으로서: (i) (예를 들어 I/O 프로토콜을 사용하여) N 바이트의 I/O 스트림을 수신하는 단계; (ii) N 바이트를 X 바이트의 단편화된 유닛으로 단편화하는 단계; (iii) X 바이트의 각각의 단편화된 유닛에 대한 발생된 해시 함수 값을 형성하도록 X 바이트의 각각의 단편화된 유닛에 (값 알고리즘인) 암호 해시 함수를 적용하는 단계; (iv) 상관 파일로서, X 바이트의 복수의 저장된 시퀀스의 각각과 Y 비트의 저장된 해시 함수 값을 연관시키는 상기 상관 파일에 액세스하고 그리고 (a) X 바이트의 단편화된 유닛에 대한 발생된 해시 함수 값이 상관 파일 내에 있으면, 비-캐시 기록 매체 상의 저장을 위해 Y 비트의 저장된 해시 함수 값을 사용하고; 그리고 (b) X 바이트의 단편화된 유닛에 대한 발생된 해시 함수 값이 상관 파일 내에 있지 않으면, 그때는 상관 파일 내 X 바이트의 단편화된 유닛과 Y 비트의 발생된 해시 함수 값을 저장하고 비-캐시 기록 매체 상의 저장을 위해 발생된 해시 함수 값을 사용하는 단계를 포함한다.
제11 실시예에 의하면, 본 발명은 비-캐시 기록 매체 상에 데이터를 저장하기 위한 방법에 관한 것으로서: (i) N 바이트의 I/O 스트림을 수신하는 단계; (ii) N 바이트를 X 바이트의 단편화된 유닛으로 단편화하는 단계; (iii) 암호 해시 함수 값을 X 바이트의 각각의 단편화된 유닛과 연관시키는 단계를 포함하되, 연관시키는 단계는 상관 파일로서 X 바이트의 복수의 저장된 시퀀스의 각각과 Y 비트의 저장된 해시 함수 값을 연관시키는 상기 상관 파일에 액세스하고 그리고 (a) X 바이트의 단편화된 유닛의 시퀀스가 상관 파일 내에 있으면, 비-캐시 기록 매체 상의 저장을 위해 Y 비트의 저장된 해시 함수 값을 사용하고; 그리고 (b) X 바이트의 단편화된 유닛의 시퀀스가 상관 파일 내에 있지 않으면, 그때는 상관 파일 내 X 바이트의 단편화된 유닛과 Y 비트의 새로운 발생된 해시 함수 값을 저장하고 비-캐시 기록 매체 상의 저장을 위해 Y 비트의 새로운 발생된 해시 함수 값을 사용하는 단계를 포함한다.
제12 실시예에 의하면, 본 발명은 비-캐시 기록 매체 상에 데이터를 저장하기 위한 방법에 관한 것으로서: (i) N 바이트의 I/O 스트림을 수신하는 단계; (ii) N 바이트의 각각의 유닛에 대한 발생된 해시 함수 값을 형성하도록 N 바이트의 각각의 유닛에 암호 해시 함수를 적용하는 단계; (iii) 상관 파일로서, N 바이트의 복수의 저장된 시퀀스의 각각과 Y 비트의 저장된 해시 함수 값을 연관시키는 상기 상관 파일에 액세스하고 그리고 (a) N 바이트의 유닛에 대한 발생된 해시 함수 값이 상관 파일 내에 있으면, 비-캐시 기록 매체 상의 저장을 위해 Y 비트의 저장된 해시 함수 값을 사용하고; 그리고 (b) N 바이트의 유닛에 대한 발생된 해시 함수 값이 상관 파일 내에 있지 않으면, 그때는 상관 파일 내 N 바이트의 유닛과 Y 비트의 발생된 해시 함수 값을 저장하고 비-캐시 기록 매체 상의 저장을 위해 발생된 해시 함수 값을 사용하는 단계를 포함한다.
본 발명의 다양한 방법은, 예를 들어, 전자 데이터를 저장하도록 저장 시스템을 구성하기 위한 다음의 방법과 연관하여 사용될 수 있다: (i) 파일 시스템 정보, 부팅가능성 정보 및 파티션 정보 중 전부는 아니더라도 하나 이상을 포함하는 파라미터의 세트를 수신하는 것; (ii) 메타데이터를 수신하는 것; 및 (iii) 파라미터 및 메타데이터를 중개자 상에 저장하는 것. 저장 시스템의 구성 후에, 시스템은 파일 이름을 각각 갖는 하나 이상의 파일을 수신하고; (선택사항으로서는 번역을 위해 전술한 방법 중 하나를 통해 처리된 바와 같은) 파일의 각각을 소정 위치에서 비-캐시 매체 상에 저장하고; 그리고 비-캐시 매체 상의 위치와 각각의 파일 이름의 상관을 중개자 상에 저장하도록 준비될 수 있다.
본 발명의 소정 방법을 채용할 때, 명령어는, 데이터 처리 장치가 다음의 연산을 수행하게 야기하도록 동작가능하게, 비-일시적 컴퓨터-판독가능한 매체 상에 인코딩되는 컴퓨터 프로그램 제품 상에 저장될 수 있다: (a) I/O 프로토콜을 통해 N 바이트의 I/O 스트림을, 서버로부터, 수신하는 것; (b) N 바이트의 각각의 유닛에 대해 또는 N 바이트의 복수의 단편화된 유닛에 대해 해시 함수 값을 획득하는 것; 및 (c) 복수의 해시 값 또는 복수의 변환된 해시 값 중 어느 하나를 포함하는 데이터가 저장되게 야기하는 것. 해시 값을 변환된 해시 값으로 변환함으로써, 저장된 파일 내 정보로의 무단 액세스에 대항하여 보호가 고조될 수 있다. 선택사항으로서, 컴퓨터 프로그램 제품은, N 바이트의 여러 다른 유닛 또는 N 바이트의 여러 다른 단편화된 유닛에 동일한 해시 함수 값이 배정되는 것을 식별할 수 있게 하고 상충하는 해시 함수 값의 각각에 대응하는 서로 다른 데이터가 저장되게 야기하는 상충 해결 모듈을 더 포함한다. 컴퓨터 프로그램 제품은, 실행될 때, 전술한 특징의 개시 및 자동 실행을 야기할 수 있다. 이들 명령어는 하나의 모듈 내 또는 서로 동작가능하게 결합되는 복수의 별개의 모듈 내 저장될 수 있다.
부가적으로, 본 발명의 다양한 실시예는 또한 시스템 상에 구현될 수 있다. 본 발명의 시스템의 일례는: (a) (영속적 또는 비-일시적 저장 디바이스일 수 있는) 비-캐시 저장 매체, 및 (b) 비-캐시 저장 매체와 상호작용하도록 동작가능한 하나 이상의 프로세서를 포함한다. 선택사항으로서, 시스템은 사용자가 하나 이상의 프로세서와 상호작용 가능하게 할 수 있는 하나 이상의 사용자 인터페이스(예를 들어, 그래픽 사용자 인터페이스)를 더 포함한다. 하나 이상의 프로세서는, 예를 들어 비-일시적 매체 내 저장되는 컴퓨터 프로그램 제품 상에 저장될 수 있는, 본 발명의 방법 중 하나 이상을 수행하도록 더 동작가능하다.
일부 실시예에 있어서, 시스템은: (i) 중개자로서, 비-캐시 데이터 저장 매체로부터 원격에 저장되고 (a) 제1 트랙 세트; (b) 제2 트랙 세트; (c) 제3 트랙 세트; 및 (d) 제4 트랙 세트를 포함하는 상기 중개자; (ii) 비-캐시 매체; 및 (iii) 매니저를 포함하되, 매니저는: (a) 파일 시스템 정보, 부팅가능성 정보 및 파티션 정보 중 하나 이상을 포함하는 데이터의 제1 트랙 세트 내 저장을 야기하고; (b) 메타데이터의 제3 트랙 세트 내 저장을 야기하고; (c) 하나 이상의 파일로서, 파일 시스템 정보, 부팅가능성 정보 및 파티션 정보 중 어느 것도 없이 비-캐시 매체 상에 저장되는 상기 하나 이상의 파일의 비-캐시 매체 상의 저장을 야기하고; (d) 비-캐시 매체 내 각각의 파일의 위치의 제4 트랙 세트 내 저장을 야기하고; 그리고 (e) 파일에 대한 주소(들) 및/또는 호스트 이름과 비-캐시 매체 내 각각의 파일의 위치의 상관의 저장을 야기하도록 구성된다.
본 발명의 다양한 실시예를 통해, 데이터를 저장 및 검색하는 효율을 증가시킬 수 있다. 효율 증가는 흔히 사용되는 방법에서 사용되는 것보다 더 적은 저장 공간을 사용하고 정보를 저장하는 활동에 더 적은 시간 및 수고를 투자함으로써 실현될 수 있다. 일부 실시예에 있어서는, 또한 데이터 파일의 무단 검색에 대항하여 보호를 증가시킬 수 있다. 이들 이점은 원격으로든 로컬로든 데이터를 저장할 때 실현될 수 있고, 본 발명의 다양한 실시예는 RAID 기술과 독립적으로 또는 그와 함께 사용될 수 있다.
도 1은 본 발명의 시스템의 개관의 표현도;
도 2는 중개자 및 NCM(non-cache medium)의 표현도;
도 3은 중개자를 사용하여 정보를 저장하기 위한 시스템의 표현도;
도 4는 저장되는 정보를 백업하도록 2개의 중개자를 사용하기 위한 시스템의 표현도;
도 5는 2진 트리의 표현도; 및
도 6은 본 발명의 방법을 표현하는 순서도.
본 발명의 다양한 실시예에 대하여 이제 상세히 언급할 것이며, 그 예가 수반 도면에 예시된다. 이하의 상세한 설명에 있어서는, 수많은 특정 상세가 본 발명의 철저한 이해를 제공하기 위해 제시된다. 그렇지만, 맥락으로부터 내포되거나 달리 나타내지 않는 한, 그 상세는 예로서 의도되며 어떤 식으로도 본 발명의 범위를 한정한다고 여겨져서는 안 된다. 부가적으로, 표제는 독자의 편의를 위해 사용되지만, 본 발명의 실시예 중 어느 것의 범위를 한정하거나 어느 특징이 특정 표제 내 절로 한정된다고 시사하려는 의도는 아니다.
정의
맥락으로부터 내포되거나 달리 서술되지 않는 한, 이하의 용어 및 구절은 아래에 제공되는 의미를 갖는다.
용어 "비트"는 2진 디지트를 지칭한다. 그것은, 0 또는 1 중 어느 하나에 의해 표현될 수 있는, 2개의 값 중 하나를 가질 수 있다.
용어 "블록"은 기결정된 길이를 갖는 데이터의 비트 또는 바이트의 시퀀스를 지칭한다.
구절 "부팅가능성 코드", "부팅가능성 정보" 및 "부팅가능성 특징"은 어느 것에 의해 부팅가능한 상태에 진입할지 그 수단을 제공하고 부트 섹터 상에 저장될 수 있는 정보를 지칭한다. 부트 섹터는, 차례로 부트 프로세스가 저장 디바이스 상으로 또는 그로부터 프로그램을 로딩할 수 있게 하는, 펌웨어에 의해 RAM(랜덤 액세스 메모리) 내 로딩되도록 구성되는 기계 코드를 포함하고 있을 수 있다. 예로서, 마스터 부트 레코드는, 운영 체제 또는 다른 자립형 프로그램을 로딩할 그리고 인보크할 코드를 포함하고 있을 수 있는, 활성 파티션의 위치를 찾아내고 볼륨 부트 레코드를 인보크하는 코드를 포함하고 있을 수 있다.
용어 "바이트"는 8개 비트의 시퀀스를 지칭한다.
용어 "캐시"는 버퍼링의 목적으로 또는 데이터가 더 고속으로 제공되도록 장래 요청을 위해 데이터가 일시적으로 저장되는 위치를 지칭한다. L1 캐시(레벨 1 캐시)는, 예를 들어, 프로세서 코어와 통합되어 있는 정적 메모리를 지칭한다. L1 캐시는 CPU(central processing unit)가 동일한 데이터에 여러 번 액세스하는 경우에 데이터 액세스 속도를 개선하도록 사용될 수 있다. L2 캐시(레벨 2 캐시)는 전형적으로는 L1보다 더 크고, 데이터 파일이 탐색되지만 L1 캐시에서 발견되지 않으면, 검색은 외부 메모리를 살피기 이전에 L2 캐시에 대해 이루어질 수 있다. 일부 실시예에 있어서, L1 캐시는 중앙 처리 장치 내에 있지 않다. 대신에, 그것은 DDR, DIMM 또는 DRAM 내 위치할 수 있다. 부가적으로 또는 대안으로, L2 캐시는 마더보드에 들어가는, PCI 2.0/3.0의 일부분일 수 있다. 그리하여, L1 캐시 및 L2 캐시의 각각은 마더보드의 별개 부분에 있을 수 있다. 사이즈에 관하여, 본 발명의 일부 실시예에 있어서, L1 캐시는 2 기가바이트와 128 테라바이트의 사이 또는 2 기가바이트와 4 테라바이트의 사이에 있고; L2 캐시는 16 기가바이트와 1 페타바이트의 사이 또는 16 기가바이트와 3.2 테라바이트의 사이에 있다. 일부 실시예에 있어서, 본 발명의 방법이 구현될 때, 비트 마커 테이블, 빈도 변환기 또는 해시 값 테이블 중 하나 이상이 L2 캐시에 상주한다.
용어 "청크렛(chunklet)"은 섹터 클러스터에 대응할 수 있는 비트의 세트를 지칭한다. 청크렛의 사이즈는 저장 시스템에 의해 결정되고 청크렛 사이즈를 가질 수 있다. 전통적으로, 청크렛 사이즈는, 하드 디스크 상에 그것들이 나타난 실린더, 헤드 및 섹터를 정의하는 투플에 의해 블록을 어드레싱하는, CHS 스킴에 의해 유도되었다. 더 최근에, 청크렛 사이즈는, 컴퓨터 저장 디바이스 상에 저장되는 데이터 블록의 위치를 특정하기 위한 또 다른 수단이고 논리적 블록 어드레싱(logical block addressing)을 지칭하는, LBA 측정치로부터 유도되었다. 예로서, 청크렛 사이즈는 512B, 1K, 2K, 4K, 8K, 16K, 32K, 64K 또는 1MB일 수 있다. 당업자는 1K = 1024B임을 알고 있다. 청크렛은 호스트로부터 원시 데이터로서 수신될 수 있다.
"파일"은 길이를 갖는 관련 바이트 또는 비트의 집합이다. 파일은 청크렛보다 더 작거나, 청크렛과 동일한 사이즈거나, 청크렛보다 더 클 수 있다.
구절 "파일 이름"은 컴퓨터가 특정 파일을 식별하고 그리고 그 파일을 다른 파일과 구별할 수 있게 하는 표기법 또는 코드를 지칭한다.
구절 "파일 시스템"은 파일 세트를 저장하고, 검색하고 업데이트하도록 사용되는 추상화를 지칭한다. 그리하여, 파일 시스템은 데이터 및 파일의 메타데이터로의 액세스는 물론 데이터를 포함하고 있는 저장 디바이스 상의 이용가능한 공간도 관리하도록 사용되는 툴이다. 일부 파일 시스템은, 예를 들어, 서버 상에 상주할 수 있다. 파일 시스템의 예는 국한되는 것은 아니지만 유닉스 파일 시스템 및 그 연관된 디렉토리 테이블 및 아이노드, 윈도우즈 FAT16 및 FAT32 파일 시스템(FAT은 파일 할당 테이블을 지칭함), 마스터 파일 테이블에 기반하는 윈도우즈 NTFS, 및 HFS 또는 HFS 플러스를 사용하는 애플 맥 OSX를 포함한다.
구절 "해시 함수", "암호 해시 함수 값 알고리즘", 및 "해시 함수 값 알고리즘"은 (선택사항으로서는 가변 길이인) 큰 데이터 세트를 특정 해시 함수에 대해 고정 길이를 갖는 더 작은 데이터 세트에 매핑하는 알고리즘 또는 서브루틴을 지칭한다. "해시 함수 값"은 해시 함수 알고리즘의 적용 후에 반환되는 출력을 지칭한다. 알고리즘이 반환하는 값은 또한 소위 해시 값, 해시 코드, 해시 섬, 체크섬 또는 해시라고 할 수 있다. 예를 들어, MD5를 사용할 때, 출력은 128 비트인 반면, SHA-1을 사용할 때, 출력은 160 비트이다.
용어 "호스트" 및 "개시자"는 호환가능하게 사용되고 저장을 위해 데이터를 본 발명의 데이터 저장 및 검색 중개 시스템에 보내는 개체 또는 시스템을 지칭할 수 있다. 호스트는 하나 이상의 유형의 문서 또는 파일에 대응하는 데이터 및 수신된 데이터를 보낼 수 있다. 바람직하게는, 어느 입/출력("I/O") 스트림 내에서, 데이터는 단일 문서 유형의 파일에 대응한다. 편의상, 구절 "I/O 스트림"은 데이터가 어느 개체로부터 다른 개체로 송신되는 것을 지칭하는데 사용된다. 제1 개체에 대한 출력은 제2 개체에 대한 입력일 수 있다.
약자 "LBA"는 논리적 블록 어드레싱(logical block addressing)을 지칭한다. LBA는 선형 어드레싱 스킴이고 소정 저장 매체, 예를 들어, 하드 디스크에 저장되는 데이터 블록의 위치를 특정하는데 사용되는 시스템이다. LBA 스킴에 있어서, 블록은 정수 번호에 의해 위치가 찾아지고 하나의 번호만이 데이터를 어드레싱하는데 사용된다. 전형적으로, 제1 블록은 블록 0이다.
약자 "LUN"는 논리적 유닛 번호(logical unit number)를 지칭하고 논리적 유닛을 식별하는데 사용되는 번호이다. LUN은 SAN을 통하여 공유되는 블록 저장 어레이를 관리하는데 흔히 사용된다.
용어 "매니저"는 컴퓨터 프로그램 제품, 예를 들어, 비-일시적 매체에 저장될 수 있는 그리고 하나 이상의 다른 액션, 예를 들어, 데이터 수신, 송신, 저장 또는 처리가 취해지게 야기하는 코드를 지칭한다. 매니저는 하드웨어, 소프트웨어 또는 그 조합 상에 저장될 수 있다. 일부 실시예에 있어서, 매니저는 매니저가 그 의도된 기능을 수행할 수 있게 하도록 구성되는 컴퓨터 및/또는 시스템의 일부분일 수 있다.
용어 "중개자"는 하드웨어, 소프트웨어 또는 그 조합 상에 저장될 수 있는 그리고 적어도 하나의 비-캐시 매체 내 저장 공간의 하나 이상의 유닛을 파일 이름과 상관시키는 컴퓨터 프로그램 제품을 지칭한다. 중개자는 그것이 가리키는 비-캐시 매체보다 더 작은 크기의 차수일 수 있다. 예를 들어, 그것은 대략 전형적 실린더의 사이즈의 약 0.2% 정도로 작을 수 있다. 일부 실시예에 있어서, 중개자는 컴퓨팅 클라우드 내 존재할 수 있는 반면, 다른 실시예에 있어서 그것은 비-일시적 유형적 기록 매체에 존재한다. 중개자는 호스트가 실제로는 기록 매체의 여러 다른 트랙에서 일어나고 있는 동안 기록 매체의 소정 트랙에 있는 것으로 인지하는 위치 내 데이터의 저장을 조직하고, 변환하고, 번역하고 그리고 제어할 수 있을 수 있거나 또는 그것은 이들 기능 중 전부는 아니더라도 하나 이상을 서비스 제공하는 매니저에 동작가능하게 결합될 수 있다. 더욱, 중개자는 물리적 디바이스 또는 구조 내 위치할 수 있는 데이터의 섹터 맵, 테이블 또는 다른 조직을 포함할 수 있고, 그리하여 중개자의 컨텐트는 물리적 디바이스 또는 구조가 소정 기하구조를 갖게 야기할 수 있다. 일부 실시예에 있어서, 중개자는 L2 캐시 상에 영구적으로 상주한다. 다른 실시예에 있어서, 그것은 솔리드 스테이트 드라이브 상에 상주한다.
용어 "메타데이터"는 데이터의 컨테이너에 대한 관리 정보를 지칭한다. 메타데이터의 예는, 국한되는 것은 아니지만, 판독되고 있는 파일의 길이 또는 바이트 카운트; 파일이 수정된 마지막 시간과 관련 있는 정보; 파일 유형 및 액세스 허가를 기술하는 정보; 및 LUN QoS, VM 및 WORM을 포함한다. 다른 유형의 메타데이터는 운영 체제 정보, 자동-초기화 정보, 그룹 허가, 및 문서 유형 내 비트의 빈도를 포함한다. 일부 실시예에 있어서, 저장된 메타데이터는, 예를 들어, 개시자에 대해 그것이 저장하려고 탐색하는 문서의 수 및 사이즈가 줄어들거나 늘어남에 따라 저장 공간의 효율적 수축 또는 팽창을 가능하게 하도록 사용될 수 있다.
약자 "NAS"는 네크워크 에어리어 스토리지(network area storage)를 지칭한다. NAS 시스템에 있어서, 디스크 어레이는 랜 전송으로의 액세스를 부여하는 컨트롤러에 접속될 수 있다.
구절 "동작가능하게 결합"은 시스템, 디바이스 및/또는 모듈이 서로 또는 서로 서로 통신하도록 구성되고 통신하고 있을 때 또는 통신한 후에 그들 의도된 목적을 수행할 수 있음을 의미한다.
구절 "운영 체제"는 컴퓨터 하드웨어 자원을 관리하는 소프트웨어를 지칭한다. 운영 체제의 예는, 국한되는 것은 아니지만, 마이크로 윈도우즈, 리눅스 및 맥 OS X를 포함한다.
용어 "파티션"은 저장 매체, 예를 들어, 디스크 드라이브를 유닛으로 분할하는 포맷을 지칭한다. 그리하여, 파티션은 또한 디스크 파티션이라고도 지칭될 수 있다. 파티션의 예는, 국한되는 것은 아니지만, GUID 파티션 테이블 및 애플 파티션 맵을 포함한다.
약자 "RAID"는 리던던트 어레이 오브 인디펜던트 디스크(redundant array of independent disks)를 지칭한다. 관련 있는 서버에게는, 이러한 디스크 그룹이 단일 볼륨처럼 보일 수 있다. RAID 기술은 다수의 디스크로부터 단일 데이터 스트립을 끌어옴으로써 성능을 개선하고 다음과 같은 하나 또는 다수의 프레미스 유형 상에 구축된다: (1) 데이터의 미러링; (2) 데이터의 스트리핑; 또는 (3) 데이터의 미러링 및 스트리핑의 조합.
구절 "기록 매체"는 비트에 대응하는 자기 신호를 저장할 수 있는 비-일시적 유형적 컴퓨터 판독가능한 저장 매체를 지칭한다. 예로서, 기록 매체는, 국한되는 것은 아니지만, 하드 디스크 및 솔리드 스테이트 드라이브와 같은 비-캐시 매체를 포함한다. 당업자는 알고 있듯이, 솔리드 스테이트 드라이브는 또한 캐시를 가지며 스핀잉할 필요가 없다. 비-일시적 유형적 컴퓨터 판독가능한 저장 매체의 예는, 국한되는 것은 아니지만, 하드 드라이브, 하드 디스크, 플로피 디스크, 컴퓨터 테이프, ROM, EEPROM, 비휘발성 RAM, CD-ROM 및 펀치 카드를 포함한다.
약자 "SAN"는 스토리지 에어리어 네트워크(storage area network)를 지칭한다. 이러한 유형의 네트워크는 컴퓨팅 디바이스를 디스크, 테이프 어레이 및 다른 기록 매체에 링크하는데 사용될 수 있다. 데이터는, 예를 들어, 블록의 형태로 SAN을 통하여 송신될 수 있다.
약자 "SAP"는, 운영 체제에 의해 사용되는 I/O(입/출력) 엔진인, 시스템 보조 프로세서(system assist processor)를 지칭한다.
약자 "SCSI"는 소형 컴퓨터 시스템 인터페이스(small computer systems interface)를 지칭한다.
용어 "섹터"는 디스크, 예를 들어, 자기 디스크 상의 트랙의 세분을 지칭한다. 각각의 섹터는 고정량의 데이터를 저장한다. 디스크에 대한 공통 섹터 사이즈는 512 바이트(512B), 2048 바이트(2048B) 및 4096 바이트(4K)이다. 청크렛이 사이즈가 4K이고 각각의 섹터가 512B 사이즈이면, 그때 각각의 청크렛은 8 섹터(4*1024/512 = 8)에 대응한다. 섹터는 트랙을 갖고 플래터 상에 위치한다. 흔히, 2개 또는 4개의 플래터가 실린더를 이루고, 255개의 실린더가 하드 디스크 및 매체 디바이스를 이룬다.
구절 "섹터 맵"은 호스트로부터 호출을 수신하고 파일이 저장되는 저장 디바이스 내 위치와 상관시키는 툴을 지칭한다. 섹터 맵은, 예를 들어, SCSI 프로토콜에 의해 정의되는 파라미터 하에 동작할 수 있다. 본 발명의 일부 실시예에 있어서, 섹터 맵은 중개자의 비트 필드 내 위치할 수 있다.
용어 "트랙"은 모든 섹터를 가로지르는 디스크 내 순환 유닛을 지칭한다. "트랙 섹터"는 어느 하나의 섹터 내 트랙이다. "트랙 클러스터"는 하나보다 많은 섹터에 걸쳐 이어진다.
선호되는 실시예
본 발명은 비-캐시 기록 매체 상에 데이터를 저장하기 위한 방법, 이들 방법을 수행하기 위한 컴퓨터 프로그램 제품, 및 이들 방법을 수행하도록 구성되는 시스템을 제공한다. 본 발명의 다양한 실시예를 통해, 데이터를 효율적으로 저장 및 검색할 수 있다.
비트 마커
일 실시예에 의하면, 본 발명은 원시 데이터 내 비트 스트링의 표현으로서 비트 마커를 사용하는 기록 매체 상 데이터를 저장하기 위한 방법에 관한 것이다. 그리하여, 원시 데이터는 원시 데이터를 표현하는 일련의 마커로 번역되고, 그 방법은 저장을 위해, 비트 마커라고 지칭될 수 있는, 일련의 신호로 변환될 데이터를 포함하고 있는 파일 또는 스트림을 수신하고 그들 신호를 저장하도록 제공한다.
파일은 호스트라고 지칭되는 개체 또는 사람으로부터 수신될 수 있다. 바람직하게는, 호스트는 원시 데이터의 형태로 신호를 보낼 것이다. 예를 들어, 호스트는 JPEG, PDF, TIFF 또는 WORD 문서와 같은 하나 이상의 파일을 개별적으로 또는 일괄하여 형성하는 하나 이상의 청크렛을 보낼 수 있다. 본 발명의 다양한 실시예는 청크렛의 수신시, 청크렛의 서브유닛의 수신 시 또는 청크렛으로 변환될 하나 이상의 파일의 수신 시 개시된다. 바람직하게는, 수신되는 청크렛 또는 청크렛의 서브유닛은 모두 균일한 사이즈이다. 선택사항으로서, 그 방법은 사이즈의 균일성을 검증하고, 비-균일성이 검출되면, 예를 들어, 하나 이상의 청크렛이 너무 적은 비트를 가지면, 그 방법은 모든 청크렛이 균일한 사이즈일 때까지 영의 부가를 야기한다.
예로서, 데이터는 N 비트 길이인 청크렛으로 수신될 수 있고, 여기서 N은 1보다 큰 정수이다. 예를 들어, N은 128 바이트 내지 16K일 수 있고, 예를 들어, 4096B에 대응하는 4K이다.
청크렛은 순서대로 수신된다. 예를 들어, 파일은 직렬로 시스템에 의해 수신되는 10개의 청크렛을 포함하고 있을 수 있다. 대안으로, 주어진 파일에 대한 복수의 청크렛은 그것들이 호스트의 운영 체제에 의한 파일의 재생성 및 사용에 대해 허용하는 방식으로 그들이 서로 재-연관되는 것에 대해 허용하는 정보를 포함하고 있기로 하면 함께 또는 병렬로 송신될 수 있다. 그리하여, 일부 실시예에 있어서, 본 발명의 방법은 청크렛이 수신되는 동일한 순서로 마커를 저장한다. 따라서, 호스트가 파일의 검색에 대해 호출할 때, 대응하는 검색 방법론은 인코딩된 데이터를 동일한 순서로 다시 호출하고, 그것을 적합한 순서로 청크렛으로 디코딩할 것이다.
선택사항으로서, 인코딩하기 이전에, 시스템은 각각이 A 비트 길이인, 서브유닛이라고도 지칭되는, 비트의 그룹으로 청크렛을 분할할 수 있다. 시스템이 청크렛을 서브유닛으로 분할하면, 서브유닛은 비트 마커 테이블에 비교될 수 있다. 시스템이 청크렛을 서브유닛으로 분할하지 않으면, 그때 각각의 청크렛은 비트 마커 테이블에 비교될 수 있다.
비트 마커 테이블은 고유 비트 세트를 고유 마커와 상관시킨다. 일부 실시예에 있어서, 비트 마커 테이블은 서브유닛이 사용될 때에는 사이즈 A 또는 서브유닛이 사용되지 않을 때에는 사이즈 N의 각각의 고유 비트 스트링에 대한 마커를 포함하고 있다. 그리하여, 이러한 방법 하에서 컴퓨터 프로그램은 입력으로서 청크렛 세트를 수신할 수 있다. 그 후 그것은 동일한 사이즈인 그리고 각각 A 비트 길이인 Y개의 서브유닛으로 각각의 청크렛을 분할할 수 있으며, 여기서 A/8은 정수이다. 각각의 고유 A에 대해, 테이블 내 마커가 있을 수 있다.
그리하여, 자동화된 프로토콜을 통해, 청크렛의 수신 후에, 컴퓨터 프로그램 제품은 비트 마커 테이블이 액세스되게 야기한다. 따라서, 각각의 청크렛 또는 서브유닛은 입력으로서 역할할 수 있고, 각각의 비트 마커는 출력으로서 역할할 수 있고, 그로써 마커의 출력 세트를 형성한다. 마커의 출력 세트는 번역된, 코딩된 또는 인코딩된 데이터라고 지칭될 수 있다. 각각의 청크렛이 세분되지 않는 실시예에 있어서, 그때 각각의 청크렛은 하나의 마커를 수신할 것이다. 청크렛이 2개의 서브유닛으로 분할되면, 그것은 2개의 마커로 번역 또는 인코딩될 것이다. 그리하여, 컴퓨터 프로그램 제품은, 각각의 청크렛에 대응하는 적어도 하나의 마커를 배정하도록, 마커를 입력과 상관시키는 비트 마커 테이블을 사용한다. 컴퓨터 프로그램 제품은, 각각의 개개의 마커에 대응하는 서로 다른 출력이 발생되도록, 각각의 청크렛에 대응하는 마커 세트를 포함하고 있는 서로 다른 출력이 발생되도록, 또는 완전 파일에 대응하는 마커 세트를 포함하고 있는 서로 다른 출력이 발생되도록, 설계될 수 있다.
비트 마커 테이블은 X개의 마커를 포함하고 있다. 일부 실시예에 있어서, X는, 방법이 청크렛을 서브유닛으로 분할하지 않으면, 길이 N의 청크렛 내 비트의 여러 다른 조합의 수와 같거나, 또는, 방법이 청크렛을 분할하면, 길이 A의 서브유닛 내 비트의 여러 다른 조합의 수와 같다. 문서 유형이 주어진 길이 서브유닛 또는 청크렛에 대한 비트 조합 전부보다 더 적게 갖는다고 알려져 있거나 예상되면, X(마커의 수)는 비트의 가능한 조합의 실제 수보다 더 작을 수 있다. 예를 들어, 일부 실시예에 있어서, 비트 마커 전부는 동일 사이즈이고, 비트 마커 테이블 내 비트 마커의 수는 사이즈 N 또는 A의 비트 스트링 내 비트 조합의 수와 같다. 다른 실시예에 있어서, 비트 마커 전부는 동일 사이즈이고, 비트 마커 테이블 내 비트 마커의 수는 사이즈 N 또는 A의 비트 스트링 내 비트 조합의 수의 90% 미만, 80% 미만, 70% 미만 또는 60% 미만이다.
예로서, 일부 실시예에 있어서, 각각의 청크렛에는 복수의 0 및/또는 1로 이루어진 코드(즉, 마커)가 배정된다. 다른 실시예에 있어서, 각각의 청크렛은 복수의 0 및 1로 이루어진 코드(즉, 마커)가 각각 배정되는 복수의 서브유닛으로 분할된다. 서브유닛은 길이 A에 의해 정의될 수 있으며, 여기서 N/A = Y이고 Y는 정수이다. 어느 서브유닛이 그 비트 수를 갖지 않으면, 예를 들어, 하나 이상의 서브유닛이 시스템이 입력으로서 수신하도록 구성되는 것보다 더 작은 비트 수를 가지면, 시스템은, 모든 서브유닛이 동일한 사이즈일 때까지, 비트, 예를 들어, 영을 부가할 수 있다. 이러한 단계는, 예를 들어, 청크렛이 서브유닛으로 분할된 후에 그리고 청크렛의 전부가 동일한 사이즈인지 알아보도록 우선 체크하는 것의 부재 시에 수행될 수 있다. 대안으로, 그리고 위에서 설명된 바와 같이, 그것은 청크렛을 서브유닛으로 분할하기 이전에 청크렛 레벨 상에서 수행될 수 있다.
위-설명이 시사하는 바와 같이, 알고리즘은 비트 스트링을 코딩된 데이터 세트로 번역하도록 구성될 수 있고, 알고리즘은 비트 스트링이 청크렛에든 청크렛의 서브유닛에든 대응하게 되도록 설계될 수 있다. 바람직하게는, 코딩된 데이터 세트는 호스트 또는 클라이언트로부터 수신된 대로의 파일보다 더 작다. 그렇지만, 코딩된 데이터 세트가 원래 데이터보다 더 작은지에 무관하게, 그것은 파일의 청크렛으로 다시 변환될 수 있다. 당업자가 인식할 바와 같이, 저장을 위해 호스트로부터 수신되는 데이터는 원시 데이터일 것이고, 그리하여 어느 문서 유형에라도 대응할 수 있다.
인코딩은 2개의 독립적 목적을 제공할 수 있다. 첫째로, 저장을 위해 데이터를 인코딩함으로써, 보안이 증가된다. 코드를 알고 있는(즉, 비트 마커 테이블로의 액세스를 갖는) 개체 또는 사람만이 그것을 디코딩하여 문서를 복원할 수 있을 것이다. 둘째로, 코드가 원래 문서보다 더 적은 비트를 사용하여 생성되면, 그때는 더 적은 저장 공간이 필요로 될 것이고 비용이 절약될 수 있다. 하나 이상의 파일에 대한 저장 공간의 양이 감축되면, 그때 NCM은 더 큰 수의 파일 및/또는 더 큰 파일에 대응하는 데이터를 저장할 수 있다.
테이블 내 적어도 복수의 고유 비트 조합에 대하여, 바람직하게는 시스템이 청크렛을 서브유닛으로 분할하지 않으면 마커는 청크렛 길이 N보다 더 작거나 또는 시스템이 청크렛을 서브유닛으로 분할하면 서브유닛 길이 A보다 더 작다. 바람직하게는 시스템이 청크렛을 서브유닛으로 분할하지 않으면, 마커는 청크렛 길이 N보다 더 크지 않거나, 시스템이 청크렛을 서브유닛으로 분할하면, 마커는 서브유닛 길이 A보다 더 크지 않다. 일부 실시예에 있어서, 모든 마커는 N보다 더 작거나 또는 A보다 더 작다. 부가적으로, 일부 실시예에 있어서, 각각의 마커는 동일한 사이즈일 수도 있고 2개 이상의 마커가 다른 사이즈일 수도 있다. 여러 다른 사이즈의 마커가 있을 때, 이들 여러 다른 사이즈의 마커는, 예를 들어, 테이블 내 있을 수 있다. 대안으로, 테이블 내에서, 모든 마커는 동일한 사이즈이지만, 저장 이전에 마커의 일단 또는 양단으로부터 0이 전부 제거된다.
컴퓨터 프로그램 제품이 청크렛을 복수의 마커로 번역한 후에, 그것은 복수의 마커가 (일단으로부터 0이 제거되게 하였든 아니든) 청크렛의 순서에 대응하거나 또는 그렇지 않으면 청크렛의 순서가 재생성되어 나올 수 있는 순서로 비-일시적 기록 매체 상에 저장되게 야기한다. 궁극적으로, 마커는 비-캐시-매체인 비-일시적 매체에 저장되게 된다. 그렇지만, 선택사항으로서, 그것은 우선 캐시 매체, 예를 들어, L1 및/또는 L2에 보내질 수 있다. 그리하여, 정보가 손실되지 않도록, 비트 마커 테이블은 영속적 메모리에 저장될 수 있지만, 사용 중일 때는, 사본이, 예를 들어, L2 캐시 내 있을 수 있고 부팅 또는 리부팅 시에 L2 캐시 내 테이블의 파퓰레이팅이 영속적 메모리로부터 있을 수 있다.
일 실시예에 있어서, 저장 디바이스는 주어진 파일에 대응하는 비-캐시 매체 내 복수의 비트 마커를 저장한다. 비트 마커는 사이즈 범위 X 내지 Y이고, 여기서 X는 Y 미만이고 적어도 2개의 마커가 서로 다른 사이즈를 갖는다. 비트 마커가 검색될 때 또는 그 후에, 컴퓨터 알고리즘은 기결정된 사이즈 Z보다 더 작은 모든 비트 마커의 일단에 0을 부가하며, 여기서 Z는 Y보다 크거나 같다. 사이즈 Z의 각각의 마커가 길이 A의 비트 스트링으로 번역되는 룩업 테이블이 참고될 수 있으며, 여기서 A는 Z보다 크거나 같다. 비-한정적 예에 있어서, X = 4, Y = 20, Z = 24, A = 32이다. 일부 실시예에 있어서, A는 Z보다 적어도 50% 더 크다. A에 대응하는 비트 스트링은 청크렛으로 조합되는 서브유닛일 수도 있고 그것들은 청크렛 자체일 수도 있다.
빈도 변환기
위에서 설명된 바와 같이, 비트 마커 테이블은 비트 스트링에 대한 마커를 랜덤 또는 비-랜덤 방식으로 원시 데이터에 배정할 수 있고, 비트 마커는 균일 또는 비-균일 사이즈일 수 있다. 그렇지만, 위에서 설명된 바와 같은 비트 마커 테이블 대신에, 빈도 변환기를 사용할 수 있다.
당업자는 본 개시의 예들의 섹션에서의 테이블 I 및 테이블 II이 원시 데이터 내 비트 스트링의 빈도와는 독립적인 방식으로 비트 마커(즉, 변환된 비트)를 배정함을 인식할 것이다. 그렇지만, 위에서 언급되고 아래 예 3에서 설명되는 바와 같이, 문서 유형 또는 문서 세트 내 더 빈번하게 나타날 것으로 예상되는 원시 데이터에 더 작은 마커를 배정할 수 있다. 이러한 전략은 모든 정보의 대략 80%가 가장 빈번한 서브유닛의 대략 상위 20% 내 들어있다는 사실을 이용한다. 환언하면, 데이터에 대응하는 서브유닛은 매우 반복적이다.
빈도 변환기가 여러 다른 사이즈의 비트 스트링을 어떻게 사용할 수 있는지 더 예시하기 위해, 도 5를 참조할 수 있다. 도 5는 5개 유닛 길이이고 수 1로 시작하는 모든 2진 시퀀스에 대한 2진 트리를 도시하고 있다. 트리가 보여주고 있는 바와 같이, 최상부 줄에서 시작하여 트리 아래로 최하부까지 이동하는, 길이가 5개 디지트인 시퀀스를 생성할 경로가 16개 있다. 그렇지만, 트리 아래로 이동할 때, 어느 브랜치 아래로, 예를 들어, 제3, 제4 또는 제5 줄로 이동할 수 있다. 따라서, 그 방법은 한 조각의 데이터에 대해 그것이 트리 아래로 부분적으로 이동하는 것에 대응하는 코드를 배정하는 반면, 다른 조각의 데이터에 대해 그 방법은 다른 브랜치를 따라 더 큰 수의 유닛을 이동하는 것에 대응하는 코드를 배정하게 되도록 설계될 수 있다. 비-한정적 예로서, 특정 조각의 변환된 데이터에 대해, 제3 줄에서 정지하여, 예를 들어, 시퀀스 101을 발생시킬 수 있는 반면, 모든 다른 조각의 데이터에 대해, 처음 3개의 디지트는 101이 아니다. 그리하여, 그 방법은 (도 5에서의 박스 내에 있는) 1010, 1011, 10100, 10101, 10110 및 10111의 사용을 결코 허용하지 않을 것이다. 메모리로부터 데이터의 검색 시에, 시스템은 그것이 디지트들을 고유하다고 인식할 때까지 그것들을 판독할 것이고, 고유한 것으로 그것들의 인식 시에, 디코딩에 대해 허용하는 프로그램 내로의 입력으로서 고유 스트링을 사용하여, 호스트에 대해 원시 데이터 파일의 재생성을 허용할 것이다.
본 발명의 다양한 방법은, 최소 비트 수를 판독하도록 검색 호출 동안 또는 그 후에 그리고 그 최소 수(가장 짧은 고유 코드에 대응함) 후에, 데이터 파일 또는 테이블에 비교함으로써 고유도에 대해 체크하고, 코드가 데이터 파일 또는 테이블 내에서 고유하지 않으면, 계속하여 비트 수를 늘리고 시퀀스가 고유하다고 인식될 때까지 각각의 개개의 비트의 부가 후에 늘어난 코드의 고유도에 대해 체크할 수 있다. 전술한 예는 3, 4 또는 5 비트 스트링의 관점에서 설명되지만, 그들 사이즈는 예시적 목적으로만 사용된다. 일부 실시예에 있어서, 빈도 변환기와 연관하여 사용을 위한 가장 짧은 고유 비트 시퀀스는 10 내지 15 비트 길이이고 가장 긴 비트 시퀀스는 25 내지 40 비트 길이이다.
일부 실시예에 있어서, 여러 다른 사이즈인 모든 복수의 변환된 비트 스트링마다, A 비트 길이인 제1 변환된 비트 스트링 및 B 비트 길이인 제2 변환된 비트 스트링이 있으며, 여기서 A < B이고, 제1 변환된 비트 스트링의 A 비트의 아이덴티티는 제2 변환된 비트 스트링의 처음 A 비트의 아이덴티티와 동일하지 않다.
테이블 I, II 및 III(예 참조)이 보여주고 있는 바와 같이, 정보는 변환될 수 있고 출력 코드는 마커가 비트 그룹을 표현하는데 사용되기 때문에 입력보다 더 적은 공간을 차지하도록 구성될 수 있다. 그리하여, 바람직하게는 테이블 내에서, 마커 중 적어도 하나, 복수, 적어도 50%, 적어도 60%, 적어도 70%, 적어도 80%, 적어도 90% 또는 적어도 95%는 서브유닛보다 사이즈가 더 작다. 그렇지만, 변환된 데이터가 호스트로부터 수신된 데이터와 동일하거나 더 큰 사이즈 또는 해시 함수 값 알고리즘으로부터 발생된 것과 동일한 사이즈이게 하는 기술적 장애는 없다.
단편화
위에서 언급된 바와 같이, 데이터 스트림의 수신 후에, 일부 실시예에 있어서 그 방법은 수신되는 데이터를 단편화하도록 호출한다. 수신되는 데이터가 큰 파일의 형태이면, 그것은 청크렛으로 단편화될 수 있다. 수신되는 데이터가 청크렛의 형태이면, 청크렛은 서브유닛으로 단편화될 수 있다. 큰 파일은 우선 청크렛으로 단편화될 수 있고 그 후 그들 청크렛은 서브유닛으로 단편화될 수 있다. 그리하여, 호스트로부터의 어느 입력에 대해서라도, 영, 하나 또는 2개의 단편화 단계가 있을 수 있다.
I/O 스트림을 단편화함으로써, 그 방법은 각각의 I/O 스트림을 기결정된 그리고 바람직하게는 균일한 사이즈의 더 작은 유닛(블록이라고도 지칭될 수 있음)으로 분할한다. 당업자는 더 작은 블록 사이즈를 사용하는 하나의 이점은 작은 블록이 데이터의 더 용이한 처리에 대해 허용한다는 것임을 인식할 것이다. 비-한정적 예로서, I/O 스트림은 4096 바이트 길이일 수 있고, 그 방법은 그 스트림을 1024, 512, 256 또는 128 바이트 길이인 단편화된 유닛으로 단편화할 수 있다. 데이터가 수신된 후에 또는 데이터가 수신되고 있을 때, 청크렛을 예를 들어 32 비트의 서브유닛으로 분할하는 알고리즘이 실행될 수 있다.
서브유닛의 사이즈는 호스트로부터 데이터를 수신하는 시스템의 설계자의 선택이다. 그렇지만, 서브유닛의 사이즈는 청크렛이 일관된 사이즈의 서브유닛으로 분할되고, 서브유닛이 빈도 변환기 또는 비트 마커 테이블의 참고와 연관하여 용이하게 사용될 수 있게 되도록 선택되어야 한다.
청크렛 중 어느 것이 다른 것들보다 더 작으면, 선택사항으로서는, 더 작은 사이즈의 그 청크렛의 수신 시에, 알고리즘은 더 작은 청크렛이 다른 청크렛과 동일한 사이즈이게 만들기 위해 영을 부가한다. 대안으로, 시스템은 청크렛을 서브유닛으로 분할할 수 있고 소망의 길이보다 더 작은 서브유닛을 획득할 때 그 서브유닛의 일단에 영을 부가할 수 있다.
전처리
번역 프로세스(인코딩 프로세스라고도 지칭될 수 있음) 동안, 알고리즘이 비트 마커 테이블 또는 빈도 변환기에 대한 입력으로서 사용하는 비트 스트링(즉, 청크렛 또는 서브유닛)은 전처리될 수 있다. 이들 비트 스트링의 각각은 제1 단부 및 제2 단부에 의해 정의될 수 있고, 마커를 배정하기 이전에 그 방법은 제2 단부에서의 비트가 0의 값을 갖는지 결정하도록 각각의 비트 스트링을 분석하는 단계를 더 포함한다. 제2 단부에서의 비트가 0의 값을 가지면, 그 방법은 제2 단부에서의 비트 및 0의 값을 갖는 모든 후속 비트를 제거하고 제2 단부에서의 비트와 인접하는 비트 스트링을 형성하고, 그로써 감축된 사이즈의 비트 스트링을 형성할 수 있다. 전-처리 단계의 이점은 더 작은 비트 마커 테이블 또는 빈도 변환기가 사용될 수 있다는 것이다. 예를 들어, 동일한 코딩된 데이터를 산출하기 위해 테이블 I 대신에 테이블 II이 사용될 수 있다. 당업자는 인식할 바와 같이, 이러한 전처리는 제2 단부로부터 영 대신에 1을 검색 및 제거함으로써 성취될 수 있다.
절단
본 발명의 또 다른 실시예에 있어서는, 비트 마커 테이블 또는 빈도 변환기의 사용을 통해 번역하기보다, 절단된 서브유닛을 그것들이 청크렛 내 존재하는 순서와 동일하게 저장할 수 있다(또는 서브유닛이 사용되지 않으면, 그때는 청크렛이 절단되고 저장될 수 있다). 그리하여, 단축된 스트링이, 예를 들어, 비트 마커 테이블 내 입력으로서의 사용을 위한 전처리된 데이터로서 기능하게 하는 대신에, 그것들 자체가 저장될 수 있다.
그리하여, 일부 실시예에 있어서는, 기록 매체 상에 데이터를 저장하기 위한 또 다른 방법이 있다. 이러한 방법에 의하면, 복수의 디지털 2진 신호를 수신하며, 여기서 디지털 2진 신호는 위에서 설명된 바와 같은 포맷인 청크렛으로 조직된다. 선택사항으로서, 각각의 청크렛은 위에서 제공된 바와 같이 서브유닛으로 분할될 수 있다.
각각의 청크렛 또는 서브유닛은 그 길이에 의해 정의될 수 있고 각각의 청크렛 또는 서브유닛은 제1 단부 및 제2 단부를 갖는다. 제2 단부에서의 비트가 0 값을 갖는지 결정하기 위해 각각의 청크렛 또는 서브유닛을 분석하고, 제2 단부에서의 비트가 0 값을 가지면 제2 단부에서의 비트 및 양자가 0 값을 갖는 모든 비트를 제거하고 제2 단부에서의 그 비트와 인접하는 비트 스트링을 형성하고, 그로써 제2 단부에서 0을 갖는 어느 청크렛 또는 서브유닛에 대해 개정된 청크렛 또는 개정된 서브유닛을 형성할 수 있다. 이들 개정된 비트 스트링이 원래 스트링보다 더 짧기 때문에, 그것들은 절단되었다고 지칭될 수 있다.
청크렛 또는 서브유닛이 절단된 후에, 절단된 정보를 비-일시적 기록 매체에 저장할 수 있다. 절단된 정보를 저장함으로써, 그렇지 않았더라면 절단되지 않은 비트 스트링으로 저장되었을 동일한 정보를 저장하는데 더 적은 비트가 사용된다.
위에서 설명된 다양한 방법에 있어서, 각각의 청크렛의 또는 각각의 서브유닛의 제1 단부 또는 제2 단부로부터 디지트(들)를 제거할 수 있지만, 둘 다는 아니다. 그렇지만, 각각의 서브유닛 또는 청크렛의 제1 단부로부터 디지트를 제거하는 것을 고려하고, 별개로 각각의 서브유닛 또는 청크렛의 제2 단부로부터 디지트를 제거하고, 각각의 서브유닛 또는 청크렛에 대해 절단이 제1 단부 및 제2 단부 중 어느 하나 또는 둘 다에서 일어나는지 분석하고, 그것이 일단에서만 일어나면, 절단된 청크렛 또는 서브유닛을 저장하고, 그것이 양단에서 일어나면, 그때는 절단된 유닛 중 더 작은 것을 저장하는 방법을 실시하는 것이 본 발명의 다양한 실시예의 범위 내에 있다. 또한 디지트가 청크렛 또는 서브유닛의 양단으로부터 제거될 수 있는 방법을 실시하는 것도 본 발명의 범위 내에 있다.
그리하여, 복수의 디지털 2진 신호를 수신할 수 있다. 2진 신호는 유닛, 예를 들어, 청크렛 또는 청크렛의 서브유닛으로 수신될 수 있다. 각각의 유닛은 동일한 비트 수 길이일 수 있고, 각각의 유닛은 제1 단부 및 제2 단부를 갖는다. 유닛 내 비트 수는 1보다 더 큰 정수 수이고, 비트는 유닛 내에서 순서를 갖고, 유닛은 순서를 갖는다.
그 후 제1 단부에서의 비트가 0 값을 갖는지 결정하기 위해 각각의 유닛을 분석하고, 제1 단부에서의 비트가 0 값을 가지면, 제1 단부에서의 비트 및 양자가 0 값을 갖는 모든 비트를 제거하고 그 비트와 인접하는 비트 스트링을 형성하고, 그로써 제1 단부에서 0을 갖는 어느 유닛에 대해 제1 개정된 유닛을 형성할 수 있다.
또한 제2 단부에서의 비트가 0 값을 갖는지 결정하기 위해 각각의 유닛을 분석하고, 제2 단부에서의 비트가 0 값을 가지면, 제2 단부에서의 비트 및 양자가 0 값을 갖는 모든 비트를 제거하고 그 비트와 인접하는 비트 스트링을 형성하고, 그로써 제2 단부에서 0을 갖는 어느 유닛에 대해 제2 개정된 유닛을 형성할 수 있다.
각각의 유닛에 대해, 이하의 결정 트리가 적용될 수 있다: (a) 제1 개정된 유닛과 제2 개정된 유닛의 사이즈가 동일하면, 제1 개정된 유닛(또는 제2 개정된 서브유닛)을 저장한다; (b) 제1 개정된 유닛이 제2 개정된 유닛보다 더 작으면, 제1 개정된 유닛을 저장한다; (c) 제2 개정된 유닛이 제1 개정된 유닛보다 더 작으면, 제2 개정된 유닛을 저장한다; (d) 개정된 유닛이 없으면, 유닛을 저장한다; (e) 제1 개정된 유닛이 없지만 제2 개정된 유닛이 있으면, 제2 개정된 유닛을 저장한다; 그리고 (f) 제2 개정된 유닛이 없지만 제1 개정된 유닛이 있으면, 제1 개정된 유닛을 저장한다.
하나 이상의 비트가 제1 단부 또는 제2 단부로부터 제거되었는지 나타내는 정보를 저장할 수 있거나 비트가 제1 단부로부터 제거되는 유닛에 대해 제1 비트 마커 테이블을 사용하고 비트 마커가 제2 단부로부터 제거되는 유닛에 대해 제2 비트 마커 테이블을 사용할 수 있고, 2개의 비트 마커 테이블 사이에는, 비트 마커의 중복이 없다. 이들 2개의 다른 비트 마커 테이블은 동일한 테이블의 섹션으로서 조직되고 개정되지 않은 유닛에 대한 비트 마커를 포함할 수 있다. 테이블 또는 테이블들에 있어서는, 제1 개정된 유닛, 제2 개정된 유닛, 및 예를 들어 그것들이 양단에 1을 갖기 때문에 개정되지 않은 어느 유닛에 대한 비트 마커의 중복은 없다.
위에서 설명된 방법은 영을 제거하는 것과 연관하여 설명되고 있기는 하지만, 당업자는 시스템이 대신 1을 제거할 수 있음을 인식할 것이다. 부가적으로, 이들 방법은 비트 마커 테이블 또는 빈도 변환기의 사용에 대한 대안으로서 사용되고 있는 것으로 설명된다. 그렇지만, 예를 들어, 그들 프로토콜의 출력인 마커를 절단함으로써, 그것들이 원래 파일의 검색 및 복원을 허용하는 방식으로 저장되는 한, 비트 마커 테이블 또는 빈도 변환기와 연관하여 이들 방법을 사용하는 것이 본 발명의 범위 내에 있다.
해시 값
위에서 설명된 실시예 중 어떤 것에 있어서는, 데이터를 인코딩하기 위해 비트 마커 테이블 또는 빈도 변환기에 액세스한다. 다른 일 실시예에 있어서, 청크렛 또는 서브유닛은 암호 해시 함수 값 알고리즘에 대한 입력으로서 역할한다.
그리하여, 각각의 입력에 대해, 입력보다 사이즈가 더 작은 출력이 있다. 예를 들어, X 바이트의 단편화된 유닛이라고도 지칭될 수도 있는 X 바이트의 서브유닛이 있으면, 출력은 X 바이트의 각각의 단편화된 유닛에 대해 발생된 해시 함수 값이다. 해시 함수 값 알고리즘의 예는, 국한되는 것은 아니지만, MD5 해시(메시지 다이제스트 알고리즘이라고도 지칭됨), MD4 해시 및 SHA-1을 포함한다. 해시 함수 값 알고리즘으로부터 출력되는 값은 체크섬 또는 섬이라고 지칭될 수 있다. 일부 실시예에 있어서, 섬은 사이즈가 64, 128, 160 또는 256이다. I/O 스트림 내 데이터의 고도의 반복적 본성 때문에, 상충하는 섬, 즉, 동일하지만 서로 다른 단편화된 유닛에 대응하는 섬을 발생시킬 확률은 비교적 낮다.
일부 실시예에 있어서, 각각의 해시 값은, 바람직하게는 동일 길이의, 복수의 0 및/또는 1로 이루어진 코드 또는 비트 스트링이다. 이들 해시 값은 비-캐시 기록 매체 상의 저장을 위해 사용될 수 있다.
일 실시예에 있어서, 시스템은, 예를 들어, 비-캐시 기록 매체 상에 데이터를 저장하기 위한 방법을 실행하며, 다음을 포함한다: (i) N 바이트의 I/O 스트림을 수신하는 것; (ii) N 바이트를 X 바이트의 단편화된 유닛으로 단편화하는 것; (iii) X 바이트의 각각의 단편화된 유닛과 암호 해시 함수 값을 연관시키는 것, 여기서 연관시키는 것은 상관 파일에 액세스하는 것을 포함하되, 상관 파일은 Y 비트의 저장된 해시 함수 값을 X 바이트의 복수의 저장된 시퀀스의 각각과 상관시킨다 그리고 (a) 단편화된 X 바이트의 시퀀스가 상관 파일 내에 있으면, 비-캐시 기록 매체 상의 저장을 위해 Y 비트의 저장된 해시 함수 값을 사용하고; 그리고 (b) 단편화된 X 바이트의 시퀀스가 상관 파일 내에 있지 않으면, 그때는 Y 비트의 새로운 해시 함수 값을 발생시켜 X 바이트의 단편화된 시퀀스와 상관 파일 내 저장하고 비-캐시 기록 매체 상의 저장을 위해 새로운 해시 함수 값을 사용한다.
위에서 설명된 방법은 N 바이트의 I/O 스트림을 단편화하도록 호출한다. 그렇지만, 그 방법은 암호 해시 함수 값 알고리즘을 I/O 스트림에 적용하고 그것을 단편화하지 않음으로써 적용될 수 있다. 그리하여, 대안의 방법은 다음을 포함한다: (i) N 바이트의 I/O 스트림을 수신하는 것; (ii) N 바이트의 각각의 유닛과 암호 해시 함수 값을 연관시키는 것, 여기서 상기 연관시키는 것은 상관 파일에 액세스하는 것을 포함하되, 상관 파일은 Y 비트의 저장된 해시 함수 값을 N 바이트의 복수의 저장된 시퀀스의 각각과 상관시킨다 그리고 (a) N 바이트의 시퀀스가 상관 파일 내에 있으면, 비-캐시 기록 매체 상의 저장을 위해 Y 비트의 저장된 해시 함수 값을 사용하고; 그리고 (b) N 바이트의 시퀀스가 상관 파일 내에 있지 않으면, 그때는 Y 비트의 새로운 해시 함수 값을 발생시켜 N 바이트와 상관 파일 내 저장하고 비-캐시 기록 매체 상의 저장을 위해 새로운 해시 함수 값을 사용한다. 부가적으로, 다양한 방법이 예시적 목적으로 소정 세트의 N 바이트 또는 X 바이트에 적용되는 것으로 설명되고 있기는 하지만, 당업자는 그 방법이 바람직하게는 파일의 모든 N 바이트 또는 X 바이트에 대해 적용될 수 있음을 인식할 것이다.
부가적으로, 위에서 설명된 방법은 바이트 스트링이 상관 파일 내 이미 있지 않은 경우에만 알고리즘을 적용한다. 다른 일 실시예에 있어서, 본 발명은 비-캐시 기록 매체 상에 데이터를 저장하기 위한 방법을 제공하며, 다음을 포함한다: (i) N 바이트의 I/O 스트림을 수신하는 것; (ii) N 바이트의 각각의 유닛에 대한 발생된 해시 함수 값을 형성하도록 N 바이트의 각각의 유닛에 암호 해시 함수 값 알고리즘을 적용하는 것; (iii) 상관 파일에 액세스하는 것, 여기서 상관 파일은 Y 비트의 저장된 해시 함수 값을 N 바이트의 복수의 저장된 시퀀스의 각각과 상관시킨다 그리고 (a) N 바이트의 유닛에 대한 발생된 해시 함수 값이 상관 파일 내에 있으면, 비-캐시 기록 매체 상의 저장을 위해 Y 비트의 저장된 해시 함수 값을 사용하고; 그리고 (b) N 바이트의 유닛에 대한 발생된 해시 함수 값이 상관 파일 내에 있지 않으면, 그때는 Y 비트의 발생된 해시 함수 값을 N 바이트의 단편화된 유닛과 상관 파일 내 저장하고 비-캐시 기록 매체 상의 저장을 위해 그 발생된 해시 함수 값을 사용한다. 이러한 실시예는 또한 단편화된 유닛을 형성하도록 N 바이트 단편화하고 N 바이트의 유닛에 대신에 단편화된 유닛에 암호 해시 함수 값 알고리즘을 적용하는 단계를 부가하도록 수정될 수 있다.
위에서 설명된 실시예 중 어떤 것에 있어서는, 체크섬이 각각의 청크렛, 단편화된 유닛 또는 서브유닛에 대해 획득된 후에, 상관 파일에 액세스한다. 이들 방법은 선입선출("FIFO") 프로토콜에 따라 체크섬을 획득하고 또한 I/O 스트림이 수신되고 있는 동안, 체크섬이 발생되고 있는 동안, 또는 모든 I/O 스트림이 수신되고, 단편화되고 해시 함수 값 알고리즘을 받게 된 후에 상관 파일에 액세스하는 것을 시작할 수 있다.
위에서 언급된 바와 같이, 상관 파일은 X 바이트의 복수의 저장된 시퀀스의 각각과 Y 비트의 서로 다른 저장된 해시 함수 값을 연관시킨다. 따라서, 발생된 해시 함수 값이 있는 이들 경우에 있어서: (a) X 바이트의 유닛에 대한 발생된 해시 함수 값이 상관 파일 내에 있으면, 그 방법은 Y 비트의 저장된 해시 함수 값이 비-캐시 기록 매체 상의 저장을 위해 사용되게 야기하고, 그리고 (b) X 바이트의 유닛에 대한 발생된 해시 함수 값이 상관 파일 내에 있지 않으면, 그 방법은 Y 비트의 발생된 해시 함수 값이 X 바이트의 시퀀스와 상관 파일 내 저장되게 야기하고 그 발생된 해시 함수 값을 비-캐시 기록 매체 상의 저장을 위해 사용한다.
상충 해결 모듈
해시 값 알고리즘의 적용의 결과로서 상충하는 해시 값이 발생되는 확률은 낮다. 그리하여, 일부 실시예에 있어서는, 상충 해결 모듈의 사용 없이 여기에서 설명된 방법을 채용하도록 선택할 수 있다. 그렇지만, 다양한 실시예에 있어서, 본 발명은 상충이 생길 수 있는 상황을 다루기 위해 상충 해결 모듈을 적용한다.
도 6에 도시된 바와 같이, 시스템은 N 바이트 세트의 스트림을 수신할 수 있다(610). 그 후 그것은, 각각의 단편화된 유닛에 대해, 해시 함수를 적용하고 해시 함수 값을 발생(630)시키기 위해 바람직한 사이즈의 유닛으로 N 바이트의 단편화(620)를 야기할 수 있다. 다음으로 시스템은 각각의 해시 값이 상관 파일 내 이미 있는지 질의한다(640).
이들 실시예에 있어서는, X 바이트의 단편화된 유닛에 대해 상관 파일 내 해시 값과 동일한 해시 값이 발생될 때마다 활성화되는 상충 해결 모듈이 있다(650). 그 후 이 모듈은 X 바이트의 단편화된 유닛이 그 해시 값에 대해 X 바이트의 이미 저장된 값과 동일한지 질의한다. 상충 해결 모듈이 X 바이트의 단편화된 유닛에 대해 상관 파일 내 저장된 해시 함수 값과 동일한 해시 함수 값이 발생되지만 X 바이트의 단편화된 유닛이 저장된 해시 함수 값과 연관된 X 바이트와는 다르다고 결정하면, 그때는 상관 파일을 업데이트하고 발생된 해시 값을 내부에 저장함은 물론, NCM에 쓰기도 할 필요가 있다(660). 예를 들어, 아래에 설명되는 바와 같은 일부 실시예에 있어서, 모듈은 거기가 발생된 해시 함수 값 및 저장된 해시 함수 값과 연관된 서로 다른 Z 비트이게 야기한다.
(존재하면 어느 연관된 Z 값을 갖는) 발생된 해시 값이 고유하면, 그때 그것은 NCM 상의 저장을 위해 사용될 수 있고 상관 파일은 연관을 포함하도록 업데이트될 수 있다(680). 더욱, 해시 값이 이미 상관 파일 내에 있고 수신된 N 바이트가 상관 파일 내 것들과 동일하면, 그때 (존재하면 어느 연관된 Z 값을 갖는) 저장된 해시 값은 NCM에 쓰여질 수 있고 시스템은 상관 파일을 업데이트할 필요가 없다(670). 그리하여, 상충 모듈은 상관 파일이 액세스된 후에, 그리고 새롭게 발생된 해시 값이 이미 상관 파일 내에 있는 경우에만 체크로서 액세스될 수 있다. 그 후 상충 모듈은 상충이 있는지 또는 수신된 파일로부터의 단편화된 유닛 및 체크섬이 둘 다 이미 상관 파일 내 서로 연관되어 있는지 결정할 것이다.
전술한 실시예는 비트의 각각의 단편의 유닛이 상관 파일에 액세스하기 이전에 암호 해시 함수 값 알고리즘을 받게 되는 방법을 설명하고 있다. 그렇지만, 대안으로 우선 서브유닛 또는 청크렛의 존재에 대해 상관 파일을 체크하고, 단편화된 유닛이 이미 테이블 내 있지 않은 경우에만 암호 해시 함수 값 알고리즘을 적용할 수 있다. 그때, 청크렛 또는 서브유닛이 이미 상관 파일 내 있으면, 저장된 체크섬 값을 사용한다. 서브유닛 또는 청크렛이 파일 내 있지 않으면, 그때는 해시 값 알고리즘을 적용하고 상충에 대한 체크를 위한 프로토콜로 진입할 것이다. 진정 상충이 있으면, 즉, 동일한 해시 값이 서로 다른 서브유닛 또는 청크렛과 연관되어 있으면, 그때는 이러한 문제를 다루도록 상관 파일을 업데이트할 것이다.
진정 상충의 문제를 다룰 하나의 수단은 상충이 존재하지 않고, Z 비트가 연관되고 Z 비트가, 예를 들어, 8 내지 16개의 영의 균일 길이인 모든 해시 함수 값에 대한 것이다. 비-한정적 예로서, N = 4096 바이트(청크렛 사이즈), X = 512 바이트(서브유닛 사이즈), Y = 128 또는 256 비트(해시 값 사이즈), 및 Z = 8 또는 16 비트(해시 값 확장 사이즈)이다. 그 방법은, 예를 들어, 체크섬이 이전에 저장된 체크섬과 상충하지 않을 때 체크섬의 단부에 8개의 영을 연관시킬 수 있다. 상충의 식별 시에(예를 들어, 서로 다른 단편화된 유닛이 동일한 체크섬과 연관되어 있을 때), 가장 새로운 체크섬에 다른 Z 값이 배정될 수 있다. 그리하여, 상관 파일 내 저장된 바와 같은 Z 값이 00000000이면, 제1 상충하는 체크섬에 대한 Z 값은 00000001일 수 있고 또 다른 상충하는 체크섬은 00000010이어야 한다. 부가적 상충하는 체크섬이 있으면, 각각의 상충하는 체크섬에는 상충하는 체크섬이 식별될 때 다음 Z 값이 배정될 수 있다.
각각의 단편화된 유닛에 대한 체크섬 획득시, 그리고 존재하면 상충하는 모듈의 적용에 뒤따라, 복수의 (그리고 일부 실시예에서는 Z 값을 갖는) 해시 함수 값이 저장을 위해 비-캐시 기록 매체에 쓰여질 수 있다.
해시 값과 비트 마커 또는 빈도 변환기의 조합된 사용
일부 실시예에 있어서, 해시 값을 저장하는 대신에, 그 방법은 저장을 위해 각각의 해시 함수 값에 대한 비트 마커를 발생시킬 비트 마커 테이블의 사용을 통해 저장을 위해 각각의 해시 함수 값을 변환(인코딩이라고도 지칭됨)시키는 것 및 각각의 (그리고 일부 실시예에서는 Z 값을 갖는) 해시 함수 값에 대한 각각의 비트 마커를 비-캐시 기록 매체 내 저장하는 것을 더 포함한다. 비트 마커 테이블을 사용함으로써, 해시 값을 변환 또는 코딩할 수 있다. 그리하여, 해시 값은 비트 마커 테이블에 액세스할 때 입력 서브유닛으로서 역할할 수 있고, 연관된 마커는 출력으로서 역할할 수 있다.
서브유닛은 길이 A에 의해 정의될 수 있되, A에 의해 나누어지는 해시 값의 길이는 정수이다. 어느 비트 스트링이 그 비트 수를 갖지 않으면, 예를 들어, 하나 이상의 비트 스트링이 변환되도록 구성되는 서브유닛 내 수보다 더 작은 비트 수를 가지면, 시스템은, 모든 서브유닛이 동일한 사이즈일 때까지, 비트 예를 들어 영을 부가할 수 있다. 대안으로, 0의 부가는 해시 값을 서브유닛으로 분할하기 이전에 해시 값 레벨 상에서 수행될 수 있다. 더욱, (일부 실시예에서는 Z 값과 조합된 바와 같은) 해시 값이 서브유닛 사이즈보다 더 작으면, 그것들은 서브유닛을 형성하도록 조합될 수도 있고 적합한 사이즈의 서브유닛을 형성하도록 조합 및 단편화될 수도 있다.
코딩된 데이터로 해시 값의 변환은 알고리즘 또는 컴퓨터 프로그램에 의해 수행될 수 있다. 알고리즘 또는 컴퓨터 프로그램의 실행은, 예를 들어, 해시 함수 값 알고리즘의 적용을 또한 제어하는 매니저에 의해 제어될 수 있다. 변환된 데이터라고도 지칭될 수 있는 코딩된 데이터는 또한 2진 신호로 이루어지고, 그것은 그것이 파일의 해시 값으로 다시 변환될 수 있게 하는 방식으로 코딩 및 저장된다. 그리하여, 정보는 정보의 손실 없이 디코딩을 가능하게 하는 인코딩 프로세스 동안 보유된다.
인코딩은 2개의 독립적 목적을 제공할 수 있다. 첫째로, 비트 마커 테이블을 통해 저장을 위해 데이터를 변환함으로써, 보안이 증가된다. 코드를 알고 있는 개체 또는 사람만이 그것을 디코딩하여 문서를 복원할 수 있을 것이다. 둘째로, 코드가 문서에 대응하는 해시 값보다 더 적은 비트를 사용하여 생성되면, 그때는 변환된 데이터와 해시 값의 사용 둘 다 더 적은 저장 공간이 필요로 되게 야기할 것이고 비용이 더 절약될 수 있다.
일부 실시예에 있어서, 비트 마커 테이블을 사용하기보다는, 그 방법은 빈도 변환기의 사용을 통해 저장을 위해 각각의 해시 함수 값을 인코딩하는 것을 더 포함한다. 이들 방법에 있어서, 저장을 위해 각각의 해시 함수 값에 대해, 변환된 비트 스트링이 발생되며, 거기서 동일한 사이즈의 해시 값에 대해, 출력되는 변환된 비트 스트링은 서로 다른 길이이다. 빈도 변환기는 복수의 변환된 비트 스트링의 각각을 복수의 해시 함수 값의 각각과 연관시킬 수 있고, 빈도 변환기에서의 복수의 변환된 비트 스트링은 다시 판독될 때 변환된 비트 스트링이 적합한 해시 값과 상관될 수 있기에 충분히 구별되는 것이다.
해시 값 알고리즘의 사용을: (1) 비트 마커 테이블 적용; 또는 (2) 빈도 변환기 적용 중 어느 것과 조합함으로써, 증가된 보안 및/또는 비용-절약을 도입할 수 있다. 부가적으로, 위에서 설명된 바와 같이, 해시 값은 비트 마커 테이블 또는 빈도 변환기에 대한 입력이다. 그렇지만, 순서는 역으로 될 수 있고 청크렛 또는 서브유닛은 마커를 발생시키도록 비트 마커 테이블 또는 빈도 변환기를 사용하는 프로토콜로 진입할 수 있고, 그들 마커는, 국한되는 것은 아니지만 상충 해결 모듈을 사용하는 방법을 포함하는 여기에서 설명되는 방법 중 어느 하나에 따라 해시 함수 알고리즘에 대한 입력으로서 역할할 수 있다.
중개자 및 매니저
비트 마커 테이블, 빈도 변환기, 해시 값 상관 파일, 및 전술한 파일 및 프로토콜에 액세스 및 사용하기 위한 프로그램 중 어느 하나 또는 각각은 중개자, 매니저 또는 다른 곳 내 저장될 수 있다. 전술한 프로토콜 또는 파일 중 어느 하나 이상이 본 발명의 실시예와 연관하여 사용되고 중개자 또는 매니저 내 저장되지 않을 때마다, 바람직하게는, 그것은 중개자, 매니저 또는 둘 다에 동작가능하게 결합된다. 로컬 또는 원격 저장되는 파일 및 프로그램과 통신하기 위한 방법 및 시스템은 당업자에게 주지되어 있다.
다양한 실시예에 있어서, 매니저는 본 발명의 방법을 제어한다. 예를 들어, I/O(호스트로부터의 출력, 시스템으로의 입력)이 호스트로부터 수신된 후에, 매니저는 호스트에 I/O 스트림의 수신을 확인응답하는 것을 야기할 수 있다.
호스트는 I/O 스트림의 파일을 제1 저장 주소에 저장되는 것으로 기록할 수 있다. 그렇지만, 변환된 비트 스트링은 실제로는 제2 저장 주소에 비-캐시 기록 매체 내 저장될 수 있으며, 여기서 제1 저장 주소는 제2 저장 주소와 동일하지 않다. 더욱, 제1 저장 주소는 제1 파일 사이즈를 갖는 바와 같은 파일을 보여줄 수 있는(또는 그 표시와 연관될 수 있는) 한편, 제2 저장 주소는 제2 파일 사이즈에 대응할 수 있으며, 여기서 제1 파일 사이즈는 제2 파일 사이즈의 적어도 2배 크기 또는 적어도 4배 크기이다.
일부 실시예에 있어서, 제2 저장 주소는 중개자 상에 저장된다. 중개자 내에서, 제2 저장 주소는 비트 필드 내 저장될 수 있다. 여기에서 설명되는 중개자는 비트 마커 테이블, 빈도 변환기 및 해시 값 알고리즘 중 하나 이상을 통해 데이터를 번역하도록 설명된 방법과 독립적으로 또는 그와 연관하여 사용될 수 있다.
일부 실시예에 있어서, 중개자는 다음을 포함하는 하드웨어, 소프트웨어 또는 그 조합이다: (i) 제1 트랙 세트로서, 파일 시스템 정보, 부팅가능성 정보 및 파티션 정보에 대응하는 정보를 포함하거나 포함하고 있는 제1 트랙 세트; (ii) 제2 트랙 세트로서, 제1 트랙 세트의 사본에 대응하는 정보를 포함하거나 포함하고 있는 제2 트랙 세트; (iii) 제3 트랙 세트로서, 파일 시스템 정보, 부팅가능성 정보 및 파티션 정보 이외의 메타데이터에 대응하는 정보를 포함하거나 포함하고 있는 제3 트랙 세트; 및 (iv) 제4 트랙 세트로서, 비트 필드에 대응하는 정보를 포함하거나 포함하고 있는 제4 트랙 세트. 예로서, 중개자는 L2 캐시 내 상주할 수 있고 비트 마커 테이블, 빈도 변환기 또는 해시 값 테이블 중 어느 하나 이상은 사용 중일 때 서버의 RAM 내 상주하고 또한 마커 또는 해시 값이 저장되는 NCM과는 다르거나 동일할 수 있는 솔리드 스테이트 디바이스의 영속적 저장소 내 존재할 수 있다. 업데이트되면, RAM 내 테이블에 그리고 또한 영속적 메모리에 업데이트가 이루어진다.
중개자를 사용하는 것에 부가하여, 본 발명의 다양한 실시예는 매니저의 사용에 대해 호출한다. 매니저는 하나 이상의 모듈을 포함하고 로컬 컴퓨터 상에, 네트워크 상에 또는 클라우드 내 거주할 수 있다. 매니저는 소정 정보의 수신을 조정하거나 또는 그 자체를 수신하거나 그리고 이러한 정보를 중개자에 전송하거나, 또는 중개자에 의해 직접 정보의 수신을 제어하거나 하도록 구성된다. 그리하여, 그 방법은 개시자로부터의 정보가 매니저를 통해 중개자로 흘러가게 되도록 또는 매니저만이 정보의 흐름을 시스템의 다른 컴포넌트로, 예를 들어, 호스트 또는 NCM으로 안내하도록 설계될 수 있다.
본 발명의 다양한 실시예에 있어서, 매니저는 해시 함수 알고리즘 또는 다른 프로토콜, 존재한다면 어느 상충 모듈 및 존재한다면 어느 변환 모듈을 적용하거나 적용되게 야기하고 데이터의 흐름이 중개자에게로 직접 가게 할 수 있다. 매니저는 또한 중개자의 사용을 통한 정보의 저장 및 정보의 검색 및 송신을 제어할 수 있다. 정보를 저장할 때, LBA 번호가 식별될 수 있고 저장될 데이터는 병목을 회피 또는 감축하기 위해 버퍼에 보내질 수 있다. 더욱, L1 및/또는 L2 캐시가 저장 동안 사용될 수 있다.
유사하게, 데이터를 검색할 때, 그 방법은 NCM으로부터 데이터를 호출하고, 버퍼를 채우고, 체크섬 값을 획득하고, 그 후 단편화된 유닛을 재생성하고 재조립하거나, 또는 단편화되지 않으면, 그때는 직접 재조립하여 호스트가 수신 및 리뷰할 수 있는 형태로 정보를 형성할 수 있다. 저장된 데이터가 변환된 데이터이면, 체크섬 값을 획득하기 이전에, 데이터가 디코딩될 수 있다. 이들 단계는 조정될 수 있고, 필수 프로토콜을 실행하는 매니저를 통해 제어할 수 있다.
일부 실시예에 있어서, 매니저는 하나 또는 복수의 중개자의 활동을 제어, 통신 및 조정할 수 있다. 각각의 중개자에 대해, 매니저는 파라미터 세트를 수신한다(또는 그 수신을 조정한다). 이들 파라미터는 파일 시스템 정보, 부팅가능성 정보 및 파티셔닝 정보 중 하나, 2개 또는 3개 전부로 이루어지거나, 본질적으로는 그것으로 이루어지거나, 그것을 포함할 수 있다. 매니저는 이러한 정보가, 예약 1 또는 R1이라고 지칭될 수 있는, 중개자 상의 제1 트랙 세트 내 저장되게 야기한다. 파일 시스템은 예약 블록이 어떻게 사용되게 되는지 지시할 것이다. 예를 들어, NTFS를 사용할 때, 섹터 1-2는 MBR(master boot record)에 대한 것일 수 있고 섹터 3는 $MFT에 대한 것일 수 있다. 선택사항으로서, 이들 트랙은, 예약 2 또는 R2라고 지칭될 수 있는, 제2 트랙 세트 내 복사될 수 있다.
매니저는 또한 선행하는 단락에서 설명된 파라미터에 부가하여 메타데이터를 수신할 수 있다. 메타데이터는 중개자 상의 제3 트랙 세트 내 저장된다. 매니저가 파라미터 및 메타데이터를 수신하는 시각에 또는 추후 시각에, 그것은 또한 비-캐시 매체 상의 저장을 위해 하나 이상의 파일을 수신할 수 있다. 각각의 파일은 파일 이름으로 수신된다. 파일 이름은 파일을 송신하는 호스트에 의해 발생되고 호스트의 파일 시스템에 의해 정의될 수 있다. 예를 들어 SAN 또는 NAS 또는 그 조합이거나 그 일부분일 수 있는 매니저는, 파일 이름을 갖는 파일의 수신 시에, 저장을 위해 여기에서 설명된 단계를 자동으로 실행할 수 있다.
본 발명의 시스템은 해시 함수 값 알고리즘 및 변환을 위한 알고리즘이 중개자 또는 매니저 내에든, 또는 중개자 또는 매니저에 동작가능하게 결합되는 다른 하드웨어 및/또는 소프트웨어 내에든 저장되게 되도록 설계될 수 있다. 알고리즘 중 어느 하나 또는 둘 다는 또한 파일 이름이 중개자 내 저장되게 야기할 수 있다. 중개자가 물리적으로 위치하는 곳에 대한 제한은 없다. 그렇지만, 바람직하게는, 그것은 바람직하게는 중개자로부터 원격에 위치하는 호스트와 통신할 수 있는 컴퓨터 또는 호스트와 통신하도록 구성된다. 중개자는 또한, 선택사항으로서는 중개자, 어느 매니저 및 호스트로부터 원격에 있는, 코딩된 데이터 세트가 저장되는 기록 매체, 예를 들어, 비-캐시 매체와, 직접적으로 또는 간접적으로(예를 들어, 매니저를 통해), 통신하도록 구성된다. 위에서 언급된 바와 같이, 중개자는 파일 이름을 식별하는 사용자가 비-캐시 저장 매체로부터 코딩된 데이터 세트를 검색할 수 있게 한다.
캐시
위에서 언급된 바와 같이, 일부 실시예에 있어서는, 원시 데이터의 수신 시에, 본 발명의 방법은 수신의 확인이 호스트에 자동으로 반환되게 야기할 수 있다. 하나의 QoS(서비스 품질) 프로토콜에 있어서, 데이터 파일은 I/O를 통해 수신되고 즉시 L1 캐시에 보내진다. 수신 시에, 확인응답이 다시 I/O를 통해 L1 캐시로부터 보내진다. L1 캐시로부터, 데이터 파일은 L2 캐시에 보내질 수 있으며, 그러면 다시 L1 캐시에 확인응답을 송신한다. L2 캐시는 또한 장기간 저장을 위해 비-캐시 매체(NCM)에 데이터 파일을 보낼 수 있다. 차례로 NCM은 다시 L2 캐시에 확인응답을 보낼 수 있다.
일부 실시예에 있어서, 중개자는 L1 캐시 내 힙(동적으로 할당된 메모리) 내 상주하거나 그에 동작가능하게 결합될 수 있다. 대안으로, 중개자는 카드 내 상주할 수 있거나, 또는 L2 캐시의 일부분이거나 그에 동작가능하게 결합될 수 있다.
당업자가 알고 있는 바와 같이, 중개자를 L1 대 L2에 배치한다는 결정은 저장된 데이터의 사용의 빈도와 같은 인자에 의해 충격을 받을 것이다. 그리하여, L1 캐시는 최종 사용자 또는 시스템에 의해 빈번하게 사용되는 데이터를 저장하도록 사용되는 한편, L2 캐시는 다소 빈번하게 액세스되는 데이터에 대해 사용될 수 있다.
다른 하나의 QoS 프로토콜에 있어서, I/O를 통해, 데이터 파일은 L1 캐시에 의해 수신된다. 데이터 파일은 L1 캐시로부터 NCM 및 L2 캐시 둘 다에 전송된다. L2 캐시 및 NCM의 각각은 L1 캐시에 확인응답을 보낸다. L2 캐시 및 NCM 중 하나 또는 둘 다로부터 확인응답을 수신하기 전에든 또는 그 후에든, L1 캐시는 I/O를 통해 확인응답을 보낸다.
파일 상관
본 발명의 다양한 실시예에 있어서, 호스트는 제1 저장 주소에서 저장될 각각의 파일을 이해할 것이다. 제1 저장 주소는 호스트에 의해 섹터 맵 내 저장되고 LUN에 대응할 수 있다. 그것은 또한 유닛의 시작 및, 암시적으로든 명시적으로든, 끝, 섹터, 또는 파일에 대응하는 블록을 포함할 수 있다. 제1 저장 주소는 호스트가 파일이 저장 디바이스 또는 스토리지 에어리어 네트워크 내 위치하고 있다고 믿는 곳에 대응할 것이다. 호스트는 이러한 제1 주소를 사용하여 그 저장된 문서 또는 파일을 추적하고 그것들을 검색할 것이다. 제1 저장 주소는 가상 주소이다, 즉, 그것은 데이터가 실제로 저장되는 곳에 대응하지 않는다.
당업자는 인식할 바와 같이, 호스트가 제1 저장 주소를 발생시키고 그것을 본 발명의 시스템에 SCSI 커맨드 및 선택사항으로서는 연관된 섹터 또는 LBA 번호(들)와 함께 보내는 방법 및 시스템이 사용될 수 있다. 중개자는 파일 이름, 호스트가 파일의 위치라고 생각하는 것 및 호스트로부터 수신된 대로의 파일, 즉, 원시 데이터 및 어느 헤더 또는 풋터 데이터의 저장 사이즈를, 파일이 재생성되어 나올 수 있지만 예를 들어 해시 값 알고리즘, 비트 마커 테이블 및 빈도 변환기 중 하나 이상을 통해 변환된 정보를 포함하고 있을 수 있는, 데이터의 실제 저장 주소인, 제2 저장 주소와 상관시킬 수 있다. 대안으로, 중개자는 파일 이름만을 저장할 수 있고, 선택사항으로서, 그것은 파일에 대한 제1 저장 주소를 수신하지 않을 수 있다. 위에서 언급된 바와 같이, 저장 주소는 데이터의 선형 조직에 기반하기 때문에, 그것들은 제1 사용자 인지된 LBA만을 나열하거나 명시적으로 모든 위치를 나열함으로써 저장된 정보의 사이즈를 암시적으로 포함하고 있을 수 있다.
위 단락은 호스트가 그것이 제1 저장 주소라고 믿는 것을 제공할 것이라고 기술하고 있기는 하지만, 정보는 호스트가 통해 중개자와 직접적으로 또는 간접적으로 통신하는 전달자, 호스트 내에 있거나 호스트에 동작가능하게 결합된 모듈, 또는 중개자 및/또는 매니저 내에 있거나 그에 동작가능하게 결합된 모듈 중 어느 하나인 다른 개체에 의해 발생될 수 있다. 당업자는 인식할 바와 같이, 저장 디바이스 상의 데이터 파일의 위치를 식별시키는 저장된 정보는 포인터라고 지칭될 수 있다. 파일에 대하여, 포인터는 사용자가 데이터가 위치하고 있을 것이라고 믿는 NCM 상의 위치와는 다른 위치(예를 들어, 블록)로부터 데이터의 검색을 안내할 수 있다.
선택사항으로서, 파일을 파일 유형과 연관시킬 수 있다. 파일 유형은 데이터의 수신자가 어느 운영 체제가 그것을 여는데 사용되어야 하는지 알고 있도록 안내할 것이다. 일부 실시예에 있어서, 파일 유형과의 연관은 개시자 또는 클라이언트 또는 호스트에서 행해진다.
예약 트랙
위에서 언급된 바와 같이, 중개자는 제1 예약 트랙 세트(R1) 및 제2 예약 트랙 세트(R2)를 포함할 수 있다. 일부 실시예에 있어서, 제2 예약 트랙 세트(R2)는 제1 예약 트랙 세트(R1)의 사본이다. 부가적으로, 일부 실시예에 있어서는, 제1 예약 트랙 세트(R1) 내 오류에 대해 체크하도록 제2 예약 트랙 세트(R2)를 사용할 수 있다.
R1은 호스트 개시를 위한 중심 포인트로서 기능하도록 구성될 수 있다. 그리하여, 호스트는 R1에 보낼 파라미터를 선택할 수 있다. 중개자는 이러한 정보를 호스트로부터 직접적으로 또는 매니저를 통해 간접적으로 수신할 수 있다. R2는 바람직하게는 호스트에 절대 노출되지 않는다. 그리하여, 중개자 자신 또는 매니저만이 정보가 R2 내 저장되게 야기할 수 있다. R1 및 R2의 각각은, 예를 들어, 16개의 섹터를 포함하고 있고 호스트 수정자와 같은 실제 데이터로 채워질 수 있다. 관용적으로, 번호 매김은 0에서 시작할 수 있다. 그리하여, R1은, 예를 들어, 섹터(또는 트랙) 0 - 15를 포함하고 있을 수 있고 R2는 섹터(또는 트랙) 16 - 31를 포함하고 있을 수 있다. 그렇지만, 중개자는 16개 트랙의 초기 사이즈 너머로 R1 및 R2의 각각의 확장에 대해 허용하도록 구성될 수 있다.
일부 실시예에 있어서, R1은 고유 예약 섹터 정보 및 파티션 정보를 포함하고 있다. 파티션 정보 내, 파일 시스템 정보를 저장할 수 있다.
비-한정적 예로서 그리고 당업자는 알고 있는 바와 같이, NFTS 파일 시스템으로 볼륨을 포매팅할 때, $MFT(마스터 파일 테이블), $Bitmap, $Log 파일 및 다른 것들과 같은 메타데이터 파일을 생성한다. 이러한 메타데이터는 NFTS 볼륨 상의 파일 및 폴더 전부에 대한 정보를 포함하고 있다. NTFS 볼륨 상의 제1 정보는 파티션 부트 섹터($Boot 메타데이터 파일)이고, 섹터 0에 위치하고 있을 수 있다. 이러한 파일은 기본 NTFS 볼륨 정보 및 주 메타데이터 파일 $MFT의 위치를 기술할 수 있다.
포매팅 프로그램은 $Boot 메타데이터 파일에 대해 처음 16개의 섹터를 할당한다. 제1 섹터는 부트스트랩 코드를 갖는 부트 섹터이고, 다음의 15개 섹터는 부트 섹터의 IPL(초기 프로그램 적재기)이다.
R1 및 R2의 트랙에 부가하여, 중개자는 부가적 메타데이터를 저장할 수 있다. 이러한 메타데이터는, 예를 들어, 디바이스가 실제로 이용가능한 것보다 더 많은 물리적 자원을 갖는 것처럼 보일 수 있게 하는 가상화 기술에 대응하는, 씬 프로비저닝 전략의 실행을 가능하게 하는 정보에 대응할 수 있고, 그것은, 예를 들어, 트랙 32 - 39일 것인, R2 후 8개 트랙 내 포함되어 있을 수 있다. 메타데이터는 또한 LUN QoS, VM 및 WORM과 같은 특징에 대해 제공할 수 있다.
일부 실시예에 있어서, 시스템은 SAN 인덱서를 포함하고 있을 수 있다. SAN 인덱서는 무엇이 R1 및 R2 내 있는지 체크하고 그 정보를 추출할 수 있다. 이러한 정보는, 예를 들어, 텍스트 검색에 의해 쉽게 검색될 수 있는 데이터베이스 내 넣어질 수 있다.
비트 필드
중개자는 또한 비트 필드에 대응하는 정보를 포함하고 있거나 포함할 수 있다. 비트 필드는 데이터가 저장 매체 내 물리적으로 저장되어 있는 곳을 나타내는 정보를 포함하고 있고, 메타데이터가 트랙 32 - 39 내 위치하고 있으면, 비트 필드의 섹터 번호는 트랙 40에서 시작할 수 있다. 데이터의 위치와 호스트의 파일 이름 간 상관이 저장되는 것은 중개자의 비트 필드 내이다. 그리하여, 그것은 섹터 맵으로 이루어지거나, 본질적으로는 그것으로 이루어지거나, 그것을 포함할 수 있다. 중개자의 비트 필드 컴포넌트로부터의 이러한 정보는 어느 디바이스 상의 실제 공간 절약을 결정하는데 사용될 수 있다. 예를 들어, 절약된 공간의 백분율 = 1 - [(실제로 사용된 공간)/(호스트에 의해 매핑된 바와 같은 공간)]. 일부 실시예에 있어서, 본 발명의 방법에 따라 데이터를 변환함으로써 절약된 공간은 적어도 50%, 적어도 60%, 적어도 70% 또는 적어도 80%이다. 이들 절약은 파일당이거나 또는 디바이스 상의 모든 파일에 걸쳐 평균될 수 있다.
실무 사항으로서, 중개자는 파일 데이터가 저장되는 디스크 또는 기록 매체 상에 위치하지 않는 것이 바람직하다. 부가적으로, 중개자는 대응하는 디스크 또는 기록 매체의 총 메모리의 약 0.1 - 0.2%만을 필요로 하는 것이 바람직하다.
공간 절약으로부터 경제적 가치를 제공하는 것에 부가하여, 본 발명의 다양한 실시예는 데이터의 무결성을 보호하도록 살펴볼 때 효율 증가에 대한 문호를 개방한다. 따라서, 본 발명의 다양한 실시예는 데이터를 백-업하기 위한 신규의 비-자명한 기술을 제공한다.
많은 실시예에 있어서, 저장된 파일은 호스트로부터 수신된 대로의 원시 데이터 파일보다 더 작을 것이기 때문에, 그에 대해 저장 공간은 더 적게 필요로 된다. 그리하여, 파일을 재생성하는데 필요한 데이터는 호스트가 사용되고 있다고 인지하는 것보다 그리고 제1 저장 주소가 시사하는 것보다 더 작은 위치 내 저장될 수 있다. 파일이 저장되는 실제 위치는 제2 저장 주소라고 지칭될 수 있다. 그리하여, 각각의 파일에 대해 호스트가 파일이 저장되어 있다고 믿는 곳인 제1 저장 주소, 및 코딩된 파일이 실제로 저장되어 있는 곳인 제2 저장 주소가 있을 것이다.
하나 이상의 블록에 대응할 수 있는 주어진 파일에 대하여 제1 저장 주소 및 제2 저장 주소는 하나 이상의 중첩하는 블록 세트 또는 저장 디바이스 내 동일한 블록에 위치하고 있는 것이 가능하다. 그렇지만, 바람직하게는 파일 중 적어도 하나, 적어도 50%, 적어도 60%, 적어도 70%, 적어도 80%, 적어도 90% 또는 100%에 대해 제1 저장 주소 및 제2 저장 주소 내 블록의 중첩은 없다. 부가적으로, 호스트가 중개자가 인지하는 것과 동일한 저장 주소를 인지하더라도, 데이터가 코딩될 때 호스트는 데이터를 우선 디코딩하지 않고는 파일을 재생성할 수 없다. 일부 실시예에 있어서, 호스트는 코드를 모르고 있고, 그리하여 저장된 데이터를 디코딩할 수 없다.
일부 실시예에 있어서, 중개자는 파일에 대응하는 청크렛(들)을 수신하고 그것들을 L1 또는 L2 캐시 내 일시적으로 저장할 수 있다. L2 캐시가 존재하면, L2 캐시는 호스트에 수신을 확인응답하고, 선택사항으로서는 호스트에 제1 저장 주소를 제공하거나 확인해 줄 수 있다. 당업자는 인식할 바와 같이, 수신의 확인응답 및 제1 저장 주소의 송신은 제2 저장 주소에서의 저장 이전에 행해질 수 있고 인코딩이 수행되면 그때는 인코딩 이전 또는 그 후이다. 확인응답이 언제 보내지는지에 무관하게, 파일의 실제 저장 주소와 가상 저장 주소의 상관은 비트 필드 내에서 추적되는 것이 바람직하다.
데이터의 백-업
소정 실시예에 있어서는 데이터의 백-업을 용이하게 하도록 2개의 중개자를 사용할 수 있다. 예를 들어, 제1 중개자에서는 제1 기록 매체 상의 제1 섹터 또는 제1 섹터 클러스터 내 저장되는 데이터 파일을 파일 이름과 상관시킬 수 있다. 위에서 언급된 바와 같이, 제1 중개자는 파일 이름을 식별하는 개체 또는 사용자가 기록 매체로부터 데이터 파일을 검색할 수 있게 하도록 구성된다.
제2 중개자를 발생시키는 데이터 보호 프로토콜이 실행될 수 있다. 제2 중개자는 시간 T1에서 제1 중개자의 정확한 사본일 것이다. 그리하여, T1에서, 제1 중개자와 제2 중개자 둘 다는 제1 기록 매체 상의 동일한 섹터 또는 섹터 클러스터(및 내부 위치)를 가리킬 것이다.
시간 T1 후에, 예를 들어 T2에서, 호스트는 주어진 섹터 또는 섹터 클러스터 상의 주어진 위치에 저장되어 있는 파일을 업데이트하기 위해 탐색할 수 있다. 호스트는 제1 저장 주소에 저장된 데이터를 변경하지 않을 것이다. 섹터 또는 섹터 클러스터 상의 정보가 겹쳐 쓰여지게 야기하기보다는, 제1 중개자는 새로운 정보가 다른 섹터 또는 섹터 클러스터 내 위치에 대응하는 제3 저장 주소에 쓰여지게 야기하고 이러한 새로운 저장 주소와 제1 저장 주소 및 파일 이름을 상관시킬 수 있다.
그리하여, 제1 중개자는 호스트가 정보가 특정 저장 주소에 겹쳐 쓰여지고 있다고 믿더라도 새로운 섹터 또는 섹터 클러스터를 가리킬 것이다. 따라서, 호스트는 섹터 클러스터에 대한 그 주소를 업데이트할 필요가 없을 것이다.
제2 중개자는 업데이트되지 않을 것이고, 그것은 파일이 저장된 제1 위치와 파일 이름을 상관시키기를 계속할 것이다. 2개의 중개자의 이러한 사용은, 호스트가 파일이 그것이 T1에서 그리고 또한 T2에서 존재하였을 때 저장되고 있음을 나타내도록 그 파일 시스템을 업데이트할 필요가 있게 야기하지 않고, 데이터가 T1에서 존재하였을 때 그것의 스냅샷을 제공할 수 있게 할 것이다. 그리하여, 스냅샷은 시간 T1에서 저장되는 모든 데이터 파일을 로킹하고 누구도 그들 물리적 파일을 삭제하거나 겹쳐 쓰지 못하게 방지한다. 그렇지만, 호스트가 그들 파일을 개정하기를 바라면, 그것은 그것이 그렇게 행하고 있다고 믿고 작업할 수 있는데, 그때 실제로는 새로운 파일이 저장된다. 이 방법은 섹터 및 섹터 클러스터와 연관하여 설명된다. 그렇지만, 그것은 또한 섹터 또는 섹터 클러스터 내 배열되어 있지 않은 비-캐시 매체와 작업할 것이다. 예를 들어, 그것들은 LUN 내 LBA에 의해 조직될 수 있다.
위에서 시사된 바와 같이, 이러한 방법은 제1 중개자, 제2 중개자 및 비-캐시 저장 매체를 포함하는 시스템에 의해 구현될 수 있다. 제1 중개자, 제2 중개자 및 기록 매체의 각각은 비-일시적 매체로 이루어지거나, 본질적으로는 그것으로 이루어지거나, 그것을 포함하는 별개의 디바이스 상에 저장되거나 그로부터 형성될 수 있다. 전술한 시스템은 동일한 기록 매체의 여러 다른 섹터의 사용을 나열하지만 또한 서로 다른 기록 매체의 여러 다른 섹터에 씀으로써 사용될 수 있다. 부가적으로, 시스템 내에서 중개자 및 기록 매체는 서로에 그리고 선택사항으로서는 명령어를 저장하는 하나 이상의 컴퓨터 또는 CPU에 동작가능하게 결합되며, 그 명령어는 그것들이 그들 의도된 기능을 수행하게 그리고 하나 이상의 포털을 통해 네트워크를 통하여 하나 이상의 호스트에 통신하게 야기한다. 더더욱, 이러한 실시예가 2개의 중개자의 사용과 연관하여 설명되고 있기는 하지만, 2개의 별개의 중개자보다는 동일한 중개자의 2개의 섹션을 사용하여 시스템을 구현할 수 있다.
더욱 시스템은 로킹 모듈과 구성될 수 있다. 로킹 모듈은 소정 시간에서는 쓰여졌던 하나 이상의 블록에서의 개정, 겹쳐 쓰기 또는 삭제를 방지할 수 있다. 로킹 모듈은 또한 새로운 블록의 쓰기 및 로킹되지 않은 그들 새로운 블록의 개정에 대해 허용하도록 설계될 수 있다. 그리하여, 로킹 모듈은 호스트, 사용자 또는 시스템 관리책임자가 소정 시간에서는 쓰여졌던 소정 블록을 선택할 수 있게 하거나 또는 겹쳐 쓰여지지 않을 소정 시간에서는 쓰여졌던 모든 블록을 선택할 수 있게 하도록 구성될 수 있다.
더욱, 디폴트로 제1 중개자를 통해 파일 검색 및 개정, 겹쳐 쓰기 또는 삭제에 대한 모든 요청을 보내는 선택 모듈이 있을 수 있다. 선택 모듈은 또한 호스트가 로킹 기술이 적용된 시간에서는 하나 이상의 파일의 더 오래된 버전이라고 믿을 수 있는 것의 복구를 허용하도록 구성될 수 있다. 선택사항으로서, 선택 모듈 전체로의 액세스는 권한 부여를 갖는 사람, 예를 들어, 시스템 관리책임자로 제한될 수 있다.
데이터를 백-업하기 위한 전술한 시스템은 2개의 중개자의 맥락에서 설명되어 있다. 그렇지만, 2개보다 많은 중개자가 저장된 파일 또는 파일 버전의 이력을 캡처링하도록 사용될 수 있다. 예를 들어, 적어도 3개, 적어도 4개, 적어도 5개, 적어도 10개 등의 중개자가 사용될 수 있다. 부가적으로, 호스트는 중개자가 정기적 간격으로, 예를 들어, 매주, 매월, 분기마다 또는 매년, 또는 비정기적 간격으로, 예를 들어, 요구에 따라 스냅샷을 찍게 할 수 있다.
데이터를 백업하기 위한 다른 방법에 의하면, 비-캐시 매체의 클론이 만들어질 수 있다. 이러한 방법에 있어서, 제1 중개자에서는, 비-캐시 저장 매체 상에 저장되는 데이터의 복수의 위치와 복수의 파일 이름을 상관시킨다. 제1 중개자는 특정 파일 이름을 식별하는 사용자가 특정 파일 이름에 대응하는 제1 비-캐시 저장 매체로부터 데이터 파일을 검색할 수 있게 하도록 구성된다. 특정 파일 전체 또는 일부는 제1 섹터 또는 섹터 클러스터 내 저장될 수 있다.
제2 비-캐시 저장 매체 및 제2 중개자에 복수의 데이터 파일(또는 제1 비-캐시 저장 매체의 모든 데이터 파일)의 사본을 만들 수 있다. 제2 중개자는 시간 T1에서 제1 중개자의 사본이고 제2 비-캐시 저장 매체에 동작가능하게 결합된다. T1 후에 있는 시간 T2에서, 시스템은 제1 비-캐시 저장 매체 상의 상기 제1 섹터 또는 섹터 클러스터 내 저장되어 있는 데이터 파일에 대한 개정을 저장할 수 있다. 그렇지만, 제2 비-캐시 매체 상의 대응하는 위치에 대한 변경은 이루어지지 않을 것이다. T2 후에 사용자가 파일을 요청할 때, 그 또는 그녀는 제1 중개자를 거쳐가고 파일의 가장 최근 저장된 버전을 검색할 것이다. 그렇지만, 시스템 관리책임자는 제2 비-캐시 매체 상에 저장되어 있을 더 앞선 버전으로의 액세스를 가질 것이고 제2 중개자를 거침으로써 그것을 검색할 수 있다.
이러한 방법은 제1 중개자, 제2 중개자, 제1 비-캐시 저장 매체 및 제2 비-캐시 저장 매체를 포함하는 시스템에 의해 구현될 수 있다. 제1 중개자, 제2 중개자 및 데이터 파일을 저장하기 위한 제1 및 제2 기록 매체의 각각은 비-일시적 매체로 이루어지거나, 본질적으로는 그것으로 이루어지거나, 그것을 포함하는 별개의 디바이스 상에 저장될 수 있다. 부가적으로, 제1 중개자는 호스트로부터 유도되는 파일 이름을 제1 기록 매체의 제1 LUN과 상관시키고, 제2 중개자는 동일한 파일 이름을 제2 기록 매체 상의 제2 LUN과 상관시킨다. 일부 실시예에 있어서, 제1 비-캐시 매체 내 저장되는 가장 최근 파일은 구형 파일이 제2 비-캐시 매체 내에서 갖는 동일한 LUN을 갖는다.
데이터 검색
본 발명의 방법 중 어느 하나에 의하면, 변환된 형태로 저장되는 어느 데이터라도 그것을 호스트에 반환하기 전에 검색 및 디코딩될 수 있다. 변환된 데이터의 검색을 허용하는 하나 이상의 알고리즘의 사용, 위에서 설명된 참조 테이블 또는 빈도 변환기의 액세스, 및 다시 균일 비트 스트링 및 청크렛으로의 변환을 통해, 파일은 호스트에 대해 재생성될 수 있다. 비-한정적 예로서, 데이터는, 예를 들어, 고유 비트 스트링의 사용 또는 균일 사이즈의 마커의 사용을 통해 하나의 마커가 끝나는 곳의 표시를 포함하고 있는 포맷으로 변환 및 저장되었을 수 있다.
저장된 바와 같은 데이터의 검색은 지금 알려져 있거나 알려지게 되는 그리고 당업자가 본 발명과 연관하여 사용된다고 인식할 기술 및 프로세스를 통해서일 수 있다. 선택사항으로서, 매니저는 파일의 저장 및 검색을 조정한다. 일부 실시예에 있어서, 마커와 같은 NCM으로부터의 데이터는 병렬 처리를 통해 검색된다.
하나의 방법에 있어서는, 기록 매체에 액세스함으로써 시작한다. 기록 매체는 복수의 마커를 순서대로 저장하고, 이들 마커로부터, 파일을 재생성할 수 있다. 액세스는 호스트가 파일의 검색을 요청하고 그 요청을 스토리지 에어리어 네트워크에 송신함으로써 또는 스토리지 에어리어 네트워크의 관리책임자에 의해 개시될 수 있다.
존재한다면 중개자에 의해 식별되는 위치로부터 기록 매체로부터 데이터가 검색된 후에, 데이터가 변환되었으면, 그때는 I/O 스트림 또는 I/O 스트림의 단편화된 유닛으로 다시 변환될 해시 값 또는 청크렛을 형성하도록 사용될 수 있는 비트로 복수의 마커(또는 빈도 변환기를 통해 변환되었던 데이터)를 번역한다. 마커는 각각의 마커가 청크렛에 대응하게 되도록 또는 각각의 마커가 서브유닛에 대응하게 되도록 저장될 수 있고 복수의 서브유닛은 청크렛을 형성하도록 조합될 수 있다. 저장된 포맷에서, 마커는, 소망 문서 또는 파일의 재생성에 대해 허용하는 방식으로, 청크렛(또는 해시 값) 내 비트의 재생성 및 청크렛(또는 해시 값)의 순서의 재생성을 허용하는 순서로 배열된다.
데이터가 변환되면, 그때는 마커를 청크렛으로 번역하기 위해, 비트 마커 테이블 또는 빈도 변환기에 액세스할 수 있다. 비트 마커 테이블 또는 빈도 변환기 내에는, 파일 내 각각의 고유 비트 스트링 내 또는 각각의 고유 비트 스트링과 연관되어 있는 고유 마커가 있을 수 있다. 테이블이 테이블 II과 유사한 포맷으로 조직되면, 번역 후에, 각각의 서브유닛 및 청크렛이 동일한 사이즈이게 하기 위하여 영이 부가될 수 있다. 디코딩할 때, 코딩에 이것을 사용하였을 방식과 반대로 비트 마커 테이블 또는 빈도 변환기를 사용한다. 선택사항으로서, 동일 테이블을 사용하고 입력과 출력을 역으로 하는 대신에, 별개의 테이블을 사용할 수 있다.
다른 실시예에 대해서와 같이, 각각의 청크렛은 N 비트 길이일 수 있으며, 여기서 N은 1보다 더 큰 정수 수이고 각각의 서브유닛은 A 비트 길이이며, 여기서 A는 정수이다. 마커를 청크렛으로 번역하기 위해, 비트 마커 테이블 또는 빈도 변환기에 액세스할 수 있다.
청크렛이 형성된 후에, 문서가 복원되어 나올 수 있는 2진 데이터에 대응하는 출력을 가질 것이다. 선택사항으로서, 파일을 파일 유형과 연관시킬 수 있다. 예를 들어, 호스트는 MIME 번역기를 추적하고 반환시 그것을 파일과 재-연관시킬 수 있다. 파일 유형은 데이터의 수신자가 어느 운영 체제가 그것을 여는데 사용되어야 하는지 알고 있도록 안내할 것이다. 당업자는 인식할 바와 같이, 스토리지 에어리어 네트워크는 파일 유형을 추적할 필요가 없고, 일부 실시예에서는 하지 않는다.
청크렛이 형성된 후에, 일부 실시예에서는, 파일이 복원되어 나올 수 있는 2진 데이터에 대응하는 출력을 가질 것이다. 다른 실시예에 있어서, 변환된 데이터는 해시 값에 대응하고, 해시 값은 I/O 스트림 자체 또는 I/O 스트림의 단편화된 유닛을 생성하도록 우선 사용되어야 한다.
절단된 데이터에 관하여, 비트 마커 테이블 또는 빈도 변환기를 이용할 필요가 없을 때에도, 데이터를 검색할 수 있다. 기록 매체에 액세스함으로써 그렇게 할 수 있는데, 여기서 기록 매체는 복수의 위치 내 복수의 데이터 유닛을 저장하되, 각각의 데이터 유닛은 복수의 비트를 포함하고 있고 데이터 유닛의 최대 사이즈는 제1 비트 수이고, 적어도 하나의 데이터 유닛은 제2 비트 수를 포함하고 있되, 제2 비트 수는 제1 비트 수보다 더 작다.
다음으로 데이터 유닛을 검색하고 데이터 유닛에 대응하는 청크렛 세트를 발생시키도록 N 비트 길이보다 더 적은 어느 데이터 유닛의 일단에 하나 이상의 비트 예를 들어 0을 부가할 수 있으며, 각각의 청크렛은 동일한 비트 수를 포함하고 있고; 데이터 유닛의 순서에 대응하는 순서로 청크렛 세트를 포함하는 출력을 발생시킬 수 있다. 절단된 데이터가 영을 제거함으로써 형성되었으면, 그때는 데이터를 검색할 때, 영을 다시 부가할 것이다. 부가적으로, 저장된 데이터 유닛이 청크렛의 서브유닛이었으면, 시스템은 균일 사이즈의 서브유닛을 발생시키기 위해 우선 다시 영을 절단된 서브유닛에 부가하고 그 후 서브유닛을 조합하여 청크렛을 형성할 수 있다.
룩-업 테이블이 사용될 때, 바람직하게는 그것은 컴퓨팅 디바이스의 메모리 내 저장된다. 일부 실시예에 있어서, 룩-업 테이블은 정적이고 마커는 기-결정되어 있다. 그리하여, 시간에 걸쳐 하나 이상의 다른 문서 유형의 복수의 문서를 저장할 때, 동일한 테이블이 사용될 수 있다. 선택사항으로서, 그것은 호스트의 위치에 또는 스토리지 에어리어 네트워크의 일부분으로서 저장될 수 있다.
호스트로부터 데이터의 수신
다양한 실시예를 더 예시하기 위해 그리고 맥락을 제공하기 위해, 아래에서는 본 발명의 방법을 구현할 시스템을 형성하도록 조합될 수 있는, 사용할 수 있는 특정 하드웨어를 참조한다. 하드웨어는 위에서 설명된 프로세스가 호스트로부터 하나 이상의 데이터 파일의 수신 시 하나 이상의 프로세서에 의해 자동화 및 제어될 수 있게 하도록 구성될 수 있다.
일부 실시예에 있어서, 호스트는 제1 위치에서 어떠한 방식으로라도 문서 및 컴퓨터 파일을 발생시킬 수 있다. 문서는 호스트의 운영 체제에 의해 발생되고 호스트의 파일 시스템에 의해 저장을 위해 조직될 수 있다. 호스트의 운영 체제는 파일 이름을 그 메모리 내 로컬 저장할 수 있다. 본 발명은 호스트가 사용하는 파일 시스템 또는 운영 체제의 유형에 의해 제한되지 않는다. 비-한정적 예로서, 호스트는 다음의 하드웨어 컴포넌트 중 하나 이상을 갖는 네트워크 내 컴퓨터 또는 컴퓨터 세트를 포함할 수 있다: 메모리, 저장소, 입력 디바이스, 출력 디바이스, 그래픽 사용자 인터페이스, 하나 이상의 통신 포털 및 중앙 처리 장치.
그 제1 위치에서 SAP는 문서 또는 파일에 상관시키는 데이터를 저장하기 위한 프로토콜을 실행한다. SAP은, 예를 들어, 사이즈가 4K인 청크렛 또는 I/O 스트림으로 데이터를 포매팅한다.
데이터는 SAN을 통하여 하나 이상의 모듈을 갖는 네트워크 또는 컴퓨터에 또는 데이터를 수신하도록 구성되는 컴퓨터 또는 컴퓨터 세트에 보내질 수 있다. 이러한 수신하는 컴퓨터는 다음 하드웨어 컴포넌트 중 하나 이상을 포함할 수 있다: 메모리, 저장소, 입력 디바이스, 출력 디바이스, 그래픽 사용자 인터페이스, 중앙 처리 장치, 및 로컬 및/또는 네트워크를 통하여 하나 이상의 저장 디바이스 및 하나 이상의 호스트와 정보의 통신을 가능하게 하도록 구성되는 하나 이상의 통신 포털.
부가적으로, 하드웨어, 소프트웨어 또는 하드웨어와 소프트웨어의 조합 상에 실행가능한 컴퓨터 코드를 저장하는 컴퓨터 프로그램 제품이 있을 수 있다. 컴퓨터 프로그램 제품은 본 발명의 방법을 수행하도록 구성되는 하나 이상의 모듈로 분할되거나 그와 통신할 수 있을 수 있고 하나 이상의 비-일시적 매체 내 저장될 수 있다.
예를 들어, 레벨 1(L1) 캐시 및 레벨 2 캐시(L2)가 있을 수 있다. 당업자는 알고 있는 바와 같이, 캐시 기술의 사용은 전통적으로 데이터를 저장함에 있어서의 효율을 증가시킬 수 있게 하여 왔다. 본 발명에 있어서는, 일례로서, 데이터는 SAN을 통하여 캐시에 보내질 수 있고 데이터는 해시 함수 알고리즘에 액세스하기 이전에, 비트 마커 테이블을 참고하기 이전에, 빈도 변환기를 참고하기 이전에, 그리고 비트를 절단하기 이전에, 그리고/또는 해시 함수 알고리즘을 참고한 후에, 비트 마커 테이블을 참고한 후에, 빈도 변환기를 참고한 후에, 및 비트를 절단한 후에 캐시에 보내질 수 있다.
섹터 사이즈가 512B라고 상정하면, 사이즈가 4K인 각각의 청크렛에 대해, 호스트는 사용될 8개의 저장 섹터를 예상할 것이다.
시스템
본 발명의 다양한 실시예는 데이터 저장 및 검색 시스템을 제공한다. 일 실시예에 있어서, 시스템은 비-캐시 데이터 저장 매체, 중개자 및 매니저를 포함한다. 이들 엘리먼트 간에 그리고 선택사항으로서는 개시자와의 통신은 유선, 무선 또는 그 조합인 네트워크를 통하여서일 수 있다.
비-캐시 데이터 저장 매체는, 예를 들어, 하나 이상의 디스크 또는 솔리드 스테이트 드라이브로 이루어지거나, 본질적으로 그것으로 이루어지거나, 그것을 포함할 수 있다. 사용 중일 때, 비-캐시 데이터 저장 매체는, 본 발명의 방법 중 하나 이상에 따라 처리되지 않은 파일에 비교할 때, 적어도 50%, 적어도 60%, 적어도 70% 또는 적어도 80%의 공간 절약으로 파일을 저장할 수 있다.
중개자는 4개의 트랙 세트: 제1 트랙 세트, 제2 트랙 세트, 제3 트랙 세트 및 제4 트랙 세트로 이루어지거나, 본질적으로 그것으로 이루어지거나, 그것을 포함할 수 있다. 중개자는 바람직하게는 비-일시적 매체 상에 저장되고 비-캐시 데이터 저장 매체로부터 원격에 위치하고 있다. 그리하여, 중개자 및 비-캐시 데이터 저장 매체는 바람직하게는 동일 디바이스의 부분이 아니다.
시스템은 또한 매니저를 포함하고 있을 수 있다. 매니저는 수신의 제어를 제공하여, 중개자를 통한 데이터의 저장 및 검색 및 송신을 처리할 수 있다. 그리하여, 바람직하게는, 그것은 호스트 및 중개자에 동작가능하게 결합되고 선택사항으로서는 비-캐시 데이터 저장 매체에 동작가능하게 결합된다. 더욱, 일부 실시예에 있어서, 그것은 중개자, 비-캐시 매체 및 호스트의 각각으로부터 원격에 위치하고 있다.
매니저는 다음 특징 중 하나 이상을 수행하도록 구성될 수 있다: (a) 중개자의 제1 트랙 세트 내 파일 시스템 정보, 부팅가능성 정보 및 파티션 정보 중 하나 이상을 포함하는 데이터를 저장하는 것; (b) 중개자의 제3 트랙 세트 내 메타데이터를 저장하는 것; (c) 하나 이상의 파일로서, 파일 시스템 정보, 부팅가능성 정보 또는 파티션 정보 중 어느 하나도 없이 비-캐시 매체 상에 저장되는 하나 이상의 파일을 비-캐시 매체 상에 저장하는 것(그리하여, 일부 실시예에서는, 원시 데이터만이 비-캐시 매체 상에 있음); (d) 비-캐시 매체 내 각각의 파일의 위치를 중개자의 제4 트랙 세트 내 저장하는 것; 및 (e) 파일에 대한 호스트 이름과 비-캐시 매체 내 각각의 파일의 위치의 상관을 중개자 상에 저장하는 것. 바람직하게는, 파일에 대한 호스트 이름과 비-캐시 매체 내 각각의 파일의 위치의 상관은, 비트 필드에 대응하는, 제4 트랙 세트 내 저장된다. 부가적으로, 매니저는 본 발명의 방법 중 하나 이상을 실행할 수 있는 실행가능한 명령어를 포함하고 있는 컴퓨터 프로그램 제품을 포함하거나 그에 동작가능하게 결합될 수 있다.
본 발명의 다양한 시스템 내에서, SAN는, 컴퓨터 프로그램 제품 내 저장된 지시에 따라, 비트 마커 테이블 또는 빈도 변환기에 액세스할 수 있다. 이들 자원은 비트 마커를 서브유닛의 각각과 상관시키고 출력을 발생시킨다. 전부는 아니더라도 비트 마커의 대부분은 서브유닛보다 사이즈가 더 작기 때문에, 출력은 호스트로부터 수신되었던 입력 파일보다 더 작은 데이터 파일이다. 그리하여, 호스트로부터 수신된 대로의 파일이 사이즈 R일 수 있는 반면, SAN에 의해 저장되는 대로의 실제의 데이터는 S일 수 있으며, 여기서 R > S이다. 바람직하게는 R은 S보다 적어도 2배 크고, 더 바람직하게는 R은 S보다 적어도 3배 크다.
SAN은 출력 파일을 취하여 그것을 비-일시적 저장 매체, 예를 들어, 비-캐시 매체 내 저장한다. 바람직하게는, SAN는 호스트가 파일을 검색할 수 있게 하도록 저장된 대로의 파일을 호스트로부터 수신된 대로의 파일과 상관시킨다.
추가적 예시의 목적으로, 본 발명의 방법을 구현하기 위한 시스템을 도시하고 있는 도 1을 참조한다. 시스템(10)에서, 호스트(1)는 메모리(4)에 동작가능하게 결합되는 프로세서(3)를 포함하고 있는 스토리지 에어리어 네트워크(6)에 파일을 송신한다. 선택사항으로서, 스토리지 에어리어 네트워크는 다시 호스트에 수신을 확인해 준다.
메모리 내에는 청크렛을 취하고 내부에 들어있는 데이터를 서브유닛으로 분할하도록 설계되는 컴퓨터 프로그램 제품이 저장되어 있다. 메모리는 또한 참조 테이블(5)을 포함하고 있거나 그에 동작가능하게 결합될 수 있다. 테이블은 서브유닛 중 하나 이상에 대한 상관 파일 또는 빈도 변환기 또는 비트 마커를 포함하고 있고, 컴퓨터 프로그램 제품은 원래 서브유닛 대신에 마커 중 하나 이상을 포함하고 있는 새로운 데이터 파일을 생성한다.
다음으로 프로세서는, 예를 들어, 디스크(2)일 수 있는, 비-캐시 매체와 같은, 기록 매체 상에 비트 마커의 저장을 야기한다. 일부 실시예에 있어서, 처음에는 마커 전부가 동일한 사이즈이다. 그렇지만, 일부 실시예에 있어서는, 그것들을 저장하기 이전에, 하나 이상, 바람직하게는 적어도 25%, 적어도 50%, 또는 적어도 75%가 저장 이전에 절단된다.
도 2는 R1(40) 및 R2(50)와 더불어, 비트 필드(60) 및 메타데이터 파일(30)에 대한 공간도 포함하고 있는 중개자(70)를 갖는 시스템(100)을 도시하고 있다. 중개자의 표현은 단지 예시적 목적을 위한 것일 뿐이고 중개자 또는 그 내부 조직의 구조에 대한 제한을 두는 것은 아니다. 또한 비-캐시 매체(NCM)(20)가 도시되어 있다. 비-캐시 매체는 중개자의 근처에 도시되어 있지만, 그것들은 별개의 구조이다. 일부 실시예에 있어서, 중개자는 NCM과는 별개의 디바이스로 위치하고 있고, 본 발명의 디바이스 중 하나 이상은 휴대용이다. 마커 또는 다른 변환된 원시 데이터는 NCM 상에 저장될 것이다.
도 3은 다른 시스템(200)을 도시하고 있다. 이러한 시스템에 있어서, 개시자(In)(270)는 청크렛을 캐시 매니저(230)에 송신하며, 그러면 선택사항으로서는 데이터 파일의 코딩을 준비하고 그것들을 중개자(210)에 송신한다. 호스트의 예는, 국한되는 것은 아니지만, 마이크로소프트 윈도우즈 서버 및 데스크톱, 애플 OS X, 리눅스 RHEL 및 SUSE 오라클 솔라리스, IBM AIX, HP UX 및 VM ESX 및 ESXi를 실행시키는 컴퓨터 또는 컴퓨터 네트워크를 포함한다. 데이터 파일에 대응하는 정보는 처음에는, 개시자가 정의한 파라미터로 앞서 파퓰레이팅된, R1(240)에 보내진다. 중개자는 자신이 비트 마커 테이블 또는 빈도 변환기(도시되지 않음)의 사용을 통해 정보를 번역할 수도 있고 그것은 원격 인코더(원격 변환기라고도 지칭될 수 있고 도시되지는 않음)와 통신할 수도 있고, 중개자는 R1 내에는 물론 R2(250) 내에도 호스트로부터 수신되는 파일 이름의 사본을 저장할 것이다. 데이터가 변환되고 더 작은 사이즈 파일이 생성된 후에, 비트 필드(260)의 섹터 맵 내에는 파일이 디스크(220) 내 저장될 위치 또는 위치들이 기록된다. 코딩된 데이터는 위치(285)에 저장될 수 있다. 데이터를 코딩하기 이전에 또는 그 대신에, 해시 값 알고리즘이 액세스될 수 있고 체크섬은 저장 또는 변환을 위해 사용될 수 있다.
도 4는 도 3의 시스템의 실시예의 변형으로서 저장의 백-업에 대해 제공하는 다른 시스템(300)을 도시하고 있다. 이러한 시스템에 있어서, 개시자(370)는 청크렛을 캐시 매니저(330)에 송신하며, 그러면 도 3에 대해 보내졌던 동일한 파일을 개정할 데이터를 포함하고 있는 정보를 제1 중개자(310)에 포워딩한다. 개정된 파일의 수신 이전에든 그 수신 후에든, 그러나 비-캐시 매체 내 그것의 저장 전에, 제2 중개자(380)가 제1 중개자(310)로부터 생성된다. 제2 중개자는 그것이 생성된 시간에 그리고 파일 이름에 대해 제1 중개자의 정확한 사본이고, 그때, 비-캐시 매체(320) 내 동일 섹터(또는 섹터 클러스터)(385)를 가리킨다.
제1 개정된 파일은 제1 중개자의 R1(340)에서 수신된다. 제1 중개자는 다시 비트 마커 테이블 또는 빈도 변환기(도시되지 않음)의 사용을 통해 정보를 번역하든지 원격 인코더와 통신하든지 할 것이다. 중개자는 호스트로부터 수신되는 파일 이름의 사본을 R1 내에는 물론 R2(350) 내에도 저장하기를 계속할 것이다. 데이터가 변환되고 더 작은 사이즈 파일이 생성된 후에, 제1 중개자의 비트 필드(360)의 섹터 맵 내에는 파일이 디스크(320) 내 저장될 위치가 기록된다. 그렇지만, 개정된 파일은 다른 섹터(395) 내 저장될 것이다. 그리하여, 제1 중개자에 대한 변경은 제2 중개자에게는 이루어지지 않을 것이다.
호스트는 디폴트로 제1 중개자와 통신하고 있다. 그리하여, 그것이 저장소로부터 파일을 다시 불러오기를 원할 때, 제1 중개자는 섹터(395)로부터 데이터를 다시 호출할 것이다. 호스트 또는 시스템 관리책임자가 데이터의 이전 버전을 획득하기를 바라면, 그것은 섹터(385)를 살펴볼 제2 중개자에 파일 이름을 제출할 수 있다.
본 발명의 다른 실시예에 의하면, 본 발명의 시스템에 메타데이터(예를 들어, 운영 체제 정보, 부팅가능성 정보, 파티션 정보, 문서 유형 정보, QoS 정보 등)를 앞서 제공한 개시자는 문서에 대응하는 비트를 캐시 매니저에 보낸다. 비트는, 예를 들어, 청크렛으로 조직될 수 있다.
캐시 매니저는 정보를 L1 캐시에, L2 캐시에 그리고 중개자에 보낼 수 있다. 캐시 매니저는 또한 개시자에 수신의 확인응답을 보낼 수 있다.
관련 있는 메타데이터를 이미 거기에 저장해 놓을 수 있는 중개자는 문서에 대응하는 비트를, 비트를 코딩된 정보로 변환하는 변환기에 보낸다. 또한 변환된 비트의 사이즈를 결정하는 계산기가 변환기의 일부분이거나 그와 연관될 수 있다. 변환은, 예를 들어, 비트 마커 테이블 또는 빈도 변환기의 사용을 통해서일 수 있다.
그 후 변환기는 변환된 파일의 사이즈를 중개자에게 알려줄 수 있고, 중개자는 변환된 파일이 비-캐시-매체 내 저장될 위치를 결정할 수 있다. 이러한 단계 다음에, 중개자는 그 위치에서의 저장을 야기할 수 있다.
본 명세서에서 설명된 다양한 실시예의 특징 중 어느 하나는 달리 특정되지 않는 한 개시된 어느 다른 실시예와 연관하여 설명된 특징과 함께 사용될 수 있다. 그리하여, 다양한 또는 특정 실시예와 연관하여 설명된 특징은 그러한 배타성이 명시적으로 서술되거나 맥락으로부터 암시되지 않는 한 여기에서 개시된 다른 실시예와 연관하여 적합하지 않다고 해석되어서는 안 된다.
예:
예 1: 비트 마커 테이블(선지적)
참조 위치자 테이블 내에서 각각의 고유 마커는 고유 비트 스트링에 대응하는 것으로 식별된다. 테이블은 테이블을 저장하도록 흔히 알려져 있거나 알려지게 되는 그리고 컴퓨터 알고리즘이 각각의 입력에 배정되는 출력을 획득할 수 있게 하는 어떠한 포맷으로라도 저장될 수 있다.
아래 테이블 I은 서브유닛이 8 비트 길이인 비트 마커 테이블로부터의 발췌의 일례를 제공한다.
Figure pct00001
예로서 그리고 테이블 I 내 식별된 서브유닛을 사용하여, 입력이 00000101 00000100 00000101 00000101 00000001이었으면, 출력은: 1010 1000 1010 1010 0101이었을 것이다. 비트 마커 출력이 서브유닛 입력보다 더 작을 때, 그것은 저장 매체 상에서 더 적은 공간을 차지할 것이고, 그로써 비트를 저장하는데 필요한 시간도 그리고 저장 공간도 아낄 것이다.
당업자는 인식할 바와 같이, 테이블 I을 산출하도록 발췌된 것과 같은 주어진 비트 마커 테이블에서, 비트의 모든 조합이 사용되게 되면, 2N 엔트리일 필요가 있을 것이며, 여기서 N은 서브유닛 내 비트 수에 대응한다. 8 비트가 있을 때, 필요로 되는 엔트리는 256개이다. 서브유닛 내 16 비트가 있을 때에는, 65,536 엔트리와 같은, 216 엔트리가 필요하다. 서브유닛 내 32 비트가 있을 때에는, 4,294,967,296 엔트리와 같은, 232 엔트리가 필요하다. 소정 비트 스트링이 파일 내에서 사용되지 않을 것임을 알고 있으면, 그때 테이블은 가장 작은 일들로 시작하는 마커를 할당할 수 있다.
예 2: 전-처리된 서브유닛에 대한 비트 마커 테이블(선지적)
서브유닛 사이즈가 커지게 될수록 테이블이 더 번잡하게 되기 때문에, 일부 실시예에 있어서, 테이블은 서브유닛 열의 일단으로부터의 모든 영이 빠져 있게 되도록 구성될 수 있고, 테이블에 액세스하기 이전에, 각각의 서브유닛의 그 일단으로부터의 모든 영은 제거된다. 그리하여, 테이블 I이 발췌되어 나오는 테이블보다는, 테이블 II가 발췌되어 나오는 테이블이 구성될 수 있다.
Figure pct00002
알 수 있는 바와 같이, 제2 및 제4 라인에서는, 서브유닛이 전-처리된 후에, 그것들은 8보다 더 적은 비트를 가졌다. 그렇지만, 호스트로부터 수신된 원시 데이터 내 실제 서브유닛은 전부 8 비트를 가졌다. 방법이 구현되는 시스템은 디지트의 부재가 영을 암시하고 디지트의 모든 부재가 어느 절단된 서브유닛의 동일한 단부에서임을 이해하도록 설계될 수 있기 때문에, 더 적은 공간을 차지하는 그리고 고유 마커를 고유 서브유닛에 배정할 수 있는 능력을 보유하는 테이블을 사용할 수 있다. 그리하여, 방법은 시스템이 00000001(7개의 영과 하나의 일)과 0000001(6개의 영과 하나의 일)을 서로 다르다고 해석할 수 있게 한다.
이러한 방법을 구현하기 위해, 각각의 서브유닛(또는 서브유닛이 사용되지 않으면 각각의 청크렛)이 제1 단부 및 제2 단부를 갖는다고 여길 수 있다. 제1 단부는 비트 스트링의 우측 또는 좌측 중 어느 하나일 수 있고, 제2 단부는 반대측일 것이다. 예시의 목적으로, 제1 단부가 최좌측 디지트이고 제2 단부가 최우측 디지트라고 생각할 수 있다. 이러한 방법 하에, 그 후 제2 단부에서의 비트가 0 값을 갖는지 결정하도록 각각의 청크렛의 각각의 서브유닛 내 하나 이상의 비트를 분석한다. 이러한 단계는 전처리라고 지칭될 수 있고 서브유닛은 그것들이 전처리된 후에 테이블 II의 우측 열에 나타나 있다. 제2 단부에서의 비트가 0 값을 가지면 그 방법은 제2 단부에서의 비트 및 0 값을 갖는 모든 비트를 제거하고 그 비트와 인접하는 비트 스트링을 형성하고, 그로써 제2 단부에서 원래 0을 가졌던 어느 서브유닛에 대해 개정된 서브유닛(테이블 내 전-처리된 서브유닛)을 형성할 수 있다.
제2 단부에서 0이 있는지 결정하도록 각각의 서브유닛을 검토하고 그러하다면, 서브유닛의 제2 단부에 인접하였던 위치에서 개정된 제2 단부를 갖는 개정된 서브유닛이라고도 지칭될 수 있는, 전-처리된 서브유닛을 형성하도록 0을 제거하는 컴퓨터 알고리즘을 사용할 수 있다. 다음으로, 알고리즘은 그 지금 개정된 제2 단부에서 0이 있는지 결정하도록 개정된 서브유닛을 검토하고 그러하다면 추가적 개정된 제2 단부를 형성하도록 0을 제거한다. 이러한 방법에 있어서, 개정된 제2 단부는 앞서 제2 단부에서의 비트에 인접하였던 위치일 것이다. 어떠한 추가적 개정된 제2 단부라도 서브유닛의 제2 단부로부터 떨어져 있는 2개 이상의 장소이었을 것이다. 그리하여, 용어 "개정된"은 단축되거나 절단된 제2 단부를 의미한다. 알고리즘은 그 제2 단부에서 1을 갖는 단축된 청크렛이 발생될 때까지 개정된 서브유닛에 대해 이러한 방법을 반복할 수 있다.
당업자는 인식할 바와 같이, 전술한 방법은 1이 개정된 제2 단부 또는 추가적 개정된 제2 단부에 있을 때까지 제2 단부로부터 영을 제거함으로써 적용되는 것으로 설명되어 있다. 그 방법은 0이 개정된 제2 단부 또는 추가적 개정된 제2 단부에 있을 때까지 시스템이 제2 단부로부터 1을 제거하도록 역으로 설계될 수 있다. 부가적으로, 본 개시로 당업자는 제2 단부 대신에 제1 단부로부터 비트를 제거하고 그들 개정된 서브유닛을 비트 마커로 변환하도록 생성된 테이블을 사용할 수 있다.
예 3: 빈도 교환( 선지적 )
실증적 분석에 기반하여, 소정 타임프레임, 예를 들어, 지난 일년 또는 지난 2년 내 수신되었던 문서 세트 내로부터 또는 특정 호스트로부터 수신된 문서 세트 또는 문서 유형 내에서 각각의 서브유닛의 빈도를 결정할 수 있다. 이러한 정보로, 서브유닛이 수치 순서로 조직되는 테이블 I 또는 테이블 II 내 예시된 바와 같은 테이블을 살펴보기보다는, 더 작은 비트 마커가 특정 호스트로부터 수신된 대로의 파일 내에서, 문서 유형 내에서 또는 문서 세트 내에서 가장 나타날 것 같다고 예측되는 서브유닛과 연관되는 빈도 변환기를 살펴볼 수 있다. 그리하여, 빈도 변환기 내에서, 마커는 복수의 여러 다른 사이즈이고 더 작은 사이즈의 마커는 더 높은 빈도 서브유닛과 상관된다.
Figure pct00003
테이블 III은 테이블 I과 동일한 서브유닛을 사용하는 빈도 변환기로부터 발췌의 일례이다. 그렇지만, 비트 마커가 순차로 배정되지 않고 대신에 더 큰 비트 마커가 더 낮은 빈도 서브유닛에 배정됨을 알아차릴 것이다. 테이블이 예시하는 바와 같이, 서브유닛 00000011에 배정되는 마커는 서브유닛 00000001에 배정되는 것보다 25 퍼센트 더 크고, 서브유닛 11111101에 대하여, 높은 수치 값임에도 불구하고, 그것은 그것이 특정 호스트로부터 수신된 파일 유형에서 더 빈번하게 나타나기 때문에 더 작은 비트 마커를 받는다. 그리하여, 테이블 I을 사용하였고 서브유닛 11111101이 10,000 곳에서 나타나면, 그것은 111,111,010,000 비트에 대응하였을 것이다. 그렇지만, 테이블 III을 사용하였으면, 동일한 정보에 대한 저장 목적으로 11,000,000 비트만이 사용될 필요가 있을 것이다. 이 방법에서는 나타나 있지 않지만, 서브유닛은 일단 또는 타단으로부터 영을 제거하도록 전처리될 수 있고, 테이블은 상관시키는 절단된 서브유닛을 포함하고 있도록 설계될 수 있다.
위에서 언급된 바와 같이, 빈도 변환기는 하나 이상의 호스트로부터 수신될 것 같은 데이터를 표현한다고 여겨지는 파일 세트의 분석에 기반하여 발생될 수 있다. 일부 실시예에 있어서, 정보를 처리하는 알고리즘은 그 자신의 품질 제어를 수행하고 빈도 변환기 내 마커의 할당이 기반하는 것들과 소정 시간 기간으로부터의 문서에 대한 서브유닛의 실제 빈도를 비교할 수 있다. 통계적 분석을 사용하여 그 후 그것은 장래 사용을 위해 마커가 서브유닛과 어떻게 연관되는지 재할당하는 새로운 테이블이 생성되어야 하는지 결정할 수 있다. 당업자는 인식할 바와 같이, 테이블 III은 빈도 변환기의 단순화된 발췌이다. 그렇지만, 실제로는 상관을 획득하기 위해 16진 시스템을 선택할 수 있다. 부가적으로, 테이블이 기반하는 빈도의 나열은 독자의 편의를 위해 포함되고, 그것들은 본 발명의 다양한 실시예에 의해 액세스될 때는 테이블 내 포함될 필요가 없다.
예 4: 중개자 내 공간의 할당(선지적)
사이즈가 1MB인 가설의 기록 매체에 있어서, 당업자는 섹터를 다음과 같이 매핑할 수 있다:
1MB 기록 매체는, 250 섹터에 대응하는, 1,024,000 바이트를 갖는다. (1,024,000/4096 = 250). 기록 매체의 기하체계는 다음과 같이 개괄될 수 있다: 볼륨 = (c * h * spt * ss), 여기서
c(실린더 수) = 7;
h(헤드 수) = 255;
spt(트랙당 섹터) = 63; 및
ss(바이트로 섹터 사이즈) = 4096.
중개자 내에서, 섹터는 다음과 같이 할당될 수 있다:
Figure pct00004
예 5: 공간 절약
본 발명의 시스템은 4096 바이트의 I/O 스트림 내 42.5 백만 데이터 블록을 수신하였다. 그것은 I/O 스트림 내 42.5 백만 블록에 대응한 해시 값의 7.8 백만 블록을 발생시키도록 MD5 해시 알고리즘을 적용하였다.
이것은 원래의 42.5 백만 블록을 저장하는데 필요로 되었을 공간의 18.5%만의 사용으로 번역되었다. 상충 모듈이 적용되었고, 그것은 상충이 존재하지 않았는지, 즉, 여러 다른 블록에 대해 해시 값의 중복이 발생되지 않았는지 검증하였다.

Claims (56)

  1. 비-캐시 기록 매체 상에 데이터를 저장하기 위한 방법으로서,
    i. N 바이트의 I/O 스트림을 수신하는 단계;
    ii. 상기 N 바이트를 X 바이트의 단편화된 유닛으로 단편화하는 단계;
    iii. X 바이트의 각각의 단편화된 유닛에 대한 발생된 해시 함수 값을 형성하도록 X 바이트의 각각의 단편화된 유닛에 암호 해시 함수를 적용하는 단계;
    iv. 상관 파일로서, X 바이트의 복수의 저장된 시퀀스의 각각과 Y 비트의 저장된 해시 함수 값을 연관시키는 상기 상관 파일에 액세스하고 그리고 각각의 단편화된 유닛에 대해,
    (a) X 바이트의 단편화된 유닛에 대한 상기 발생된 해시 함수 값이 상기 상관 파일 내에 있으면, 비-캐시 기록 매체 상의 저장을 위해 Y 비트의 상기 저장된 해시 함수 값을 사용하고; 그리고
    (b) X 바이트의 상기 단편화된 유닛에 대한 상기 발생된 해시 함수 값이 상기 상관 파일 내에 있지 않으면, 그때는 상기 상관 파일 내 X 바이트의 상기 단편화된 유닛과 Y 비트의 상기 발생된 해시 함수 값을 저장하고 상기 비-캐시 기록 매체 상의 저장을 위해 상기 발생된 해시 함수 값을 사용하는 단계를 포함하는, 비-캐시 기록 매체 상에 데이터를 저장하기 위한 방법.
  2. 제1항에 있어서, (iii)에서 상기 알고리즘은 MD5 메시지-다이제스트 알고리즘인, 비-캐시 기록 매체 상에 데이터를 저장하기 위한 방법.
  3. 제1항에 있어서, 상충 해결 모듈을 적용하는 단계를 더 포함하되, 상기 상충 해결 모듈이 X 바이트의 단편화된 유닛에 대해 상기 상관 파일 내 저장된 해시 함수 값과 동일한 해시 함수 값이 발생되지만 X 바이트의 상기 단편화된 유닛이 상기 저장된 해시 함수 값과 연관된 상기 X 바이트와는 다르다고 결정하면, 그때는 상기 저장된 해시 함수 값 및 상기 발생된 해시 함수 값과 다른 Z 비트를 연관시키는, 비-캐시 기록 매체 상에 데이터를 저장하기 위한 방법.
  4. 제3항에 있어서, 상기 상관 파일 내, 상충이 존재하지 않는 모든 해시 함수 값에 대해 Z 비트가 연관되고 상기 Z 비트는 8개 내지 16개의 영인, 비-캐시 기록 매체 상에 데이터를 저장하기 위한 방법.
  5. 제4항에 있어서, N = 4096이고 X = 512인, 비-캐시 기록 매체 상에 데이터를 저장하기 위한 방법.
  6. 제5항에 있어서, Y = 128 또는 256인, 비-캐시 기록 매체 상에 데이터를 저장하기 위한 방법.
  7. 제1항에 있어서, 상기 비-캐시 기록 매체 상에 복수의 해시 함수 값을 저장하는 단계를 더 포함하는, 비-캐시 기록 매체 상에 데이터를 저장하기 위한 방법.
  8. 제1항에 있어서, 저장을 위해 각각의 해시 함수 값에 대한 비트 마커를 발생시킬 비트 마커 테이블의 사용을 통해 저장을 위해 각각의 해시 함수 값을 인코딩하는 단계 및 각각의 비트 마커를 상기 비-캐시 기록 매체 내 저장하는 단계를 더 포함하는, 비-캐시 기록 매체 상에 데이터를 저장하기 위한 방법.
  9. 제1항에 있어서, 빈도 변환기의 사용을 통해 저장을 위해 각각의 해시 함수 값을 인코딩하는 단계를 더 포함하되, 저장을 위해 각각의 해시 함수 값에 대해, 변환된 비트 스트링이 발생되되, Y 비트의 적어도 2개의 다른 스트링에 대해, 출력되는 상기 변환된 비트 스트링은 서로 다른 길이인, 비-캐시 기록 매체 상에 데이터를 저장하기 위한 방법.
  10. 제9항에 있어서, 여러 다른 사이즈인 모든 복수의 변환된 비트 스트링마다, A 비트 길이인 제1 변환된 비트 스트링 및 B 비트 길이인 제2 변환된 비트 스트링이 있되, A < B이고, 상기 제1 변환된 비트 스트링의 상기 A 비트의 아이덴티티는 상기 제2 변환된 비트 스트링의 처음 A 비트의 아이덴티티와 동일하지 않은, 비-캐시 기록 매체 상에 데이터를 저장하기 위한 방법.
  11. 제3항에 있어서, 빈도 변환기의 사용을 통해 저장을 위해 각각의 해시 함수 값을 인코딩하는 단계를 더 포함하되, 저장을 위해 각각의 해시 함수 값에 대해, 변환된 비트 스트링이 발생되되, Y 비트의 적어도 2개의 다른 스트링에 대해, 출력되는 상기 변환된 비트 스트링은 서로 다른 길이인 방법.
  12. 제1항에 있어서, 상기 I/O는 호스트로부터 수신되고 상기 방법은 상기 I/O 스트림의 수신을 상기 호스트에 확인응답하는 단계를 더 포함하는 방법.
  13. 제12항에 있어서, 상기 호스트는 상기 I/O를 제1 저장 주소에 저장되는 것으로 기록하고 상기 변환된 비트 스트링은 제2 저장 주소에 상기 비-캐시 기록 매체 내 저장되되, 상기 제1 저장 주소는 상기 제2 저장 주소와 동일하지 않은 방법.
  14. 제13항에 있어서, 상기 제1 저장 주소는 제1 파일 사이즈의 파일에 대응하고 상기 제2 저장 주소는 제2 파일 사이즈의 파일에 대응하되, 상기 제1 파일 사이즈는 상기 제2 파일 사이즈보다 적어도 4배 큰, 비-캐시 기록 매체 상에 데이터를 저장하기 위한 방법.
  15. 제13항에 있어서, 중개자 상에 상기 제2 저장 주소를 저장하는 단계를 더 포함하되, 상기 중개자는 비-일시적 저장 매체인, 비-캐시 기록 매체 상에 데이터를 저장하기 위한 방법.
  16. 제15항에 있어서, 상기 제2 저장 주소는 비트 필드 내 저장되는, 비-캐시 기록 매체 상에 데이터를 저장하기 위한 방법.
  17. 제16항에 있어서, 상기 중개자는,
    i. 제1 트랙 세트로서, 파일 시스템 정보, 부팅가능성 정보 및 파티션 정보를 포함하는 상기 제1 트랙 세트;
    ii. 제2 트랙 세트로서, 상기 제1 트랙 세트의 사본을 포함하는 상기 제2 트랙 세트;
    iii. 제3 트랙 세트로서, 파일 시스템 정보, 부팅가능성 정보 및 파티션 정보 이외의 메타데이터를 포함하는 상기 제3 트랙 세트; 및
    iv. 제4 트랙 세트로서, 상기 비트 필드를 포함하는 상기 제4 트랙 세트를 포함하는, 비-캐시 기록 매체 상에 데이터를 저장하기 위한 방법.
  18. 비-캐시 기록 매체 상에 데이터를 저장하기 위한 방법으로서,
    i. N 바이트의 I/O 스트림을 수신하는 단계;
    ii. 상기 N 바이트를 X 바이트의 단편화된 유닛으로 단편화하는 단계;
    iii. 암호 해시 함수 값을 X 바이트의 각각의 단편화된 유닛과 연관시키는 단계를 포함하되, 상기 연관시키는 단계는 상관 파일로서 X 바이트의 복수의 저장된 시퀀스의 각각과 Y 비트의 저장된 해시 함수 값을 연관시키는 상기 상관 파일에 액세스하고 그리고
    (a) X 바이트의 단편화된 유닛의 상기 시퀀스가 상기 상관 파일 내에 있으면, 그때는 비-캐시 기록 매체 상의 저장을 위해 Y 비트의 상기 저장된 해시 함수 값을 사용하고; 그리고
    (b) X 바이트의 단편화된 유닛의 상기 시퀀스가 상기 상관 파일 내에 있지 않으면, 그때는 상기 상관 파일 내 X 바이트의 상기 단편화된 유닛과 Y 비트의 새로운 해시 함수 값을 저장하고 상기 비-캐시 기록 매체 상의 저장을 위해 Y 비트의 상기 새로운 해시 함수 값을 사용하는 단계를 포함하는, 비-캐시 기록 매체 상에 데이터를 저장하기 위한 방법.
  19. 비-캐시 기록 매체 상에 데이터를 저장하기 위한 방법으로서,
    i. N 바이트의 I/O 스트림을 수신하는 단계;
    ii. N 바이트의 각각의 유닛에 대한 발생된 해시 함수 값을 형성하도록 N 바이트의 각각의 유닛에 암호 해시 함수 값 알고리즘을 적용하는 단계;
    iii. 상관 파일로서, N 바이트의 복수의 저장된 시퀀스의 각각과 Y 비트의 저장된 해시 함수 값을 연관시키는 상기 상관 파일에 액세스하고 그리고
    (a) N 바이트의 상기 유닛에 대한 상기 발생된 해시 함수 값이 상기 상관 파일 내에 있으면, 비-캐시 기록 매체 상의 저장을 위해 Y 비트의 상기 저장된 해시 함수 값을 사용하고; 그리고
    (b) N 바이트의 상기 유닛에 대한 상기 발생된 해시 함수 값이 상기 상관 파일 내에 있지 않으면, 그때는 상기 상관 파일 내 N 바이트의 상기 유닛과 Y 비트의 상기 발생된 해시 함수 값을 저장하고 상기 비-캐시 기록 매체 상의 저장을 위해 상기 발생된 해시 함수 값을 사용하는 단계를 포함하는, 비-캐시 기록 매체 상에 데이터를 저장하기 위한 방법.
  20. 기록 매체 상에 데이터를 저장하기 위한 방법으로서,
    i. 복수의 디지털 2진 신호를 수신하는 단계로서, 상기 디지털 2진 신호는 복수의 청크렛(chunklet)으로 조직되고, 각각의 청크렛은 N 비트 길이이되, N은 1보다 큰 정수이고 상기 청크렛은 순서를 갖는 상기 수신하는 단계;
    ii. 각각의 청크렛을 균일한 사이즈의 서브유닛으로 분할하고 복수의 마커의 세트를 형성하도록 X개의 마커의 세트로부터 각각의 서브유닛에 마커를 배정하는 단계로서, X는 서브유닛 내 비트의 여러 다른 조합의 수보다 작거나 같고, 똑같은 서브유닛에는 동일한 마커가 배정되고 적어도 하나의 마커는 서브유닛의 상기 사이즈보다 작은 상기 배정하는 단계;
    iii. 상기 청크렛의 상기 순서에 대응하는 순서로 비-일시적 기록 매체 상에 상기 복수의 마커의 상기 세트를 저장하는 단계를 포함하는, 기록 매체 상에 데이터를 저장하기 위한 방법.
  21. 제20항에 있어서, 상기 배정하는 단계는 비트 마커 테이블에 액세스하는 단계를 포함하되, 상기 비트 마커 테이블 내에서 각각의 고유 마커는 고유 비트 스트링에 대응하는 것으로 식별되는, 기록 매체 상에 데이터를 저장하기 위한 방법.
  22. 제21항에 있어서, 각각의 서브유닛은 제1 단부 및 제2 단부를 갖고 상기 마커를 배정하기 이전에, 상기 방법은 상기 제2 단부에서의 비트가 0 값을 갖는지 결정하도록 각각의 청크렛의 각각의 서브유닛 내 하나 이상의 비트를 분석하고, 상기 제2 단부에서의 상기 비트가 0 값을 가지면, 상기 제2 단부에서의 상기 비트 및 0 값을 갖는 모든 비트를 제거하고 상기 제2 단부에서의 상기 비트와 인접하는 비트 스트링을 형성하고, 그로써 상기 제2 단부에서 0을 갖는 어느 서브유닛에 대해 개정된 서브유닛을 형성하는 단계를 더 포함하는, 기록 매체 상에 데이터를 저장하기 위한 방법.
  23. 제22항에 있어서, 컴퓨터 알고리즘은,
    (a) 상기 제2 단부에서 0이 있는지 결정하도록 각각의 서브유닛을 검토하고 그러하다면 상기 서브유닛의 상기 제2 단부에 인접하였던 위치에서 개정된 제2 단부를 갖는 개정된 서브유닛을 형성하도록 상기 0을 제거하고;
    (b) 상기 개정된 제2 단부에서 0이 있는지 결정하도록 각각의 개정된 서브유닛을 검토하고 그러하다면 추가적 개정된 제2 단부를 형성하도록 상기 0을 제거하고; 그리고
    (c) 당해 제2 단부에서 1을 갖는 단축된 서브유닛이 발생될 때까지 각각의 개정된 서브유닛에 대해 (b)를 반복하는, 기록 매체 상에 데이터를 저장하기 위한 방법.
  24. 제21항에 있어서, 각각의 서브유닛은 제1 단부 및 제2 단부를 갖고 상기 마커를 배정하기 이전에, 상기 방법은 상기 제2 단부에서의 비트가 1 값을 갖는지 결정하도록 각각의 청크렛의 각각의 서브유닛 내 하나 이상의 비트를 분석하고, 상기 제2 단부에서의 상기 비트가 1 값을 가지면, 상기 제2 단부에서의 상기 비트 및 1 값을 갖는 모든 비트를 제거하고 상기 제2 단부에서의 상기 비트와 인접하는 비트 스트링을 형성하고, 그로써 상기 제2 단부에서 1을 갖는 어느 서브유닛에 대해 개정된 서브유닛을 형성하는 단계를 더 포함하는, 기록 매체 상에 데이터를 저장하기 위한 방법.
  25. 제24항에 있어서, 컴퓨터 알고리즘은,
    (a) 상기 제2 단부에서 1이 있는지 결정하도록 각각의 서브유닛을 검토하고 그러하다면 상기 서브유닛의 상기 제2 단부에 인접하였던 위치에서 개정된 제2 단부를 갖는 개정된 서브유닛을 형성하도록 상기 1을 제거하고;
    (b) 상기 개정된 제2 단부에서 1이 있는지 결정하도록 각각의 개정된 서브유닛을 검토하고 그러하다면 추가적 개정된 제2 단부를 형성하도록 상기 1을 제거하고; 그리고
    (c) 당해 제2 단부에서 0을 갖는 단축된 서브유닛이 발생될 때까지 각각의 개정된 서브유닛에 대해 (b)를 반복하는, 기록 매체 상에 데이터를 저장하기 위한 방법.
  26. 제21항에 있어서, 상기 마커는 빈도 변환기 내 저장되고, 상기 마커는 복수의 다른 사이즈이고 더 작은 사이즈의 마커는 더 높은 빈도 서브유닛과 상관되는, 기록 매체 상에 데이터를 저장하기 위한 방법.
  27. 제20항에 있어서, 복수의 다른 마커는 다른 비트 수로부터 형성되는, 기록 매체 상에 데이터를 저장하기 위한 방법.
  28. 기록 매체로부터 데이터를 검색하기 위한 방법으로서,
    i. 기록 매체에 액세스하는 단계로서, 상기 기록 매체는 복수의 마커를 순서대로 저장하는 상기 액세스하는 단계;
    ii. 상기 복수의 마커를 청크렛의 세트로 번역하는 단계로서, 각각의 청크렛은 N 비트 길이이고, N은 1보다 큰 정수이고 상기 청크렛은 상기 복수의 마커의 상기 순서에 대응하는 순서를 갖고 상기 번역하는 단계는 비트 마커 테이블에 액세스함으로써 성취되되, 상기 비트 마커 테이블 내에서 각각의 고유 마커는 고유 비트 스트링에 대응하는 것으로 식별되는 상기 번역하는 단계; 및
    iii. 상기 청크렛의 세트를 포함하는 출력을 발생시키는 단계를 포함하는, 기록 매체로부터 데이터를 검색하기 위한 방법.
  29. 제28항에 있어서, 상기 기록 매체 상에 저장된 대로의 상기 복수의 마커는 X 내지 Y의 사이즈를 갖되, Y > X이고 적어도 하나의 마커는 사이즈 X를 갖고 적어도 하나의 마커는 사이즈 Y를 갖는, 기록 매체로부터 데이터를 검색하기 위한 방법.
  30. 제29항에 있어서, 상기 번역하는 단계는 상기 마커의 제1 단부에 0을 부가함으로써 길이 Z보다 작은 상기 마커 전부를 길이 Z의 마커로 만들고 상기 길이 Z의 마커를 청크렛으로 번역하는 단계를 포함하되, Z는 Y보다 크거나 같고 상기 청크렛은 길이 Z보다 큰, 기록 매체로부터 데이터를 검색하기 위한 방법.
  31. 제30항에 있어서, 상기 길이 Z의 마커를 청크렛으로 번역하는 단계는 상기 길이 Z의 마커를 서브유닛으로 번역하고 상기 서브유닛을 청크렛으로 조합하는 단계를 포함하는, 기록 매체로부터 데이터를 검색하기 위한 방법.
  32. 저장소로부터 문서를 검색하기 위한 방법으로서, 제28항의 방법을 포함하고 상기 출력을 파일 유형과 연관시키고 상기 파일 유형의 문서로 상기 청크렛을 변환할 수 있는 운영 체제에 상기 출력을 송신하는 단계를 더 포함하는, 기록 매체로부터 데이터를 검색하기 위한 방법.
  33. 기록 매체 상에 데이터를 저장하기 위한 방법으로서,
    i. 복수의 디지털 2진 신호를 수신하는 단계로서, 상기 디지털 2진 신호는 청크렛으로 조직되되, 각각의 청크렛은 N 비트 길이이고, 각각의 청크렛은 제1 단부 및 제2 단부를 갖고, N은 1보다 큰 정수이고, 상기 청크렛은 순서를 갖는 상기 수신하는 단계;
    ii. 각각의 청크렛을 복수의 서브유닛으로 분할하는 단계로서, 각각의 서브유닛은 A 비트 길이인 상기 분할하는 단계;
    iii. 상기 제2 단부에서의 상기 비트가 0 값을 갖는지 결정하도록 각각의 서브유닛을 분석하고, 상기 제2 단부에서의 상기 비트가 0 값을 가지면, 상기 제2 단부에서의 상기 비트 및 0 값을 갖는 모든 비트를 제거하고 상기 제2 단부에서의 상기 비트와 인접하는 비트 스트링을 형성하고, 그로써 상기 제2 단부에서 0을 갖는 어느 청크렛에 대해 개정된 청크렛을 형성하는 단계; 및
    iv. 비-일시적 기록 매체 상에, A 비트 길이이고 당해 제2 단부에 1을 갖는 각각의 서브유닛 및 각각의 개정된 서브유닛을 상기 순서로 저장하는 단계를 포함하는, 기록 매체 상에 데이터를 저장하기 위한 방법.
  34. 기록 매체 상에 데이터를 저장하기 위한 방법으로서,
    i. 복수의 디지털 2진 신호를 수신하는 단계로서, 상기 디지털 2진 신호는 청크렛으로 조직되되, 각각의 청크렛은 N 비트 길이이고, 각각의 청크렛은 제1 단부 및 제2 단부를 갖고, N은 1보다 큰 정수이고, 상기 청크렛은 순서를 갖는 상기 수신하는 단계;
    ii. 각각의 청크렛을 복수의 서브유닛으로 분할하는 단계로서, 각각의 서브유닛은 A 비트 길이인 상기 분할하는 단계;
    iii. 상기 제1 단부에서의 상기 비트가 0 값을 갖는지 결정하도록 각각의 서브유닛을 분석하고, 상기 제1 단부에서의 상기 비트가 0 값을 가지면, 상기 제1 단부에서의 상기 비트 및 0 값을 갖는 모든 비트를 제거하고 상기 제1 단부에서의 상기 비트와 인접하는 비트 스트링을 형성하고, 그로써 상기 제1 단부에서 0을 갖는 어느 서브유닛에 대해 제1 개정된 서브유닛을 형성하는 단계; 및
    iv. 상기 제2 단부에서의 상기 비트가 0 값을 갖는지 결정하도록 각각의 서브유닛을 분석하고, 상기 제2 단부에서의 상기 비트가 0 값을 가지면, 상기 제2 단부에서의 상기 비트 및 0 값을 갖는 모든 비트를 제거하고 상기 제2 단부에서의 상기 비트와 인접하는 비트 스트링을 형성하고, 그로써 상기 제2 단부에서 0을 갖는 어느 서브유닛에 대해 제2 개정된 서브유닛을 형성하는 단계; 및
    v. 각각의 서브유닛에 대해
    (a) 상기 제1 개정된 서브유닛과 상기 제2 개정된 서브유닛의 사이즈가 동일하면, 상기 제1 개정된 서브유닛 또는 상기 제2 개정된 서브유닛을 저장하고,
    (b) 상기 제1 개정된 서브유닛이 상기 제2 개정된 서브유닛보다 작으면, 상기 제1 개정된 서브유닛을 저장하고,
    (c) 상기 제2 개정된 서브유닛이 상기 제1 개정된 서브유닛보다 작으면, 상기 제2 개정된 서브유닛을 저장하고,
    (d) 개정된 서브유닛이 없으면, 상기 서브유닛을 저장하고,
    (e) 제1 개정된 서브유닛이 없지만 제2 개정된 서브유닛이 있으면, 상기 제2 개정된 서브유닛을 저장하고,
    (f) 제2 개정된 서브유닛이 없지만 제1 개정된 서브유닛이 있으면, 상기 제1 개정된 서브유닛을 저장하는 단계를 포함하되,
    저장되는 각각의 개정된 서브유닛은 하나 이상의 비트가 상기 제1 단부 또는 상기 제2 단부로부터 제거되었는지 나타내는 정보와 저장되는, 기록 매체 상에 데이터를 저장하기 위한 방법.
  35. 기록 매체로부터 데이터를 검색하기 위한 방법으로서,
    i. 기록 매체에 액세스하는 단계로서, 상기 기록 매체는 복수의 위치 내 복수의 데이터 유닛을 저장하되, 각각의 데이터 유닛은 복수의 비트를 포함하고 있고 상기 데이터 유닛의 최대 사이즈는 N 비트이고, 적어도 하나의 데이터 유닛은 N보다 적은 비트를 포함하고 있고, 상기 데이터 유닛은 순서를 갖는 상기 액세스하는 단계;
    ii. 상기 데이터 유닛을 검색하고 상기 데이터 유닛에 대응하는 청크렛의 세트를 발생시키도록 N보다 적은 비트 길이인 어느 데이터 유닛의 일단에 하나 이상의 비트를 부가하는 단계로서, 각각의 청크렛은 동일한 비트 수를 포함하고 있는 상기 부가하는 단계; 및
    iii. 상기 데이터 유닛의 상기 순서에 대응하는 순서로 상기 청크렛의 세트를 포함하는 출력을 발생시키는 단계를 포함하는, 기록 매체로부터 데이터를 검색하기 위한 방법.
  36. 제35항에 있어서, (ii)에서 0 값의 비트가 부가되는, 기록 매체로부터 데이터를 검색하기 위한 방법.
  37. 저장소로부터 문서를 검색하기 위한 방법으로서, 제36항의 방법을 포함하고 상기 출력을 파일 유형과 연관시키고 상기 파일 유형의 문서로 상기 청크렛을 변환할 수 있는 운영 체제에 상기 출력을 송신하는 단계를 더 포함하는, 저장소로부터 문서를 검색하기 위한 방법
  38. 전자 데이터를 저장하기 위한 방법으로서,
    i. 파라미터의 세트를 수신하는 단계로서, 상기 파라미터는 파일 시스템 정보, 부팅가능성 정보 및 파티션 정보 중 하나 이상을 포함하는 상기 수신하는 단계;
    ii. 메타데이터를 수신하는 단계;
    iii. 파일 이름을 각각 갖는 하나 이상의 파일을 수신하는 단계;
    iv. 상기 파라미터 및 메타데이터를 중개자 상에 저장하는 단계;
    v. 소정 위치에 비-캐시 매체 상에 상기 파일의 각각을 저장하는 단계; 및
    vi. 상기 비-캐시 매체 상의 소정 위치와 각각의 파일 이름의 상관을 상기 중개자 상에 저장하는 단계를 포함하는, 전자 데이터를 저장하기 위한 방법.
  39. 제38항에 있어서, 상기 비-캐시 매체 상에 상기 파일을 저장하기 이전에 상기 파일을 인코딩하는 단계를 더 포함하는, 전자 데이터를 저장하기 위한 방법.
  40. 제39항에 있어서, 상기 인코딩하는 단계는 변환된 파일을 생성하도록 비트 마커 테이블을 사용하는 단계를 포함하는 방법.
  41. 제39항에 있어서, 상기 인코딩하는 단계는 변환된 파일을 생성하도록 빈도 변환기를 사용하는 단계를 포함하는, 전자 데이터를 저장하기 위한 방법.
  42. 제40항에 있어서, 상기 변환된 파일은 파일 시스템 정보, 부팅가능성 정보 또는 파티션 정보 중 어느 것도 포함하고 있지 않는, 전자 데이터를 저장하기 위한 방법.
  43. 제38항에 있어서, 상기 파라미터는 복수의 예약 트랙 내 저장되는, 전자 데이터를 저장하기 위한 방법.
  44. 제38항에 있어서, 상기 복수의 예약 트랙은 제1 예약 트랙 세트이고 상기 방법은 상기 파라미터를 제2 예약 트랙 세트 내 복사하는 단계를 더 포함하는, 전자 데이터를 저장하기 위한 방법.
  45. 제44항에 있어서, 상기 제1 예약 트랙 세트 내 오류에 대해 체크하도록 상기 제2 예약 트랙 세트를 사용하는 단계를 더 포함하는, 전자 데이터를 저장하기 위한 방법.
  46. 제45항에 있어서, 상기 메타데이터는 씬-프로비저닝을 위한 명령어에 대응하는, 전자 데이터를 저장하기 위한 방법.
  47. 제38항에 있어서, 상기 파일은 상기 파일을 가상 주소에 저장되는 것으로 기록하는 호스트로부터 수신되고 상기 가상 주소는 상기 파일의 상기 위치와 동일하지 않은, 전자 데이터를 저장하기 위한 방법.
  48. 데이터를 백업하기 위한 방법으로서, 상기 방법은 제38항에 따른 방법을 포함하되, 상기 중개자는 제1 중개자이고 상기 위치는 제1 위치이고, 상기 방법은 제2 중개자를 발생시키는 단계를 더 포함하되, 상기 제2 중개자는 시간 T1에서 상기 제1 중개자의 사본이고, T1 후에 있는 시간 T2에서,
    i. 상기 제1 위치에 위치하는 개정된 파일을 저장하라는 명령어를 수신하고;
    ii. 새로운 파일로서 상기 개정된 파일에 대응하는 상기 새로운 파일을 제2 위치에서 저장하고; 그리고
    iii. 상기 파일 이름을 상기 제2 위치와 상관시키도록 상기 제1 중개자를 업데이트하되, 상기 제2 중개자 상에서, 상기 파일 이름은 상기 제1 위치와 상관되는, 데이터를 백업하기 위한 방법.
  49. 데이터를 백업하기 위한 방법으로서,
    i. 제1 중개자 상에서, 복수의 파일 이름을 데이터 파일의 복수의 위치와 상관시키는 단계로서, 상기 데이터 파일의 상기 위치는 제1 비-캐시 매체 상의 위치에 대응하고 상기 제1 중개자는 특정 파일 이름을 식별하는 사용자가 상기 특정 파일 이름에 대응하는 데이터 파일을 검색할 수 있게 하도록 구성되는 상기 상관시키는 단계;
    ii. 상기 복수의 데이터 파일을 제2 비-캐시 매체에 복사하는 단계;
    iii. 제2 중개자를 발생시키는 단계로서, 상기 제2 중개자는 시간 T1에서 상기 제1 중개자의 사본이고 상기 제2 중개자 내에서 상기 제2 비-캐시 매체 상의 복수의 데이터 파일의 상기 위치는 상기 파일 이름과 상관되는 상기 발생시키는 단계;
    iv. 데이터 파일에 대한 개정을 저장하라는 명령어를 수신하는 단계; 및
    v. T1 후에 있는 시간 T2에서, 상기 제1 비-캐시 매체 내 상기 데이터 파일에 대한 상기 개정을 저장하는 단계를 포함하는, 데이터를 백업하기 위한 방법.
  50. 데이터 저장 및 검색 시스템으로서,
    i. 비-캐시 데이터 저장 매체;
    ii. 중개자; 및
    iii. 매니저를 포함하되,
    상기 중개자는 상기 비-캐시 데이터 저장 매체로부터 원격에 저장되고, 상기 중개자는,
    (a) 제1 트랙 세트;
    (b) 제2 트랙 세트;
    (c) 제3 트랙 세트; 및
    (d) 제4 트랙 세트를 포함하고;
    상기 매니저는,
    (a) 파일 시스템 정보, 부팅가능성 정보 및 파티션 정보 중 하나 이상을 포함하는 데이터를 상기 제1 트랙 세트 내 저장하고;
    (b) 메타데이터를 상기 제3 트랙 세트 내 저장하고;
    (c) 하나 이상의 파일로서, 파일 시스템 정보, 부팅가능성 정보 및 파티션 정보 중 어느 것도 없이 상기 비-캐시 매체 상에 저장되는 상기 하나 이상의 파일을 상기 비-캐시 매체 상에 저장하고;
    (d) 상기 비-캐시 매체 내 각각의 파일의 위치를 상기 제4 트랙 세트 내 저장하고; 그리고
    (e) 파일에 대한 호스트 이름과 상기 비-캐시 매체 내 각각의 파일의 상기 위치의 상관을 저장하도록 구성되는, 데이터 저장 및 검색 시스템.
  51. 제50항에 있어서, 상기 매니저는 상기 제1 트랙 세트 내 상기 정보를 상기 제2 트랙 세트 내에 복사하도록 더 구성되는, 데이터 저장 및 검색 시스템.
  52. 제50항에 있어서, 상기 비-캐시 매체 내 각각의 파일의 상기 위치는 상기 호스트가 상기 파일이 위치하고 있다고 믿는 위치와 동일하지 않은, 데이터 저장 및 검색 시스템.
  53. 제50항에 있어서, 상기 하나 이상의 파일은 변환된 파일을 형성하도록 변환되되, 상기 변환된 파일은 상기 변환된 파일이 변환되었던 상기 파일보다 적은 공간을 차지하는, 데이터 저장 및 검색 시스템.
  54. 제50항에 있어서, 상기 중개자는 제1 중개자이고 상기 시스템은 제2 중개자 및 상기 제2 중개자 내로 상기 제1 중개자 내 상기 정보를 복사하기 위한 모듈을 더 포함하는, 데이터 저장 및 검색 시스템.
  55. 제54항에 있어서, 상기 제1 중개자 및 상기 제2 중개자는 동일한 파일 이름을 상기 비-캐시 데이터 저장 매체 내 여러 다른 위치와 상관시키는, 데이터 저장 및 검색 시스템.
  56. 제54항에 있어서, 상기 비-캐시 데이터 저장 매체는 제1 비-캐시 데이터 저장 매체이고 상기 시스템은 제2 비-캐시 데이터 저장 매체를 더 포함하고, 상기 제1 중개자는 파일 이름을 상기 제1 비-캐시 데이터 저장 매체 내 위치와 상관시키고 상기 제2 중개자는 상기 파일 이름을 상기 제2 비-캐시 데이터 저장 매체 내 위치와 상관시키는, 데이터 저장 및 검색 시스템.
KR1020157023746A 2013-02-01 2014-01-31 데이터를 저장 및 검색하기 위한 방법 및 시스템 KR20150121703A (ko)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US13/756,921 2013-02-01
US13/756,921 US20140223118A1 (en) 2013-02-01 2013-02-01 Bit Markers and Frequency Converters
US13/797,093 2013-03-12
US13/797,093 US10133636B2 (en) 2013-03-12 2013-03-12 Data storage and retrieval mediation system and methods for using same
US13/908,239 US9467294B2 (en) 2013-02-01 2013-06-03 Methods and systems for storing and retrieving data
US13/908,239 2013-06-03
PCT/US2014/014209 WO2014121102A2 (en) 2013-02-01 2014-01-31 Methods and systems for storing and retrieving data

Publications (1)

Publication Number Publication Date
KR20150121703A true KR20150121703A (ko) 2015-10-29

Family

ID=51260352

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020157023746A KR20150121703A (ko) 2013-02-01 2014-01-31 데이터를 저장 및 검색하기 위한 방법 및 시스템
KR1020157023747A KR20150119880A (ko) 2013-02-01 2014-01-31 저장된 데이터 내 감축된 잉여

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020157023747A KR20150119880A (ko) 2013-02-01 2014-01-31 저장된 데이터 내 감축된 잉여

Country Status (12)

Country Link
US (2) US9467294B2 (ko)
EP (2) EP2951703B1 (ko)
JP (4) JP6345698B2 (ko)
KR (2) KR20150121703A (ko)
CN (3) CN105190573B (ko)
AU (2) AU2014212170A1 (ko)
BR (1) BR112015018448A2 (ko)
CA (2) CA2900030A1 (ko)
HK (2) HK1219155A1 (ko)
MX (2) MX2015009953A (ko)
PH (2) PH12015501698A1 (ko)
WO (2) WO2014121102A2 (ko)

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9304703B1 (en) * 2015-04-15 2016-04-05 Symbolic Io Corporation Method and apparatus for dense hyper IO digital retention
US9817728B2 (en) 2013-02-01 2017-11-14 Symbolic Io Corporation Fast system state cloning
US10133636B2 (en) 2013-03-12 2018-11-20 Formulus Black Corporation Data storage and retrieval mediation system and methods for using same
US9628108B2 (en) 2013-02-01 2017-04-18 Symbolic Io Corporation Method and apparatus for dense hyper IO digital retention
US9519805B2 (en) * 2013-08-01 2016-12-13 Cellco Partnership Digest obfuscation for data cryptography
EP3082124B8 (en) * 2014-02-18 2019-05-08 Nippon Telegraph And Telephone Corporation Security apparatus, method thereof, and program
US10185842B2 (en) * 2015-03-18 2019-01-22 Intel Corporation Cache and data organization for memory protection
US10061514B2 (en) 2015-04-15 2018-08-28 Formulus Black Corporation Method and apparatus for dense hyper IO digital retention
US20170220498A1 (en) * 2016-02-01 2017-08-03 Symbolic Io Corporation Apparatus for personality and data transfer via physical movement of a fast memory transfer device
WO2017176523A1 (en) * 2016-04-04 2017-10-12 Symbolic Io Corporation Fast system state cloning
CN106230907B (zh) * 2016-07-22 2019-05-14 华南理工大学 一种社保大数据可视化方法及系统
CN107783728B (zh) * 2016-08-31 2021-07-23 百度在线网络技术(北京)有限公司 数据存储方法、装置和设备
AU2016394896B2 (en) * 2016-09-28 2018-08-09 Huawei Technologies Co.,Ltd. Method for deduplication in storage system, storage system, and controller
CN106528703A (zh) * 2016-10-26 2017-03-22 杭州宏杉科技股份有限公司 一种重复删除的模式切换方法及装置
CN108241710A (zh) * 2016-12-27 2018-07-03 中移(苏州)软件技术有限公司 一种文件创建方法、装置以及文件查询方法、装置
US11341488B2 (en) * 2017-02-06 2022-05-24 Northern Trust Corporation Systems and methods for issuing and tracking digital tokens within distributed network nodes
KR101963822B1 (ko) * 2017-02-27 2019-04-01 충남대학교산학협력단 프로그램 분류 방법 및 장치
US10873781B2 (en) * 2017-06-13 2020-12-22 Comcast Cable Communications, Llc Video fragment file processing
US11232076B2 (en) 2017-10-30 2022-01-25 AtomBeam Technologies, Inc System and methods for bandwidth-efficient cryptographic data transfer
US11366790B2 (en) 2017-10-30 2022-06-21 AtomBeam Technologies Inc. System and method for random-access manipulation of compacted data files
US10509771B2 (en) * 2017-10-30 2019-12-17 AtomBeam Technologies Inc. System and method for data storage, transfer, synchronization, and security using recursive encoding
US10572186B2 (en) 2017-12-18 2020-02-25 Formulus Black Corporation Random access memory (RAM)-based computer systems, devices, and methods
CN108984719B (zh) * 2018-07-10 2021-08-03 上海达梦数据库有限公司 基于列存储的数据删除方法、装置、服务器及存储介质
CN109521954B (zh) * 2018-10-12 2021-11-16 许继集团有限公司 一种配网ftu定点文件管理方法及装置
CN109710668B (zh) * 2018-11-29 2021-05-04 中国电子科技集团公司第二十八研究所 一种多源异构数据访问中间件构建方法
WO2020142431A1 (en) 2019-01-02 2020-07-09 Formulus Black Corporation Systems and methods for memory failure prevention, management, and mitigation
WO2020264522A1 (en) * 2019-06-27 2020-12-30 Atombeam Technologies, Inc. Data storage, transfer, synchronization, and security using recursive encoding
EP3682342B1 (en) 2019-09-11 2021-08-18 Advanced New Technologies Co., Ltd. Shared blockchain data storage based on error correction coding in trusted execution environments
EP4052136A4 (en) * 2019-10-28 2023-11-01 Atombeam Technologies Inc. SYSTEM AND METHODS FOR EFFICIENT BANDWIDTH CRYPTOGRAPHIC DATA TRANSFER
CN113472512A (zh) * 2021-06-10 2021-10-01 东软集团股份有限公司 智能合约执行方法、装置、存储介质及电子设备
CN114676117B (zh) * 2022-05-27 2022-08-16 成都明途科技有限公司 一种岗位数据存储方法、装置及岗位机器人
CN116303124B (zh) * 2023-03-29 2024-01-30 浙江正泰仪器仪表有限责任公司 一种数据搜索方法、装置、电子设备及存储介质

Family Cites Families (77)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
NL225002A (ko) 1957-04-23
US3016527A (en) 1958-09-04 1962-01-09 Bell Telephone Labor Inc Apparatus for utilizing variable length alphabetized codes
GB1564563A (en) 1977-05-25 1980-04-10 Int Computers Ltd Data sotrage apparatus
US4286256A (en) 1979-11-28 1981-08-25 International Business Machines Corporation Method and means for arithmetic coding utilizing a reduced number of operations
US4635141A (en) 1982-10-13 1987-01-06 United States Design Corporation Method and apparatus for storing data on magnetic or optical media
FR2668867B1 (fr) 1990-11-02 1993-01-29 Burger Jacques Procede de codage binaire a taux de basculement des elements binaires sensiblement uniforme, et procedes d'incrementation et de decrementation correspondants.
US7124302B2 (en) * 1995-02-13 2006-10-17 Intertrust Technologies Corp. Systems and methods for secure transaction management and electronic rights protection
JP3277792B2 (ja) * 1996-01-31 2002-04-22 株式会社日立製作所 データ圧縮方法および装置
US5818877A (en) 1996-03-14 1998-10-06 The Regents Of The University Of California Method for reducing storage requirements for grouped data values
US6465969B1 (en) 1997-08-04 2002-10-15 Lumimove, Inc. Electroluminescent display intelligent controller
US6052785A (en) 1997-11-21 2000-04-18 International Business Machines Corporation Multiple remote data access security mechanism for multitiered internet computer networks
JP2000059227A (ja) 1998-08-07 2000-02-25 Matsushita Electric Ind Co Ltd 符号化/復号化装置、及び符号化/復号化方法
US6297753B1 (en) 1999-01-29 2001-10-02 Victor Company Of Japan, Ltd. Eight-to-fifteen modulation using no merging bit and optical disc recording or reading systems based thereon
US6785815B1 (en) * 1999-06-08 2004-08-31 Intertrust Technologies Corp. Methods and systems for encoding and protecting data using digital signature and watermarking techniques
US6560599B1 (en) 1999-06-30 2003-05-06 Microsoft Corporation Method and apparatus for marking a hash table and using the marking for determining the distribution of records and for tuning
JP4351409B2 (ja) * 1999-08-31 2009-10-28 富士通株式会社 ファイル装置及びファイルアクセス方法
US6829695B1 (en) 1999-09-03 2004-12-07 Nexql, L.L.C. Enhanced boolean processor with parallel input
EP1158740B1 (en) * 2000-05-24 2009-09-16 Sony Deutschland GmbH Quality of Service negotiation
US7274697B2 (en) * 2000-11-16 2007-09-25 Tensilica, Inc. Fast IP route lookup with 16/K and 16/Kc compressed data structures
US8290160B1 (en) * 2001-10-17 2012-10-16 Appalachian Technologies Corporation of Pennsylvania Method and apparatus for secured facsimile transmission
US20030115447A1 (en) 2001-12-18 2003-06-19 Duc Pham Network media access architecture and methods for secure storage
CA2364820A1 (en) 2001-12-11 2003-06-11 Ibm Canada Limited-Ibm Canada Limitee Variable length encoding and decoding of ascending numerical sequences
US7587408B2 (en) 2002-03-21 2009-09-08 United States Postal Service Method and system for storing and retrieving data using hash-accessed multiple data stores
US6674908B1 (en) * 2002-05-04 2004-01-06 Edward Lasar Aronov Method of compression of binary data with a random number generator
JP4304360B2 (ja) 2002-05-22 2009-07-29 日本電気株式会社 音声符号化復号方式間の符号変換方法および装置とその記憶媒体
US7065619B1 (en) 2002-12-20 2006-06-20 Data Domain, Inc. Efficient data storage system
US20040143733A1 (en) 2003-01-16 2004-07-22 Cloverleaf Communication Co. Secure network data storage mediator
US7383378B1 (en) 2003-04-11 2008-06-03 Network Appliance, Inc. System and method for supporting file and block access to storage object on a storage appliance
US7143251B1 (en) 2003-06-30 2006-11-28 Data Domain, Inc. Data storage using identifiers
US7849063B2 (en) * 2003-10-17 2010-12-07 Yahoo! Inc. Systems and methods for indexing content for fast and scalable retrieval
US7290116B1 (en) * 2004-06-30 2007-10-30 Sun Microsystems, Inc. Level 2 cache index hashing to avoid hot spots
JP5432450B2 (ja) 2004-07-29 2014-03-05 オセ−テクノロジーズ ビーブイ エントロピー符号化を利用したカラー画像データの可逆圧縮
US7457813B2 (en) 2004-10-06 2008-11-25 Burnside Acquisition, Llc Storage system for randomly named blocks of data
US7330322B2 (en) 2005-01-28 2008-02-12 Seagate Technology Llc Utilizing a combination of physical tracks and virtual tracks to store data on a data storage medium
US7617370B2 (en) 2005-04-29 2009-11-10 Netapp, Inc. Data allocation within a storage system architecture
US7921088B1 (en) 2005-07-22 2011-04-05 X-Engines, Inc. Logical operations encoded by a function table for compressing index bits in multi-level compressed look-up tables
US7480766B2 (en) * 2005-08-03 2009-01-20 Sandisk Corporation Interfacing systems operating through a logical address space and on a direct data file basis
JP2009531976A (ja) * 2006-03-24 2009-09-03 ユニバーシティ オブ ミシシッピ セットアソシアティブキャッシュマッピング技術に基づく高速データ圧縮
JP2007272826A (ja) * 2006-03-31 2007-10-18 Sharp Corp 情報処理装置、情報処理方法、情報処理プログラム、および記録媒体
CA2546148A1 (en) * 2006-05-09 2007-11-09 Nikolajs Volkovs Method, system and computer program for polynomial based hashing and message authentication coding with separate generation of spectrums
US7962499B2 (en) * 2006-08-18 2011-06-14 Falconstor, Inc. System and method for identifying and mitigating redundancies in stored data
AU2006204634B2 (en) 2006-08-31 2009-10-29 Canon Kabushiki Kaisha Runlength encoding of leading ones and zeros
JP2008165293A (ja) * 2006-12-27 2008-07-17 Seiko Epson Corp データ検索装置、デバイス管理装置、データ検索方法、およびコンピュータプログラム
JP4990066B2 (ja) * 2007-08-21 2012-08-01 株式会社日立製作所 論理ボリュームのペアを利用したデータ保存の方式を変更する機能を備えたストレージシステム
US9413825B2 (en) 2007-10-31 2016-08-09 Emc Corporation Managing file objects in a data storage system
GB0721648D0 (en) * 2007-11-05 2007-12-19 Roke Manor Research Internet data processing systems
US20090169001A1 (en) 2007-12-28 2009-07-02 Cisco Technology, Inc. System and Method for Encryption and Secure Transmission of Compressed Media
US8214425B2 (en) 2008-01-29 2012-07-03 Mitel Networks Corporation System and method for storing a program using partial compression
GB2469955B (en) 2008-01-31 2012-09-12 Fujitsu Ltd Data compression/decompression method,and compression/decompression program
JP2009251725A (ja) * 2008-04-02 2009-10-29 Hitachi Ltd 記憶制御装置及び記憶制御装置を用いた重複データ検出方法。
US8745336B2 (en) 2008-05-29 2014-06-03 Vmware, Inc. Offloading storage operations to storage hardware
US8527482B2 (en) 2008-06-06 2013-09-03 Chrysalis Storage, Llc Method for reducing redundancy between two or more datasets
JP5414223B2 (ja) * 2008-09-16 2014-02-12 株式会社日立ソリューションズ インターネットバックアップにおける転送データ管理システム
US8412677B2 (en) * 2008-11-26 2013-04-02 Commvault Systems, Inc. Systems and methods for byte-level or quasi byte-level single instancing
US8200923B1 (en) * 2008-12-31 2012-06-12 Emc Corporation Method and apparatus for block level data de-duplication
JP5413948B2 (ja) * 2009-01-27 2014-02-12 日本電気株式会社 ストレージシステム
EP2214315A1 (en) 2009-01-30 2010-08-04 Thomson Licensing Method and device for encoding a bit sequence
JP4816740B2 (ja) * 2009-02-09 2011-11-16 ソニー株式会社 情報処理装置、および情報処理方法、並びにプログラム
US8140491B2 (en) 2009-03-26 2012-03-20 International Business Machines Corporation Storage management through adaptive deduplication
US8812570B2 (en) * 2009-05-28 2014-08-19 Red Hat, Inc. String hashing using a number generator
WO2011024260A1 (ja) 2009-08-25 2011-03-03 富士通株式会社 送信機、符号化装置、受信機、及び、復号化装置
JP2011082878A (ja) 2009-10-09 2011-04-21 Sony Corp 符号化装置、復号装置、情報処理システム、符号化方法およびプログラム
US9900150B2 (en) 2009-10-30 2018-02-20 International Business Machines Corporation Dispersed storage camera device and method of operation
JP4892072B2 (ja) * 2010-03-24 2012-03-07 株式会社東芝 ホスト装置と連携して重複データを排除するストレージ装置、同ストレージ装置を備えたストレージシステム、及び同システムにおける重複排除方法
JP5594828B2 (ja) * 2010-07-21 2014-09-24 学校法人東京電機大学 データ分散保管装置及び方法及びプログラム及び記録媒体
US8831221B2 (en) * 2010-09-28 2014-09-09 Lsi Corporation Unified architecture for crypto functional units
US9104326B2 (en) 2010-11-15 2015-08-11 Emc Corporation Scalable block data storage using content addressing
US8918607B2 (en) 2010-11-19 2014-12-23 International Business Machines Corporation Data archiving using data compression of a flash copy
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
US8832493B2 (en) * 2010-12-22 2014-09-09 Cleversafe, Inc. Storing directory metadata in a dispersed storage network
US9639543B2 (en) * 2010-12-28 2017-05-02 Microsoft Technology Licensing, Llc Adaptive index for data deduplication
WO2012117658A1 (ja) * 2011-02-28 2012-09-07 日本電気株式会社 ストレージシステム
US8539008B2 (en) 2011-04-29 2013-09-17 Netapp, Inc. Extent-based storage architecture
US8620865B2 (en) 2011-06-24 2013-12-31 Netapp, Inc. System and method for providing a unified storage system that supports file/object duality
US20140082324A1 (en) * 2012-09-14 2014-03-20 Reuven Elhamias Method and Storage Device for Using File System Data to Predict Host Device Operations
US10133636B2 (en) 2013-03-12 2018-11-20 Formulus Black Corporation Data storage and retrieval mediation system and methods for using same
US20140223118A1 (en) 2013-02-01 2014-08-07 Brian Ignomirello Bit Markers and Frequency Converters

Also Published As

Publication number Publication date
EP2951701A2 (en) 2015-12-09
CN105339904A (zh) 2016-02-17
WO2014121102A3 (en) 2014-10-09
CA2900030A1 (en) 2014-08-07
KR20150119880A (ko) 2015-10-26
BR112015018448A2 (pt) 2017-10-03
HK1219156A1 (zh) 2017-03-24
EP2951703A4 (en) 2016-09-21
EP2951703B1 (en) 2020-04-08
US9584312B2 (en) 2017-02-28
PH12015501698A1 (en) 2015-10-19
CN105190573B (zh) 2019-05-17
AU2014212170A1 (en) 2015-08-20
CN110083552A (zh) 2019-08-02
US20170026172A1 (en) 2017-01-26
CN105339904B (zh) 2019-10-11
JP6352308B2 (ja) 2018-07-04
JP2018152126A (ja) 2018-09-27
CN105190573A (zh) 2015-12-23
EP2951701A4 (en) 2016-10-26
MX2015009954A (es) 2016-01-15
US9467294B2 (en) 2016-10-11
PH12015501699A1 (en) 2015-10-19
WO2014121109A3 (en) 2015-03-19
WO2014121109A2 (en) 2014-08-07
HK1219155A1 (zh) 2017-03-24
MX2015009953A (es) 2017-09-01
JP6345698B2 (ja) 2018-06-20
JP2018152116A (ja) 2018-09-27
CA2900034A1 (en) 2014-08-07
WO2014121102A2 (en) 2014-08-07
EP2951703A2 (en) 2015-12-09
JP2016509309A (ja) 2016-03-24
US20140223196A1 (en) 2014-08-07
AU2014212163A1 (en) 2015-08-20
JP2016509310A (ja) 2016-03-24

Similar Documents

Publication Publication Date Title
US9584312B2 (en) Methods and systems for storing and retrieving data
US9880746B1 (en) Method to increase random I/O performance with low memory overheads
US10466932B2 (en) Cache data placement for compression in data storage systems
US20190146881A1 (en) Data storage and retrieval mediation system and methods for using same
JP6664218B2 (ja) 効率的なデータオブジェクトストレージ及び検索
US9659047B2 (en) Data deduplication utilizing extent ID database
US8370305B2 (en) Method of minimizing the amount of network bandwidth needed to copy data between data deduplication storage systems
US20140223118A1 (en) Bit Markers and Frequency Converters
US10387066B1 (en) Providing data deduplication in a data storage system with parallelized computation of crypto-digests for blocks of host I/O data
WO2023274536A1 (en) Method of storing data blocks for executing a snapshot with timestamp mechanism on data drives
CN116185949A (zh) 缓存存储方法以及相关设备
Shinde et al. Inline block level data de-duplication technique for ext4 file system

Legal Events

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