KR102030786B1 - 데이터 처리 방법, 장치 및 시스템 - Google Patents

데이터 처리 방법, 장치 및 시스템 Download PDF

Info

Publication number
KR102030786B1
KR102030786B1 KR1020177012992A KR20177012992A KR102030786B1 KR 102030786 B1 KR102030786 B1 KR 102030786B1 KR 1020177012992 A KR1020177012992 A KR 1020177012992A KR 20177012992 A KR20177012992 A KR 20177012992A KR 102030786 B1 KR102030786 B1 KR 102030786B1
Authority
KR
South Korea
Prior art keywords
strip
read
written
version number
recorded
Prior art date
Application number
KR1020177012992A
Other languages
English (en)
Other versions
KR20170068564A (ko
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
Application filed by 후아웨이 테크놀러지 컴퍼니 리미티드 filed Critical 후아웨이 테크놀러지 컴퍼니 리미티드
Publication of KR20170068564A publication Critical patent/KR20170068564A/ko
Application granted granted Critical
Publication of KR102030786B1 publication Critical patent/KR102030786B1/ko

Links

Images

Classifications

    • 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/16File or folder operations, e.g. details of user interfaces specifically adapted to file systems
    • 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/128Details of file system snapshots on the file-level, e.g. snapshot creation, administration, deletion
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
    • 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/1458Management of the backup or restore process
    • G06F11/1461Backup scheduling policy
    • 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/1458Management of the backup or restore process
    • G06F11/1464Management of the backup or restore process for networked environments
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • 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/122File system administration, e.g. details of archiving or snapshots using management policies
    • 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/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING 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/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0647Migration mechanisms
    • 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/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/84Using snapshots, i.e. a logical point-in-time copy of the data

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Human Computer Interaction (AREA)
  • Quality & Reliability (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer Security & Cryptography (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Retry When Errors Occur (AREA)
  • Mobile Radio Communication Systems (AREA)

Abstract

본 발명의 실시예는 데이터 관리 기술을 제공한다. OSD는 클라이언트 서버에 의해 전송되는 스트립 기록 요청을 수신하며, 상기 스트립 기록 요청은 기록될 스트립, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋 및 상기 기록될 스트립의 객체 ID를 싣고 있고, 상기 기록될 스트립의 버전 번호는 상기 기록될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응하고, 상기 기록될 스트립의 오프셋은 상기 기록될 스트립이 속하는 객체 내에서의 상기 기록될 스트립의 위치를 기술하고, 상기 기록될 스트립의 객체 ID는 상기 기록될 스트립이 속하는 객체의 ID이며; 상기 OSD는 상기 객체 ID, 상기 기록될 스트립의 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 상기 기록될 스트립을 기록한다. 본 발명의 적용함으로써, 객체 ID의 수량을 감소시킬 수 있다.

Description

데이터 처리 방법, 장치 및 시스템 {DATA PROCESSING METHOD, APPARATUS AND SYSTEM}
본 발명은 저장 분야에 관한 것으로, 특히 데이터 처리 방법, 장치 및 시스템에 관한 것이다.
객체 기반 저장 시스템(Object-Based Storage System)은 분산 저장 시스템이며, 저장 서버 및 객체 기반 저장 기기(OSD)를 포함한다. 객체 기반 저장 시스템은 또한 객체 저장 시스템이라고도 지칭될 수 있고, 객체 기반 저장 기기는 또한 객체 저장 기기라고도 지칭될 수 있다. 객체 저장 시스템에서, 객체는 가장 기본적인 콘텐츠 저장 단위로 사용된다. 데이터는 파일 또는 볼륨(volume)일 수 있다. 파일은 예로서 사용되며, 여기서 파일은 여러 프래그먼트(fragment) 분할되고, 파일 프래그먼트는 속성 정보(attribute information)를 가지며, 파일 프래그먼트, 파일 프래그먼트의 메타데이터(metadata) 및 파일 프래그먼트의 속성이 공동으로 객체를 구성할 수 있으며, 객체는 여러 OSD에 저장된다.
객체 저장 시스템은 스냅샷(Snapshot) 기능을 제공한다. 스냅샷은 특정 데이터 세트의 복제본이며, 이 복제본은 한 시점(복제본의 시작 시점)에 대응하는 데이터의 이미지를 나타낸다.
파일이 예로서 사용된다. 스냅샷을 획득한 후에, 파일 전체 또는 파일의 일부 데이터가 수정되면, 수정된 데이터를 저장 시스템에 저장해야 한다. 종래기술에서, 객체 ID가 객체의 유일한 식별자(unique identifier)로 사용되고, 동일한 파일이 갱신되면, 갱신된 데이터를 새로운 객체 ID로써 저장 기기에 저장해야 한다. 파일이 자주 갱신되면, 객체 ID의 총 수량이 매우 커져서, 저장 공간을 비교적 많이 차지하고 시스템 자원 손실이 증가한다.
본 발명은 객체 ID의 총 수량을 감소시킬 수 있고 객체 ID에 의해 점유되는 저장 공간을 감소시킬 수 있는 데이터 관리 기술을 제공한다.
제1 측면에 따르면, 본 발명의 실시예는 데이터 저장 방법을 제공하며, 상기 데이터 저장 방법은, 객체 저장 기기(object storage device, OSD)가 클라이언트 서버에 의해 전송되는 스트립 기록 요청(strip write request)을 수신하는 단계 - 상기 스트립 기록 요청은 기록될 스트립, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋 및 상기 기록될 스트립의 객체 ID를 싣고 있고, 상기 기록될 스트립의 버전 번호는 상기 기록될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷(snapshot)의 스냅샷 ID에 대응하고, 상기 기록될 스트립의 오프셋은 상기 기록될 스트립이 속하는 객체 내에서의 상기 기록될 스트립의 위치를 기술하고, 상기 기록될 스트립의 객체 ID는 상기 기록될 스트립이 속하는 객체의 ID임 -; 및 상기 객체 ID, 상기 기록될 스트립의 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 상기 기록될 스트립을 기록하는 단계를 포함한다.
제2 측면에 따르면, 본 발명의 실시예는 데이터 저장 방법을 제공하며, 상기 데이터 저장 방법은, 객체 저장 기기(OSD)가 클라이언트 서버에 의해 전송되는 스트립 기록 요청을 수신하는 단계 - 상기 스트립 기록 요청은 기록될 스트립, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋 및 상기 기록될 스트립의 객체 ID를 싣고 있고, 상기 기록될 스트립의 버전 번호는 상기 기록될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응하고, 상기 기록될 스트립의 오프셋은 상기 기록될 스트립이 속하는 객체 내에서의 상기 기록될 스트립의 위치를 기술하고, 상기 기록될 스트립의 객체 ID는 상기 기록될 스트립이 속하는 객체의 ID임 -; 상기 OSD가 상기 기록될 스트립의 버전 번호 및 상기 객체 ID를 사용하여 결정된 객체가 백업되어 있는지를 판정하는 단계; 및 상기 객체가 백업되어 있으면, 상기 OSD가, 상기 기록될 스트립을 상기 객체 ID, 상기 기록될 스트립의 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록하거나; 또는 상기 객체가 백업되어 있지 않으면, 상기 OSD가, 상기 기록될 스트립을 사용하여 스플라이싱된 객체(spliced object)를 생성한 다음, 상기 스플라이싱된 객체를 상기 기록될 스트립의 버전 번호 및 상기 객체 ID를 사용하여 결정된 저장 위치에 기록하는 단계를 포함한다.
제3 측면에 따르면, 본 발명의 실시예는 데이터 저장 방법을 제공하며, 상기 데이터 저장 방법은, 객체 저장 기기(OSD)가 클라이언트 서버에 의해 전송되는 스트립 기록 요청을 수신하는 단계 - 상기 스트립 기록 요청은 기록될 스트립, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋 및 상기 기록될 스트립의 객체 ID를 싣고 있고, 상기 기록될 스트립의 버전 번호는 상기 기록될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응하고, 상기 기록될 스트립의 오프셋은 상기 기록될 스트립이 속하는 객체 내에서의 상기 기록될 스트립의 위치를 기술하고, 상기 기록될 스트립의 객체 ID는 상기 기록될 스트립이 속하는 객체의 ID임 -; 상기 OSD가, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 객체 ID 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 스트립이 백업되어 있는지를 판정하는 단계; 및 상기 스트립이 백업되어 있으면, 상기 기록될 스트립을 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 객체 ID 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록하거나; 또는 상기 스트립이 백업되어 있지 않으면, 상기 OSD 중의 기본 버전(base version)의 객체에 있고 크기가 상기 기록될 스트립의 크기인 데이터를, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋, 및 상기 기록될 스트립의 객체 ID를 사용하여 결정된 저장 위치에 백업하고 - 상기 기본 버전의 객체의 객체 ID는 상기 기록될 스트립의 객체 ID와 동일하고, 상기 기본 버전의 객체의 버전 번호가 기본 버전 번호임 -, 상기 기록될 스트립을 상기 기록될 스트립의 객체 ID, 상기 기본 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록하는 단계를 포함한다.
제4 측면에 따르면, 본 발명의 실시예는 데이터 저장 방법을 제공하며, 상기 데이터 저장 방법은, 객체 저장 기기(OSD)가 클라이언트 서버에 의해 전송되는 스트립 기록 요청을 수신하는 단계 - 상기 스트립 기록 요청은 기록될 스트립, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋 및 상기 기록될 스트립의 객체 ID를 싣고 있고, 상기 기록될 스트립의 버전 번호는 상기 기록될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응하고, 상기 기록될 스트립의 오프셋은 상기 기록될 스트립이 속하는 객체 내에서의 상기 기록될 스트립의 위치를 기술하고, 상기 기록될 스트립의 객체 ID는 상기 기록될 스트립이 속하는 객체의 ID임 -; 상기 OSD가 상기 기록될 스트립의 버전 번호 및 상기 객체 ID를 사용하여 결정된 객체가 백업되어 있는지를 판정하는 단계; 및 상기 객체가 백업되어 있으면, 상기 OSD가, 상기 기록될 스트립을 상기 객체 ID, 상기 객체의 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록하거나; 또는 상기 객체가 백업되어 있지 않으면, 상기 OSD 중의 기본 버전의 객체에 있는 데이터를, 상기 기록될 스트립의 버전 번호 및 상기 객체 ID를 사용하여 결정된 저장 위치에 백업하고 - 상기 기본 버전의 객체의 객체 ID는 상기 기록될 스트립의 객체 ID와 동일하고, 상기 기본 버전의 객체의 버전 번호가 기본 버전 번호임 -; 상기 OSD가, 상기 기록될 스트립을 상기 객체 ID, 상기 기본 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록하는 단계를 포함한다.
제5 측면에 따르면, 본 발명의 실시예는 데이터 판독 방법을 제공하며, 상기 데이터 판독 방법은, 객체 저장 기기(OSD)가 클라이언트 서버에 의해 전송되는 스트립 판독 요청을 수신하는 단계 - 상기 스트립 판독 요청은 판독될 스트립의 크기, 상기 판독될 스트립의 오프셋, 상기 판독될 스트립의 버전 번호 및 상기 판독될 스트립의 객체 ID를 싣고 있고, 상기 판독될 스트립의 버전 번호는 상기 판독될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응하고, 상기 판독될 스트립의 객체 ID는 상기 판독될 스트립이 속하는 객체의 ID임 -; 및 상기 OSD가 상기 객체 ID, 상기 판독될 스트립의 버전 번호 및 상기 판독될 스트립의 오프셋을 사용하여 결정된 스트립이 백업되어 있는지를 판정하는 단계; 및 상기 스트립이 백업되어 있으면, 상기 객체 ID, 상기 판독될 스트립의 버전 번호, 상기 판독될 스트립의 오프셋, 및 상기 판독될 스트립의 크기를 사용하여 결정된 데이터를 판독하고, 상기 판독된 데이터를 상기 판독될 스트립으로 사용하여, 상기 판독될 스트립을 상기 클라이언트 서버에 전송하거나; 또는 상기 스트립이 백업되어 있지 않으면, 상기 판독될 스트립의 객체 ID와 동일한 객체 ID를 가지고 상기 판독될 스트립의 버전 번호와 상이한 버전 번호를 가진 객체를, 객체의 스냅샷 시각의 내림차순에 따라 하나씩, 상기 판독될 스트립의 오프셋을 사용하여 결정된 저장 위치에서 유효한 데이터를 저장하고 있는 객체가 발견될 때까지 검색하고, 상기 발견된 유효한 데이터를 상기 판독될 스트립으로 사용하고, 상기 판독될 스트립을 상기 클라이언트 서버에 전송하는 단계 - 상기 객체의 버전 번호는 상기 객체가 생성되기 전에 존재하고 있는, 상기 판독될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응함 -를 포함한다.
제6 측면에 따르면, 본 발명의 실시예는 데이터 판독 방법을 제공하며, 상기 데이터 판독 방법은, OSD가 상기 클라이언트 서버에 의해 전송되는 스트립 판독 요청을 수신하는 단계 - 상기 스트립 판독 요청은 판독될 스트립의 크기, 상기 판독될 스트립의 오프셋, 상기 판독될 스트립의 버전 번호 및 상기 판독될 스트립의 객체 ID를 싣고 있고, 상기 판독될 스트립의 버전 번호는 상기 판독될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응하고, 상기 판독될 스트립의 객체 ID는 상기 판독될 스트립이 속하는 객체의 ID임 -; 상기 OSD가 상기 객체 ID 및 상기 판독될 스트립의 버전 번호를 사용하여 결정된 객체가 백업되어 있는지를 판정하는 단계; 및 상기 객체가 백업되어 있으면, 상기 객체 ID, 상기 판독될 스트립의 버전 번호, 상기 판독될 스트립의 오프셋, 및 상기 판독될 스트립의 크기를 사용하여 결정된 데이터를 판독하고, 상기 판독된 데이터를 상기 판독될 스트립으로 사용하고, 상기 판독될 스트립을 상기 클라이언트 서버에 전송하거나; 또는 상기 객체가 백업되어 있지 않으면, 상기 판독될 스트립의 오프셋을 사용하여 결정된 저장 위치에서 상기 판독될 스트립의 객체 ID와 동일한 객체 ID를 가지고 상기 판독될 스트립의 버전 번호와 상이한 버전 번호를 가진 객체가 발견될 때까지, 객체의 스냅샷 시각의 내림차순에 따라 하나씩 검색하고, 발견된 유효한 데이터를 상기 판독될 스트립으로 사용하고, 상기 판독될 스트립을 상기 클라이언트 서버에 전송하는 단계 - 상기 객체의 버전 번호는 상기 객체가 생성되기 전에 존재하고 있는, 상기 판독될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응함 -를 포함한다.
제7 측면에 따르면, 본 발명의 실시예는 데이터 처리 장치를 제공하며, 상기 데이터 처리 장치는, 클라이언트 서버에 의해 전송되는 스트립 기록 요청을 수신하도록 구성된 스트립 요청 수신 모듈 - 상기 스트립 기록 요청은 기록될 스트립, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋 및 상기 기록될 스트립의 객체 ID를 싣고 있고, 상기 기록될 스트립의 버전 번호는 상기 기록될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷(snapshot)의 스냅샷 ID에 대응하고, 상기 기록될 스트립의 오프셋은 상기 기록될 스트립이 속하는 객체 내에서의 상기 기록될 스트립의 위치를 기술하고, 상기 기록될 스트립의 객체 ID는 상기 기록될 스트립이 속하는 객체의 ID임 -; 및
상기 객체 ID, 상기 기록될 스트립의 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 상기 기록될 스트립을 기록하도록 구성된 스트립 저장 모듈을 포함한다.
제8 측면에 따르면, 본 발명의 실시예는 데이터 처리 장치를 제공하며, 상기 데이터 처리 장치는, 클라이언트 서버에 의해 전송되는 스트립 기록 요청을 수신하도록 구성된 스트립 요청 수신 모듈 - 상기 스트립 기록 요청은 기록될 스트립, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋 및 상기 기록될 스트립의 객체 ID를 싣고 있고, 상기 기록될 스트립의 버전 번호는 상기 기록될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷(snapshot)의 스냅샷 ID에 대응하고, 상기 기록될 스트립의 오프셋은 상기 기록될 스트립이 속하는 객체 내에서의 상기 기록될 스트립의 위치를 기술하고, 상기 기록될 스트립의 객체 ID는 상기 기록될 스트립이 속하는 객체의 ID임 -; 및 상기 기록될 스트립의 버전 번호 및 상기 객체 ID를 사용하여 결정된 객체가 백업되어 있는지를 판정하도록 구성된 스트립 저장 모듈을 포함하고,
상기 객체가 백업되어 있으면, 상기 스트립 저장 모듈은 추가로, 상기 기록될 스트립을 상기 객체 ID, 상기 기록될 스트립의 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록하도록 구성되거나; 상기 객체가 백업되어 있지 않으면, 상기 스트립 저장 모듈은 추가로, 상기 기록될 스트립을 사용하여 스플라이싱된 객체를 생성한 다음, 상기 스플라이싱된 객체를 상기 기록될 스트립의 버전 번호 및 상기 객체 ID를 사용하여 결정된 저장 위치에 기록하도록 구성된다.
제9 측면에 따르면, 본 발명의 실시예는 데이터 처리 장치를 제공하며, 상기 데이터 처리 장치는, 클라이언트 서버에 의해 전송되는 스트립 기록 요청을 수신하도록 구성된 스트립 요청 수신 모듈 - 상기 스트립 기록 요청은 기록될 스트립, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋 및 상기 기록될 스트립의 객체 ID를 싣고 있고, 상기 기록될 스트립의 버전 번호는 상기 기록될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응하고, 상기 기록될 스트립의 오프셋은 상기 기록될 스트립이 속하는 객체 내에서의 상기 기록될 스트립의 위치를 기술하고, 상기 기록될 스트립의 객체 ID는 상기 기록될 스트립이 속하는 객체의 ID임 -; 및 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 객체 ID 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 스트립이 백업되어 있는지를 판정하고; 상기 스트립이 백업되어 있으면, 상기 기록될 스트립을 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 객체 ID 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록하거나; 상기 스트립이 백업되어 있지 않으면, 상기 데이터 저장 장치 중의 기본 버전의 객체에 있고 크기가 상기 기록될 스트립의 크기인 데이터를, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋, 및 상기 기록될 스트립의 객체 ID를 사용하여 결정된 저장 위치에 백업하고 - 상기 기본 버전의 객체의 객체 ID는 상기 기록될 스트립의 객체 ID와 동일하고, 상기 기본 버전의 객체의 버전 번호가 기본 버전 번호임 -, 상기 기록될 스트립을 상기 기록될 스트립의 객체 ID, 상기 기본 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록하도록 구성되는 스트립 저장 모듈을 포함한다.
제10 측면에 따르면, 본 발명의 실시예는 데이터 처리 장치를 제공하며, 상기 데이터 처리 장치는, 클라이언트 서버에 의해 전송되는 스트립 기록 요청을 수신하도록 구성된 스트립 요청 수신 모듈 - 상기 스트립 기록 요청은 기록될 스트립, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋 및 상기 기록될 스트립의 객체 ID를 싣고 있고, 상기 기록될 스트립의 버전 번호는 상기 기록될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷(snapshot)의 스냅샷 ID에 대응하고, 상기 기록될 스트립의 오프셋은 상기 기록될 스트립이 속하는 객체 내에서의 상기 기록될 스트립의 위치를 기술하고, 상기 기록될 스트립의 객체 ID는 상기 기록될 스트립이 속하는 객체의 ID임 -; 및 (1) 상기 기록될 스트립의 버전 번호 및 상기 객체 ID를 사용하여 결정된 객체가 백업되어 있는지를 판정하고; (2-1) 상기 객체가 백업되어 있으면, 상기 기록될 스트립을 상기 객체 ID, 상기 객체의 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록하거나; 또는 (2-2) 상기 객체가 백업되어 있지 않으면, 기본 버전의 객체에 있는 데이터를, 상기 기록될 스트립의 버전 번호 및 상기 객체 ID를 사용하여 결정된 저장 위치에 백업하도록 구성된 스트립 저장 모듈 - 상기 기본 버전의 객체의 객체 ID는 상기 기록될 스트립의 객체 ID와 동일하고, 상기 기본 버전의 객체의 버전 번호가 기본 버전 번호임 -을 포함하고, 상기 스트립 저장 모듈은 추가로, 상기 기록될 스트립을 상기 객체 ID, 상기 기본 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록하도록 구성된다.
제11 측면에 따르면, 본 발명의 실시예는 데이터 처리 장치를 제공하며, 상기 데이터 처리 장치는, 클라이언트 서버에 의해 전송되는 스트립 판독 요청을 수신하도록 구성된 스트립 요청 수신 모듈 - 상기 스트립 판독 요청은 판독될 스트립의 크기, 상기 판독될 스트립의 오프셋, 상기 판독될 스트립의 버전 번호 및 상기 판독될 스트립의 객체 ID를 싣고 있고, 상기 판독될 스트립의 버전 번호는 상기 판독될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응하고, 상기 판독될 스트립의 객체 ID는 상기 판독될 스트립이 속하는 객체의 ID임 -; 및
(1) 상기 객체 ID, 상기 판독될 스트립의 버전 번호 및 상기 판독될 스트립의 오프셋을 사용하여 결정된 스트립이 백업되어 있는지를 판정하고; (2-1) 상기 스트립이 백업되어 있으면, 상기 객체 ID, 상기 판독될 스트립의 버전 번호, 상기 판독될 스트립의 오프셋, 및 상기 판독될 스트립의 크기를 사용하여 결정된 데이터를 판독하고, 상기 판독된 데이터를 상기 판독될 스트립으로 사용하여, 상기 판독될 스트립을 상기 클라이언트 서버에 전송하거나; 또는 (2-2) 상기 스트립이 백업되어 있지 않으면, 상기 판독될 스트립의 객체 ID와 동일한 객체 ID를 가지고 상기 판독될 스트립의 버전 번호와 상이한 버전 번호를 가진 객체를, 객체의 스냅샷 시각의 내림차순에 따라 하나씩, 상기 판독될 스트립의 오프셋을 사용하여 결정된 저장 위치에서 유효한 데이터를 저장하고 있는 객체가 발견될 때까지 검색하고, 상기 발견된 유효한 데이터를 상기 판독될 스트립으로 사용하고, 상기 판독될 스트립을 상기 클라이언트 서버에 전송하도록 구성된 스트립 판독 모듈 - 상기 객체의 버전 번호는 상기 객체가 생성되기 전에 존재하고 있는, 상기 판독될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응함 -을 포함한다.
제12 측면에 따르면, 본 발명의 실시예는 데이터 처리 장치를 제공하며, 상기 데이터 처리 장치는, 클라이언트 서버에 의해 전송되는 스트립 판독 요청을 수신하도록 구성된 스트립 요청 수신 모듈 - 상기 스트립 판독 요청은 판독될 스트립의 크기, 상기 판독될 스트립의 오프셋, 상기 판독될 스트립의 버전 번호 및 상기 판독될 스트립의 객체 ID를 싣고 있고, 상기 판독될 스트립의 버전 번호는 상기 판독될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응하고, 상기 판독될 스트립의 객체 ID는 상기 판독될 스트립이 속하는 객체의 ID임 -; 및 (1) 상기 객체 ID 및 상기 판독될 스트립의 버전 번호를 사용하여 결정된 객체가 백업되어 있는지를 판정하고; (2-1) 상기 객체가 백업되어 있으면, 상기 객체 ID, 상기 판독될 스트립의 버전 번호, 상기 판독될 스트립의 오프셋, 및 상기 판독될 스트립의 크기를 사용하여 결정된 데이터를 판독하고, 상기 판독된 데이터를 상기 판독될 스트립으로 사용하여, 상기 판독될 스트립을 상기 클라이언트 서버에 전송하거나; 또는 (2-2) 상기 객체가 백업되어 있지 않으면, 상기 판독될 스트립의 객체 ID와 동일한 객체 ID를 가지고 상기 판독될 스트립의 버전 번호와 상이한 버전 번호를 가진 객체를, 객체의 스냅샷 시각의 내림차순에 따라 하나씩, 상기 판독될 스트립의 오프셋을 사용하여 결정된 저장 위치에서 유효한 데이터를 저장하고 있는 객체가 발견될 때까지 검색하고, 상기 발견된 유효한 데이터를 상기 판독될 스트립으로 사용하고, 상기 판독될 스트립을 상기 클라이언트 서버에 전송하도록 구성된 스트립 판독 모듈 - 상기 객체의 버전 번호는 상기 객체가 생성되기 전에 존재하고 있는, 상기 판독될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응함 -을 포함한다.
제13 측면에 따르면, 본 발명의 실시예는 클라이언트 서버와 객체 저장 기기를 포함하는 데이터 저장 시스템을 제공하며, 상기 클라이언트 서버는, 파일 기록 요청을 수신하도록 구성되며, 상기 파일 기록 요청은 기록될 데이터, 상기 기록될 데이터의 오프셋, 및 파일명을 싣고 있고, 상기 기록될 데이터는 상기 파일의 일부이고-; 상기 클라이언트 서버는 상기 파일명에 따라 파일 식별자(FID)를 취득하고, 상기 FID에 따라 상기 파일의 메타데이터를 조회하여 상기 파일의 버전 번호를 취득하고, 상기 파일의 버전 번호를 상기 기록될 스트립의 버전 번호를 사용하며, 상기 파일의 버전 번호는 상기 파일의 최근 스냅샷의 스냅샷 ID에 대응하고; 상기 클라이언트 서버는, 상기 기록될 데이터의 오프셋 및 상기 기록될 데이터의 크기에 따라, 상기 기록될 데이터를 상기 기록될 스트립을 포함하는 복수의 스트립으로 분할하고, 상기 기록될 스트립이 속하는 객체의 ID를 결정하고, 상기 기록될 스트립의 오프셋을 취득하며; 스트립 기록 요청을 생성하고 상기 스트립 기록 요청을 상기 객체 저장 기기에 전송하며; 상기 객체 저장 기기는, 스트립 기록 요청을 수신하도록 구성되며, 상기 스트립 기록 요청은 기록될 스트립, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋 및 상기 기록될 스트립의 객체 ID를 싣고 있고, 상기 기록될 스트립의 버전 번호는 상기 기록될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응하고, 상기 기록될 스트립의 오프셋은 상기 기록될 스트립이 속하는 객체 내에서의 상기 기록될 스트립의 위치를 기술하고, 상기 기록될 스트립의 객체 ID는 상기 기록될 스트립이 속하는 객체의 ID이며; 상기 OSD는 상기 기록될 스트립을 상기 객체 ID, 상기 기록될 스트립의 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록한다.
제14 측면에 따르면, 본 발명의 실시예는 클라이언트 서버와 객체 저장 기기를 포함하는 데이터 저장 시스템을 제공하며, 상기 클라이언트 서버는, 볼륨 기록 요청을 수신하고 - 상기 볼륨 기록 요청은 기록될 데이터, 상기 기록될 데이터의 오프셋, 및 볼륨 식별자(ID)를 싣고 있고, 상기 기록될 데이터는 상기 볼륨의 일부임 -; 상기 볼륨 ID에 따라 상기 볼륨의 메타데이터를 조회하여 상기 볼륨의 버전 번호를 취득하고 - 상기 볼륨의 버전 번호는 상기 볼륨의 최근 스냅샷의 스냅샷 ID에 대응함 -; 상기 기록될 데이터의 오프셋 및 상기 기록될 데이터의 크기에 따라, 상기 기록될 데이터 세그먼트를 상기 기록될 스트립을 포함하는 복수의 스트립으로 분할하고, 상기 기록될 스트립이 속하는 객체의 ID를 결정하고, 상기 기록될 스트립의 오프셋을 취득하며; 스트립 기록 요청을 생성하고 상기 스트립 기록 요청을 상기 객체 저장 기기에 전송하도록 구성되며; 상기 객체 저장 기기는, 스트립 기록 요청을 수신하도록 구성되며, 상기 스트립 기록 요청은 기록될 스트립, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋 및 상기 기록될 스트립의 객체 ID를 싣고 있고, 상기 기록될 볼륨의 버전 번호는 상기 기록될 스트립의 버전 번호이고, 상기 기록될 스트립의 오프셋은 상기 기록될 스트립이 속하는 객체 내에서의 상기 기록될 스트립의 위치를 기술하고, 상기 기록될 스트립의 객체 ID는 상기 기록될 스트립이 속하는 객체의 ID이며; 상기 OSD는, 상기 기록될 스트립을 상기 객체 ID, 상기 기록될 스트립의 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록한다.
제15 측면에 따르면, 본 발명의 실시예는 클라이언트 서버와 객체 저장 기기를 포함하는 데이터 저장 시스템을 제공하며, 상기 클라이언트 서버는, 파일 기록 요청을 수신하고 - 상기 파일 기록 요청은 기록될 데이터, 상기 기록될 데이터의 오프셋, 및 파일명을 싣고 있고, 상기 기록될 데이터는 상기 파일의 일부임 -; 상기 파일명에 따라 파일 식별자(FID)를 취득하고, 상기 FID에 따라 상기 파일의 메타데이터를 조회하여 상기 파일의 버전 번호를 취득하도록 구성되며, 상기 파일의 버전 번호는 상기 파일의 최근 스냅샷의 스냅샷 ID에 대응하며;
상기 클라이언트 서버는, 상기 기록될 데이터의 오프셋 및 상기 기록될 데이터의 크기에 따라, 상기 기록될 데이터를 상기 기록될 스트립을 포함하는 복수의 스트립으로 분할하고, 상기 기록될 스트립이 속하는 객체의 ID를 결정하고, 상기 기록될 스트립의 오프셋을 취득하며; 스트립 기록 요청을 생성하고 상기 스트립 기록 요청을 상기 객체 저장 기기에 전송하며; 상기 객체 저장 기기는, 상기 스트립 기록 요청을 수신하고 - 상기 스트립 기록 요청은 기록될 스트립, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋 및 상기 기록될 스트립의 객체 ID를 싣고 있고, 상기 기록될 스트립의 버전 번호는 상기 기록될 스트립이 속하는 파일의 최근 스냅샷의 스냅샷 ID에 대응하고, 상기 기록될 스트립의 오프셋은 상기 기록될 스트립이 속하는 객체 내에서의 상기 기록될 스트립의 위치를 기술하고, 상기 기록될 스트립의 객체 ID는 상기 기록될 스트립이 속하는 객체의 ID임 -; 상기 기록될 스트립의 버전 번호 및 상기 객체 ID를 사용하여 결정된 객체가 백업되어 있는지를 판정하고; 상기 객체가 백업되어 있으면, 상기 기록될 스트립을 상기 객체 ID, 상기 객체의 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록하거나; 또는 상기 객체가 백업되어 있지 않으면, 상기 기록될 스트립을 사용하여 스플라이싱된 객체를 생성한 다음, 상기 스플라이싱된 객체를 상기 기록될 스트립의 버전 번호 및 상기 객체 ID를 사용하여 결정된 저장 위치에 기록하도록 구성된다.
제16 측면에 따르면, 본 발명의 실시예는 클라이언트 서버와 객체 저장 기기를 포함하는 데이터 저장 시스템을 제공하며, 상기 클라이언트 서버는, 볼륨 기록 요청을 수신하고 - 상기 볼륨 기록 요청은 기록될 데이터, 상기 기록될 데이터의 오프셋, 및 볼륨 식별자(ID)를 싣고 있고, 상기 기록될 데이터는 상기 볼륨의 일부임 -; 상기 볼륨 ID에 따라 상기 볼륨의 메타데이터를 조회하여 상기 볼륨의 버전 번호를 취득하고 - 상기 볼륨의 버전 번호는 상기 볼륨의 최근 스냅샷의 스냅샷 ID에 대응함 -; 상기 기록될 데이터의 오프셋 및 상기 기록될 데이터의 크기에 따라, 기록될 데이터 세그먼트를 상기 기록될 스트립을 포함하는 복수의 스트립으로 분할하고, 상기 기록될 스트립이 속하는 객체의 ID를 결정하고, 상기 기록될 스트립의 오프셋을 취득하며; 스트립 기록 요청을 생성하고 상기 스트립 기록 요청을 상기 객체 저장 기기에 전송하도록 구성되며; 상기 객체 저장 장치는, 스트립 기록 요청을 수신하고 - 상기 스트립 기록 요청은 기록될 스트립, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋 및 상기 기록될 스트립의 객체 ID를 싣고 있고, 상기 기록될 스트립의 버전 번호는 상기 기록될 스트립이 속하는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응하고, 상기 기록될 스트립의 오프셋은 상기 기록될 스트립이 속하는 객체 내에서의 상기 기록될 스트립의 위치를 기술하고, 상기 기록될 스트립의 객체 ID는 상기 기록될 스트립이 속하는 객체의 ID임 -; 상기 기록될 스트립의 버전 번호 및 상기 객체 ID를 사용하여 결정된 객체가 백업되어 있는지를 판정하고; 상기 객체가 백업되어 있으면, 상기 기록될 스트립을 상기 객체 ID, 상기 객체의 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록하거나; 또는 상기 객체가 백업되어 있지 않으면, 상기 기록될 스트립을 사용하여 스플라이싱된 객체를 생성한 다음, 상기 스플라이싱된 객체를 상기 기록될 스트립의 버전 번호 및 상기 객체 ID를 사용하여 결정된 저장 위치에 기록하도록 구성된다.
제17 측면에 따르면, 본 발명의 실시예는 클라이언트 서버와 객체 저장 기기를 포함하는 데이터 판독 시스템을 제공하며, 상기 클라이언트 서버는, 파일 판독 요청을 수신하고 - 상기 파일 판독 요청은 파일명, 판독될 데이터의 크기 및 상기 판독될 데이터의 오프셋을 싣고 있고, 상기 판독될 데이터는 상기 파일의 일부임 -; 상기 파일명에 따라 파일 식별자(FID)를 취득하고, 상기 FID에 따라 상기 파일의 메타데이터를 조회하여 상기 파일의 버전 번호를 취득하고, 상기 파일의 버전 번호를 상기 판독될 스트립의 버전 번호로 사용하며 -상기 파일의 버전 번호는 상기 판독될 스트립이 속하는 파일의 최근 스냅샷의 스냅샷 ID에 대응함 -; 상기 판독될 데이터의 오프셋 및 상기 판독될 데이터의 크기에 따라, 상기 판독될 스트립이 속하는 객체의 ID를 결정하고, 상기 판독될 스트립의 오프셋을 취득하며; 스트립 판독 요청을 생성하여 전송하도록 구성되며; 상기 객체 저장 기기는, 스트립 판독 요청을 수신하고 - 상기 스트립 판독 요청은 판독될 스트립의 크기, 상기 판독될 스트립의 오프셋, 상기 판독될 스트립의 버전 번호, 및 상기 판독될 스트립의 객체 ID를 싣고 있고, 상기 판독될 스트립의 버전 번호는 상기 판독될 스트립이 속하는 파일의 최근 스냅샷의 스냅샷 ID에 대응하고, 상기 판독될 스트립의 객체 ID는 상기 판독될 스트립이 속하는 객체의 ID임 -; 상기 객체 ID, 상기 판독될 스트립의 버전 번호 및 상기 판독될 스트립의 오프셋을 사용하여 결정된 스트립이 백업되어 있는지를 판정하고; 상기 스트립이 백업되어 있으면, 상기 객체 ID, 상기 판독될 스트립의 버전 번호, 상기 판독될 스트립의 오프셋, 및 상기 판독될 스트립의 크기를 사용하여 결정된 데이터를 판독하고, 상기 판독된 데이터를 상기 판독될 스트립으로 사용하고, 상기 판독될 스트립을 상기 클라이언트 서버에 전송하거나; 또는 상기 스트립이 백업되어 있지 않으면, 상기 판독될 스트립의 객체 ID와 동일한 객체 ID를 가지고 상기 판독될 스트립의 버전 번호와 상이한 버전 번호를 가진 객체를, 객체의 스냅샷 시각의 내림차순에 따라 하나씩, 상기 판독될 스트립의 오프셋을 사용하여 결정된 저장 위치에서 유효한 데이터를 저장하고 있는 객체가 발견될 때까지 검색하고, 상기 발견된 유효한 데이터를 상기 판독될 스트립으로 사용하고, 상기 판독될 스트립을 상기 클라이언트 서버에 전송하도록 구성되며, 상기 객체의 버전 번호는 상기 객체가 생성되기 전에 존재하고 있는, 상기 판독될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응한다.
제18 측면에 따르면, 본 발명의 실시예는 클라이언트 서버와 객체 저장 기기를 포함하는 데이터 판독 시스템을 제공하며, 상기 클라이언트 서버는, 볼륨 판독 요청을 수신하고 - 상기 볼륨 판독 요청은 볼륨 ID, 판독될 데이터의 크기 및 상기 판독될 데이터의 오프셋을 싣고 있고, 상기 판독될 데이터는 상기 볼륨의 일부임 -; 상기 볼륨 ID에 따라 상기 볼륨의 메타데이터를 조회하여 상기 볼륨의 버전 번호를 취득하고, 상기 볼륨의 버전 번호를 상기 판독될 스트립의 버전 번호로 사용하며 - 상기 볼륨의 버전 번호는 상기 판독될 스트립이 속하는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응함 -; 상기 판독될 데이터의 오프셋 및 상기 판독될 데이터의 크기에 따라, 상기 판독될 스트립이 속하는 객체의 ID를 결정하고, 상기 판독될 스트립의 오프셋을 취득하며; 스트립 판독 요청을 생성하여 전송하도록 구성되며; 상기 객체 저장 기기는, 상기 스트립 판독 요청을 수신하고 - 상기 스트립 판독 요청은 상기 판독될 스트립의 크기, 상기 판독될 스트립의 오프셋, 상기 판독될 스트립의 버전 번호 및 상기 판독될 스트립의 객체 ID를 싣고 있고, 상기 판독될 스트립의 버전 번호는 상기 판독될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응하고, 상기 판독될 스트립의 객체 ID는 상기 판독될 스트립이 속하는 객체의 ID임 -; 상기 객체 ID, 상기 판독될 스트립의 버전 번호 및 상기 판독될 스트립의 오프셋을 사용하여 결정된 스트립이 백업되어 있는지를 판정하고; 상기 스트립이 백업되어 있으면, 상기 객체 ID, 상기 판독될 스트립의 버전 번호, 상기 판독될 스트립의 오프셋, 및 상기 판독될 스트립의 크기를 사용하여 결정된 데이터를 판독하고, 상기 판독된 데이터를 상기 판독될 스트립으로 사용하여, 상기 판독될 스트립을 상기 클라이언트 서버에 전송하거나; 또는 상기 스트립이 백업되어 있지 않으면, 상기 판독될 스트립의 객체 ID와 동일한 객체 ID를 가지고 상기 판독될 스트립의 버전 번호와 상이한 버전 번호를 가진 객체를, 객체의 스냅샷 시각의 내림차순에 따라 하나씩, 상기 판독될 스트립의 오프셋을 사용하여 결정된 저장 위치에서 상기 판독될 스트립의 오프셋을 사용하여 결정된 저장 위치에서 유효한 데이터를 저장하고 있는 객체가 발견될 때까지 검색하고, 상기 발견된 유효한 데이터를 상기 판독될 스트립으로 사용하고, 상기 판독될 스트립을 상기 클라이언트 서버에 전송하도록 구성되며, 상기 객체의 버전 번호는 상기 객체가 생성되기 전에 존재하고 있는, 상기 판독될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응한다.
본 발명을 적용함으로써, 객체 ID와 버전 번호의 조합이 종래기술에서의 객체 ID 대신에 사용되어, 객체 ID의 수량을 감소시키고, 시스템 자원 손실을 감소시킨다.
본 발명의 실시예에서의 기술적 방안을 더욱 명확하게 설명하기 위해, 이하에서는 실시예 또는 종래기술의 설명에 필요한 첨부도면을 간단하게 소개한다. 명백히, 이하의 설명에서의 첨부도면은 단지 본 발명의 일부 실시예를 보여줄 뿐이며, 창의적인 노력 없이 이들 첨부도면에 따라 다른 도면을 도출할 수 있을 것이다.
도 1은 본 발명의 실시예에 따른 객체 저장 시스템의 아키텍처도이다.
도 2는 본 발명에 따른 데이터 처리 방법의 실시예의 흐름도이다.
도 3a 및 도 3b는 본 발명의 실시예에 따른 스트립 분배 정책(strip distribution policy )의 개략도이다.
도 4는 ROW 기반 스트립 판독 방안의 실시예의 도면이다.
도 5는 COW 기반 트립 판독 방안의 실시예의 도면이다.
도 6은 본 발명의 실시예에 따른 저장 시스템의 실시예의 개략 구성도이다.
도 7은 본 발명에 따른 저장 시스템의 개략 구성도이다.
이하에 본 발명의 실시예에서의 첨부도면을 참조하여, 본 발명의 기술적 방안을 명확하고 완전하게 설명한다. 명백히, 설명하는 실시예는 본 발명의 실시예의 전부가 아니라 일부이다. 본 발명의 실시예에 기초하여 얻은 모든 다른 실시예는 본 발명의 보호 범위에 속한다.
도 1에 도시된 바와 같이, 도 1은 본 발명의 실시예에 따른 객체 저장 시스템의 아키텍처도이며, 이 객체 저장 시스템은 클라이언트 서버(11) 및 객체 저장 기기(12)를 포함할 수 있다. 객체 저장 기기(12)는 클라이언트 서버(11)에 객체(Object) 저장 서비스를 제공한다.
객체 기반 저장 기기(Object-based Storage Device, OSD)라고도 할 수도 있다. 객체 저장 기술에서, 저장 시스템은 객체 저장 기기에 기초하여 생성되고, 각각의 객체 저장 기기는 특정 지능을 가질 수 있고 객체 저장 기기상의 데이터 분배를 자동으로 관리할 수 있다.
객체는 시스템의 기본 데이터 저장 단위이다. 파일은 일례로 사용되며, 객체는 실제로 파일의 데이터 중 일부와 이 데이터의 일부에 대한 속성 정보의 조합이며, 속성 정보는 또한 메타데이터(Meta Data)라고도 하며, 파일 기반의 독립 디스크의 여분 배열(Redundant Arrays of Independent Disks, RAID) 파라미터, 데이터 분배, 서비스 품질 등이 정의될 수 있다. 그러나 종래의 저장 시스템에서는 파일이나 블록을 기본 기억 단위로 사용하며, 블록 저장 시스템에서는, 시스템의 각 블록의 속성이 또한 항상 추적되어야 하고, 객체는 저장 시스템과 통신함으로써 객체의 속성을 유지한다. 객체 저장 기기에서, 각각의 개체는 객체 식별자(identifier, ID)를 가지므로, 객체를 액세스가 용이하다.
OSD는 특정 지능을 가지며, CPU, 메모리 및 저장 매체를 가질 수 있다. 블록 기기와 비교하면, OSD는 다른 액세스 인터페이스를 제공할 수 있다. 동일한 저장 시스템에서, 하나 이상의 OSD가 있을 수 있으며, 도 1에서는 2개의 OSD가 예로서 사용된다. 현재 블레이드 구조(blade structure)가 국제적으로 그리고 일반적으로 객체 저장 기기를 구현하는 데 사용된다. OSD는 세 가지 기능을 제공할 수 있다.
(1) 데이터 저장 : OSD는 객체를 관리하고 객체를 디스크와 같은 저장 매체에 저장하며, OSD는 블록 인터페이스 액세스 방식을 제공하지 않으며, 클라이언트가 데이터를 요청하는 경우, 데이터 판독 및 기록이 객체 ID와 오프셋을 사용하여 수행된다.
(2) 지능형 분배 : OSD는 OSD의 메모리 및 CPU를 사용하여 로컬로 저장된 데이터의 분배를 최적화하고, 데이터 프리페칭(data prefetching)을 지원한다. OSD는 객체 프리페칭을 지능적으로 지원할 수 있기 때문에, 데이터 판독 속도가 최적화될 수 있다.
(3) 각각의 객체의 메타데이터 관리 : OSD는 OSD에 저장된 객체의 메타데이터를 관리하며, 메타데이터는 인덱스 노드(index node, inode)라고 하는 데이터 구조체에 메타데이터를 기록되고, 메타데이터는 일반적으로 객체 크기 및 포함된 스트립의 수량과 같은 정보를 포함한다. 종래의 네트워크 어태치형 저장(Network Attached Storage, NAS) 시스템에서 메타데이터는 파일 서버에 의해 유지관리된다. 객체 저장 아키텍쳐에서, 메타데이터는 메타데이터 서버에 의해 관리될 수 있거나, 시스템의 메인 메타데이터 관리 작업은 OSD에 의해 구현될 수 있으며, 이는 클라이언트의 비용을 감소시킨다.
현재 저장 모드는 간략하게 COFW(Copy On First Write)이며, 때로는 COW(Copy On Write)라고 한다. 즉, 새로운 데이터가 저장 기기의 저장 위치에 처음으로 기록될 때, 이 저장 위치에서 원래 데이터가 먼저 판독되어 다른 저장 위치에 기록되고(다른 저장 위치는 스냅샷을 위해 예비된 저장 위치이고, 스냅샷 공간이라고 함), 그 후, 새로운 데이터가 저장 기기에 기록된다. COW의 실행 프로세스로부터 이 구현 방식에서는 한 번의 판독 작업과 두 번의 기록 작업이 수행되어야 한다는 것을 알 수 있다.
ROW(Redirect On First Write)는 새로운 데이터를 저장하는 다른 방법이다. ROW에서는 새로운 데이터가 예비된 저장 위치(reserved storage location)에 기록되고, 이전 데이터(old data)의 저장 위치는 변경되지 않는다. COW에 비해, ROW에서는 한 번의 기록 작업을 줄일 수 있다.
객체 저장 기술에서는 대부분의 메타데이터 관리 작업이 각각 지능형 OSD에 분배될 수 있으며, 각각 OSD는 로컬로 저장된 데이터의 분배 및 검색을 관리하며, 메타데이터 관리 작업의 90%는 지능형 저장 기기에 분배되며, 메타데이터 관리 작업의 10%만이 메타데이터 서버에서 실행되므로, 시스템의 메타데이터 관리 성능이 향상된다. 또한, OSD는 네트워크에 연결된 기기이며, 디스크 또는 자기 테이프와 같은 저장 매체를 포함하고, 충분한 지능으로 로컬로 저장된 데이터를 관리할 수 있다. 저장 서버는 직접 OSD와 통신하고 OSD에 저장된 데이터에 액세스하며, OSD가 지능적이기 때문에 파일 서버가 관여할 필요가 없다.
삭제
객체는 데이터와 데이터 속성의 조합이다. 데이터 속성은 애플리케이션 요건에 따라 설정될 수 있으며, 데이터 분배, 서비스 품질 등을 포함한다. 클라이언트 서버(11)는 NAS 프로토콜에 기초한 서버 또는 SAN(Storage Area Network) 프로토콜에 기초한 서버 저장 영역 네트워크일 수 있다. 즉, 본 발명의 본 실시예는 파일 시스템과 블록 시스템 모두에 적용 가능하다.
NAS에서의 데이터의 경우, 본 발명의 본 실시예에서의 객체는 파일로부터 나오고, 파일은 복수의 프래그먼트로 분할되며, 하나의 프래그먼트와, 이 프래그먼트의 속성 및 메타데이터와 같은 정보가 공동으로 하나의 객체를 구성한다. 마찬가지로 SAN에서의 데이터의 경우, 볼륨(Volume)이 프래그먼트로 분할된다.
종래기술에서는, 객체 ID를 사용하여 객체를 결정하므로, 각각의 객체의 ID는 유일하다. 동일한 파일을 여러 번 갱신된 후에는, 많은 양의 객체 ID가 생성될 수 있으며, 객체 ID를 기록하기 위해 많은 저장 공간이 필요하다. 본 발명의 실시예에서, 객체는 객체 ID와 버전 번호의 조합을 사용하여 결정된다. 파일의 데이터가 여러 번 갱신되는 경우, 갱신된 데이터의 오프셋 범위가 변경되지 않으면, 갱신 된 데이터에 대응하는 객체 ID는 변경되지 않고, 오직 상이한 객체 버전 번호만이 갱신될 필요가 있으므로, 시스템에서 유지관리되는 객체 ID의 총수를 감소시킨다. 또, 본 발명의 실시예에서의 방안에서는, 객체 버전 번호와 스냅샷 ID 사이에는 대응관계가 존재하며, 두 개의 스냅샷을 획득하는 간격으로, 동일한 파일 중의 모든 객체가 파일 중의 데이터가 몇 번 갱신되었는지에 무관하게 동일한 버전 번호를 사용하므로, 버전 번호는 매우 작은 저장 공간을 점유한다.
종래기술에서는 파일 또는 볼륨의 내용을 갱신한 후, 수정 관련 객체(modification-related object)의 메타데이터에 대해서는, 파일 계층(블록 시스템의 경우 볼륨의 의미 계층)에 저장된 메타데이터를 갱신해야 하고, 갱신된 데이터의 양은 비교적 많다. 또 액세스 노드는 클라이언트 서버를 사용하여 OSD에 액세스할 수 있으며, 모든 상이한 액세스 노드가 수정 관련 객체에 액세스할 수 있으면, 노드 간에 메타데이터 동기화를 수행해야 한다. 구체적으로, 액세스 노드가 객체의 메타데이터를 갱신한 후에, 다른 액세스 노드가 트리거되어 수정된 객체가 위치한 파일의 모든 객체 ID를 통합적으로 갱신할 수 있으며, 빈번한 동기화로 심각한 메타데이터 확장이 발생한다. 그러나 본 발명의 실시예에서 제공되는 방안에서는, 객체 ID는 변경될 필요가 없고, 버전 번호만 OSD 계층에서 갱신될 필요가 있고, 갱신된 데이터의 양은 종래기술에서의 그것보다 훨씬 적다. 또, 본 발명의 실시예에서의 객체 ID는 오프셋을 사용하여 계산에 의해 취득된다.
도 2에 도시된 바와 같이, 파일 요청이 본 발명에 따른 데이터 처리 방법의 실시예의 흐름도를 구체적으로 설명하기 위한 예로 사용된다. 다른 구현 방식에서, 파일 시스템에 관한 각각의 용어는 블록 시스템에 관한 대응하는 용어로 대체된다. 예를 들어, 파일은 볼륨으로 대체되고, 파일 메타데이터는 볼륨 메타데이터로 대체되고, 파일 버전 번호는 볼륨 버전 번호로 대체되고, 파일 ID는 볼륨으로 대체된다. 차이점은 다음과 같다: (1) 볼륨 메타데이터가 inode에 저장되지 않고 다른 위치에 저장된다. (2) 볼륨 ID는 직접 취득될 수 있으며 볼륨명으로부터의 변환에 의해 취득될 필요가 없다.
단계 20: 스냅샷을 생성하며, 여기서 스냅샷의 타깃(target)은 파일 또는 파일들을 포함하는 파일 시스템이다. 즉, 스냅샷의 타깃은 파일들을 포함하며; 스냅샷에 스냅샷 ID를 할당한다.
스냅샷은 두 방식으로 생성된다. 한 가지 방법에서는 파일의 스냅샷이 생성되고 스냅샷의 타깃은 단일 파일이다. 다른 방법에서는 파일 시스템의 스냅샷이 생성되고 스냅샷의 타깃은 전체 파일 시스템이며, 여기서 파일 시스템은 복수의 파일을 포함한다. 이 두 방식에서, 파일 메타데이터의 저장 위치는 다르다.
파일의 스냅샷을 생성하는 방식에서는, 파일을 선택하여 스냅샷을 생성하며, 스냅샷 이름이 파일에 설명되며, 스냅샷 이름이 사용된 적이 없으면, 스냅샷 ID가 파일의 스냅샷에 할당된다. 파일의 스냅샷 ID가 파일의 메타데이터로 사용되며 파일의 inode(인덱스 노드)에 저장된다. 유의해야 할 것은 스냅샷 ID는 스냅샷의 표시(mark)라는 것이다. 예를 들어, 스냅샷을 생성하는 시점이 스냅샷 ID로 사용되거나, 증가하는 번호가 스냅샷을 생성하는 시점의 순서에 따라 스냅샷 ID로 사용된다.
파일 시스템의 스냅샷을 생성하는 방식에서는, 파일 시스템이 선택되어 스냅샷을 획득하도록 선택되고, 스냅샷 이름이 사용된 적이 없으면, 스냅샷 ID가 파일 시스템의 스냅샷에 할당되고, 그 후 할당된 스냅샷 ID는 파일 시스템의 루트 inode에 저장된다. 이와 같이, 파일 시스템 중의 각각의 파일의 스냅샷 ID는 파일 시스템의 스냅샷 ID와 동일하다고 생각할 수 있다. 이전 방식과 다른 점은 파일의 스냅샷 ID는 파일 시스템의 루트 inode에 저장되지만, 파일의 inode에는 저장되지 않는다는 것이다.
또, 파일 메타데이터는, 파일의 스냅샷 ID 이외에 파일 식별자(File Identification, FID)를 더 포함할 수 있으며, 파일 메타데이터는 파일 크기 (Size) 및 기록 시각과 같은 정보를 더 포함할 수 있다.
단계 20은 미리 설정된 단계이고 본 방법 실시예에서 다른 단계들과는 상대적 독립성을 갖는다는 것에 유의해야 한다. 본 발명의 본 실시예는 주로, 스냅샷이 생성된 후에 다음 스냅샷이 생성되기 전에 클라이언트 서버 및 OSD에 의해 수행되는 동작을 설명한다.
단계 21: 클라이언트 서버가 파일 기록 요청을 수신하며, 파일 기록 요청은 기록될 데이터, 기록될 데이터의 오프셋, 및 파일명을 싣고 있고, 기록될 데이터는 파일의 일부이다.
구체적으로, 이 단계는 클라이언트 서버의 파일 시스템 내의 프로그램에 의해 실행될 수 있다. 파일 기록 요청은 파일 시스템에 의해 식별될 수 있는 기록 요청이다. 파일 기록 요청은 파일을 생성하거나, 기록될 데이터를 사용하여 이미 존재하는 파일을 갱신하는 것일 수 있으며, 기록될 데이터는 파일의 일부 또는 전체 파일이다.
파일 기록 요청은 기록될 데이터의 크기를 더 실을 수 있으므로, 기록될 데이터는 후속 단계에서 기록될 데이터의 오프셋에 따라 스트립으로 분할될 수 있거나; 기록될 데이터의 크기는 기록될 데이터의 크기를 측정하여 취득될 수 있기 때문에, 기록될 데이터의 크기를 싣고 있지 않을 수 있다.
기록될 데이터의 오프셋은 파일 중의 기록될 데이터의 상대적인 위치를 기술한다. 구체적으로, 기록될 데이터의 오프셋은 기록될 데이터의 시작 위치와 파일 헤더 사이의 거리를 기술할 수 있다. 기록될 데이터의 오프셋이 0이면, 이는 기록될 데이터의 시작 위치가 기록될 파일의 시작 위치라는 것을 나타낸다. 기록 데이터의 오프셋이 1KB이면, 이는 기록될 데이터의 시작 위치와 파일의 시작 위치 사이의 거리가 1KB의 데이터 크기라는 것을 나타낸다.
선택적으로, 파일 기록 요청은 파일 기록 요청의 파일 경로를 더 실을 수 있으며, 파일 경로는 파일 및 매핑 관계 테이블의 저장 위치를 나타낸다. 파일은 파일 경로와 파일명을 사용하여 함께 결정된다. 예를 들어 파일 경로와 파일 이름의 조합은 /root/mma/a1이며, 여기서 /root/mma/는 파일 경로이고, a1은 파일명이며, 파일과 매핑 관계 테이블은 경로/루트/mma /에 저장되어 있다.
상이한 파일은 상이한 파일명을 가질 수 있고, 동일한 파일 경로 내의 파일명들은 동일하지 않다.
선택적으로, 기록 요청은 매핑 관계 테이블의 저장 위치를 더 실을 수 있으며, 매핑 관계 테이블은 파일명과 FID 사이의 매핑 관계를 기록한다.
스냅샷 ID는 스냅샷이 생성될 때마다 생성되고, 각각의 스냅샷 ID는 대응하는 파일 버전 번호를 가지며, 스냅샷 ID는 파일 버전 번호와 일대일 대응한다. 또 인접 스냅샷 시각에 대응하는 스냅샷 ID의 변경 규칙은 인접 스냅샷 시각에 대응하는 파일 버전 번호의 변경 규칙과 동일하다.
단계 22가 실행되기 전에, 스냅샷 ID와 파일 버전 번호 사이의 매핑 관계가 기록될 수 있다.
다음 두 단계가 포함된다:
(1) 현재 최신 파일 메타데이터를 백업한다. 이는 구체적으로 inode를 백업함으로써 구현될 수 있다. 파일 수준의 스냅샷의 경우, 파일의 inode가 백업되고, 파일 시스템 수준의 스냅샷의 경우, 파일의 inode와 파일의 root inode를 모두 포함하는, 파일 시스템의 inode가 백업된다.
(2) inode에서 버전 번호를 갱신한다. 클라이언트 서버에 설정된 기록 모드가 ROW이면, 갱신된 버전 번호가 백업된 inode에 저장된다. 클라이언트 서버에 설정된 기록 모드가 COW이면, 갱신된 버전 번호는 백업에 의해 생성되는 inode에 저장되며, 선택적으로 백업된 inode는 또한 갱신된 버전 번호를 기록할 수도 있다. 예를 들어, inode A가 inode B를 생성하기 위해 백업되는 경우 inode A는 백업된 inode이고 inode B는 백업에 의해 생성되는 inode이다.
스냅샷 ID는 단계 20에서 생성된다. 파일 버전 번호와 스냅샷 ID 사이에는 대응 관계가 있으며, 스냅샷 ID는 스냅샷 시각에 대응한다. 따라서, 파일 버전 번호와 스냅샷 시각 사이에 대응 관계가 있다고 생각할 수도 있다. 대응 관계는 각각의 파일 버전 번호가 하나의 유일한 스냅샷 ID와 대응하고, 파일 버전 번호의 변경 규칙이 스냅샷 ID의 변경 규칙과 유사하다는 것을 의미한다. 예를 들어 더 큰 스냅샷 ID는 더 큰 파일 버전 번호를 나타내거나 더 큰 스냅샷 ID는 더 작은 파일 버전 번호를 나타낸다 여러 스냅샷 중에서 스냅샷 시각이 나중인 스냅샷이 더 큰 ID를 가진다.
유의해야 할 것은, SAN을 포함한, 블록 시스템에 기초한 데이터 기록 방법에서는, 파일명 대신에 볼륨 ID를 사용하여 볼륨을 표시하고, 볼륨 ID의 기능은 FID의 기능과 유사하다는 것이다. 또 볼륨에는 파일 경로와 유사한 개념이 없다. 따라서, 매핑 관계 테이블을 조회하는 단계는 단계 22에서 더 이상 필요하지 않으며, 조회는 볼륨 ID를 사용하여 볼륨 메타데이터에 대해 직접 수행되어 볼륨 버전 번호를 획득할 수 있다.
단계 22: 클라이언트 서버가 파일며ㅁ을 사용하여 매핑 관계 테이블을 조회하여, 기록될 데이터가 위치하는 파일의 파일 식별자(FID)를 취득하고, FID에 따라 파일 메타데이터를 조회하여 파일 버전 번호를 취득한다.
매핑 관계 테이블은 파일명과 FID 사이의 대응 관계를 기록하고, 파일명은 FID와 일대일 대응하고 있다. 매핑 관계 테이블의 저장 위치는 파일 판독 요청에 실려 전달될 수 있고 클라이언트에 의해 기록 요청으로부터 취득되거나, 매핑 관계 테이블이 클라이언트 서버에 의해 클라이언트 서버에 미리 저장될 수 있으며, 클라이언트 서버는 파일 경로에 따라 매핑 관계 테이블을 발견하거나, 또는 매핑 관계 테이블은 다른 저장 기기에 저장될 수 있다.
취득된 파일 버전 번호는 또한 메타데이터로 갱신될 수 있다. 갱신 후에, 파일 메타데이터는 FID 및 파일 버전 번호를 기록하고, 파일 버전 번호는 FID를 사용하여 파일 메타데이터를 조회하여 취득될 수 있다. 파일 메타데이터는 inode에 관한 정보에 저장될 수 있다. 파일 경로는 inode의 저장 위치를 나타낸다. 전술한 설명으로부터, ROW의 경우, 버전 번호가 백업된 inode에 저장되기 때문에, 이 단계에서 백업된 inode가 판독된다는 것을 알 수 있다. COW의 경우, 버전 번호는 백업에 의해 생성된 inode에 저장되기 때문에, 이 단계에서는 백업에 의해 생성된 inode를 판독된다.
파일 버전 번호와 파일의 스냅샷 ID 사이에는 일대일 대응관계가 존재하고 스냅샷 ID를 생성한 후에, 클라이언트 서버는 스냅샷 ID와 일대일 대응관계에 있는 파일 버전 번호를 생성한다. 예를 들어, 스냅샷 ID는 파일 버전 번호로 직접 사용될 수 있거나 작업 수행이 후에 취득되는 스냅샷 ID가 파일 버전 번호로 사용될 수 있다. 나중에 생성된 스냅샷이 큰 스냅샷 ID를 가지면, 한 가지 선택적 방식은, 나중에 생성된 스냅샷이 더 큰 값의 스냅샷 ID 값을 가지는 것이고, 다른 선택적 방식은 나중에 생성된 스냅샷이 더 작은 값의 스냅샷 ID을 갖는다.
본 발명의 실시예에서, 때때로 기록될 스트립의 버전 번호가 또한 사용된다. 기록될 스트립의 버전 번호는 기록될 스트립이 속하는 파일의 파일 버전 번호이다. 즉, 동일한 파일로부터의 상이한 스트립의 스트립 버전 번호는 동일하다. 유사하게, 객체 버전 번호(또는 객체의 버전 번호)는 기록될 스트립이 속하는 파일의 파일 버전 번호이다. 즉, 동일한 파일로부터의 상이한 객체의 객체 버전 번호가 동일하다.
단계 23: 클라이언트 서버가 기록될 데이터를 분할하여 기록될 스트립(strip)을 포함하는 복수의 스트립으로 분할하여, 스트립 분호 정책에 따라, 기록될 스트립의 오프셋 및 기록될 스트립이 속하는 객체의 ID를 취득하며. 기록될 스트립이 속하는 객체의 ID는 객체 ID라고도 한다.
클라이언트 서버는 데이터를 스트립 크기(Size)에 따라 하나 이상의 스트립으로 분할한다. 스트립은 특정 크기의 데이터이다. 기록될 데이터의 크기가 단일 스트립의 크기 이하일 때, 기록될 데이터는 하나의 스트립으로 분할된다. 기록될 데이터의 크기가 단일 스트립의 크기보다 크면, 기록될 데이터는 복수의 스트립으로 분할된다. 동일한 파일에서 분할된 스트립의 크기는 동일하다. 스트립 크기(Size)는 파일 메타데이터에 저장될 수 있으며, 이 경우 다른 파일들은 다른 스트립 크기를 사용할 수 있다. 또는, 스트립 크기는 객체가 속하는 파일의 메타데이터에 저장되지 않을 수 있으며, 전체 파일 시스템 중의 파일은 하나의 스트립 크기를 공유하고, 이 경우 서로 다른 파일이 동일한 스트립 크기를 사용하고, 스트립 크기는 파일 시스템의 root inode에 저장된다. 객체는 스트립을 수용할 수 있는 컨테이너로 간주될 수 있다.
예를 들어, 기록될 데이터가 여러 개의 데이터 스트립으로 분할되는 경우, 이 단계에서 스트립은 분할에 의해 취득된 데이터 스트립을 가리키거나; 또는 기록될 데이터가 데이터 스트립으로 분할된 후에, 데이터 스트립에 대한 데이터 보호를 수행하기 위해 몇 개의 검증 스트립이 추가로 생성되면, 이 단계에서 스트립은 데이터 스트립 및 검증 스트립 모두를 포함한다.
각각의 객체에 포함된 스트립의 총 수량은 파일 메타데이터에 저장될 수 있으며, 이 경우, 상이한 파일의 객체에 포함된 스트립의 총 수량은 다를 수 있거나; 또는 각각의 객체에 포함된 스트립의 총 수량은 객체가 속한 파일의 메타데이터에 저장되지 않을 수 있으며, 이 경우 서로 다른 파일에 있는 객체에 포함된 스트립의 총 수량은 동일하다.
유의해야 할 것은, 파일 중의 기록될 데이터의 시작 위치는 기록될 데이터의 오프셋으로부터 알 수 있고, 파일 중의 기록될 데이터의 종료 위치는 파일은 기록될 데이터의 오프셋 및 기록될 데이터의 크기로부터 알 수 있다. 기록될 데이터의 시작 위치가 스트립 크기의 정수배가 아니거나, 종료 위치에 1을 더한 값이 스트립 크기의 정수배가 아닌 경우, 기록될 데이터는 먼저 스트립 크기에 따라 분할되고, 분할 경계는 스트립 크기의 정수배이다. 분할 후에 그 크기가 하나의 스트립보다 작은 데이터(이 유형의 데이터는 스트립의 더티 데이터(dirty data)라고도 함)가 생기면, 데이터가 보충되어 스트립을 형성한다. 이 단계에서 보충 작업으로 인해, 달리 지정되지 않는 한, 후속 단계에서 언급되는 스트립과 오프셋은 모두 보충 후에 취득된 스트립 및 오프셋을 가리킨다.
예를 들어, 기록될 데이터의 오프셋 범위가 4 KB∼~300 KB이고, 스트립 크기가 256 KB인 경우에는, 기록될 데이터를 분할하는 경계로서 0 KB와 256 KB가 사용되고, 두 개의 데이터 블록이 형성되며, 기록될 데이터 중의 두 개의 데이터 블록의 오프셋 범위는 각각 4 KB∼255 KB 및 256 KB∼300 KB이다. 두 개의 데이터 블록에 대해 보충을 수행되어, 256 KB 크기의 두 개의 스트립이 형성된다. 전자(former) 데이터 블록을 보충하는 데 사용된 데이터(크기는 4 KB - 0 KB = 4 KB)는 이전 스트립에서 가져오고, 후자(latter)의 데이터 블록을 보완하는 데 사용되는 데이터(크기는 511KB - 300 KB = 211 KB)는 다음 스트립에서 가져온다. 기록될 데이터의 오프셋은 파일 중의 기록될 데이터의 상대적인 위치이다.
다른 보충 방법은 다음과 같다: 기록될 데이터의 시작 위치가 스트립 크기의 정수 배가 아니거나, 종료 위치 오프셋에 1을 더한 값이 스트립의 정수배가 아니면, 스트립의 기록될 데이터에 대해 보충 작업이 수행될 수 있으므로, 분할 후에 취득되는 스트립의 크기가 일정하고 스트립에 여백이 없다. OSD에 이미 저장된 데이터는 핀독될 수 있고 보충을 위한 데이터로 사용할 수 있다.
예를 들어, 기록될 데이터의 오프셋 범위가 4 KB∼~300 KB이고, 스트립 사이즈가 256 KB이면, 기록될 데이터는 오프셋 범위가 0 KB∼-511 KB인 데이터를 형성하도록 보충될 수 있고, 그 후, 오프셋 범위가 0 KB∼255 KB 및 256 KB∼511 KB인 두 개의 스트립으로 분할되므로, 각각의 스트립의 크기는 256 KB가 된다.
스트립 분배 정책은 클라이언트 서버의 파일 시스템에 의해 제공된다. 스트립이 속하는 객체가 기술된다. 즉 스트립과 객체 사이의 대응관계가 기술된다. 구체적으로 대응관계는 스트립의 오프셋과 객체 사이의 대응관계일 수 있다.
객체 ID는 객체를 유일하게 식별할 수 있게 하며, 동일 파일에 속하는 객체들의 ID는 상이하며, 상이한 파일 중의 객체들의 ID도 또한 다르다.
선택적으로, 객체 ID와 객체가 속하는 파일의 FID 사이에는 대응관계가 있을 수 있다. 즉, 예를 들어, 이 객체 ID로 표현되는 객체가 유래된 파일은 객체 ID로부터 알 수 있다.
예를 들어, 객체 ID를 생성하는 선택적 방법은 다음과 같다: 객체 ID는 64비트의 2진수를 포함하며, 앞의 32비트는 객체가 속하는 파일의 ID이고, 뒤의 32비트는 파일에서 유일하며, 동일한 파일 중의 다른 객체의 뒤의 32비트는 상이하다. 예를 들어, 파일에서 객체 식별자가 사용된다. 이러한 방식으로, 대응하는 FID를 객체 ID의 앞의 32비트로부터 알 수 있게 된다. 유사하게, 블록(block) 시스템에서, 객체 ID와 볼륨 ID 사이의 관계가 성립될 수도 있다.
객체 ID를 생성하는 다른 선택적인 방법은 다음과 같다: 객체 ID는 48비트의 이진수를 포함하며, 여기서 앞의 16비트는 파일에 대응하고, 다른 파일의 앞의 16비트는 다르다. 뒤의 32비트는 클라이언트 서버에 의해 할당되고, 뒤의 32비트는 파일에서 유일하며, 동일 파일 중의 상이한 객체들의 뒤의 32비트는 상이하다.
다른 실시예에서, ID와 객체가 속하는 파일의 FID 사이에 대응관계가 없을 수도 있다.
도 3a 및 도 3b는 두 개의 상이한 스트립 분배 정책을 나타낸다. 스트립 인덱스는 파일 중의 스트립의 오프셋 관계를 기술하고, 스트립 인덱스는 0 이상의 정수이며, 가장 작은 스트립 인덱스는 0이고, 두 번째 가장 작은 스트립 인덱스는 1이고, 세 번째 가장 작은 스트립 인덱스 2, ..., 등이다. 인접한 인덱스 값을 갖는 두 개의 스트립은 또한 파일에서 인접한 오프셋을 가진다.
선택적 스트립 분배 정책이 3a에 도시되어 있다: (1) 동일한 파일에 속하는 객체의 크기는 고정되어 있고, 동일한 파일에 있는 스트립의 크기는 동일하다. 이는 상이한 객체에 포함된 스트립의 총 수량은 동일하다는 것을 의미한다. (2) 이전 객체가 먼저 채워진 다음 인덱스 순서에 따라 다음 객체가 스트립에 의해 채워진다. 즉, 수 개의 연속되는 스트립이 기록될 데이터 중의 스트립의 오프셋 크기의 순서에 따라 동일한 객체에 속한다. 도 3a에 도시된 바와 같이, 각각의 객체는 고정적으로 4개의 스트립을 포함한다. 예를 들어, 스트립 크기는 256 KB이고 각각의 객체에는 4개의 스트립이 있다. 즉, 객체 크기는 256 KB×4=1024 KB이다. 이 경우, 제1 객체는 스트립 0∼스트립 3을 저장하고, 제2 객체는 스트립 4∼스트립 7을 저장하고, 제3 객체는 스트립 8∼스트립 11을 저장하고,.... 등이다. 따라서, 제1 객체의 ID는 0, 제2 객체의 ID는 1, 제3 객체의 ID는 2, ..., 등이다.
스트립 오프셋은 객체 내에서의 스트립의 상대 위치를 기술하는 데 사용되며, 구체적으로는 객체 중의 스트립의 시작 데이터의 상대 위치일 수 있다. 스트립 오프셋 = (스트립 인덱스 % 객체 중의 스트립의 수량) × 스트립 크기. 여기서 %는 앞의 항(former term \)을 뒤의 항(latter term)으로 나눈 나머지를 계산하는 것을 나타낸다. 따라서 "스트립 인덱스 % 객체의 스트립의 수량"의 값은 스트립 인덱스를 객체의 스트립의 수량으로 나눈 나머지 값이다.
다른 선택적 스트립 분배 정책이 3b에 도시되어 있다: (1) 동일한 파일 중의 객체의 크기는 고정되어 있지 않다. 즉, 동일한 파일의 서로 다른 객체에 있는 스트립의 총 수량은 다를 수 있다. (2) 객체의 총 수량이 고정되어 있다. 즉 상이한 파일이 동일한 수량의 객체를 가지고 있고, 도 3b에 도시된 바와 같이, 총 3개의 객체가 있다. 예를 들어, 스트립 크기가 25 6KB이고 객체의 총 수량이 3으로 고정되어 있으면, 제1 스트립(스트립 0)은 제1 객체(객체 0)에 위치하고 제2 스트립 (스트립 1)은 제2 객체(객체 1)에 위치하고, ..., 유추하여, 제4 스트립(스트립 3)도 제1 객체에 위치하고, 제5 스트립 (스트립 4)도 제2 객체에 위치한다. 스트립 인덱스는 0 이상의 정수이며 파일 중의 스트립들 사이의 위치 관계를 기술한다.
스트립이 속하는 객체 중의 각각의 스트립의 오프셋이 또한 결정될 수 있으며, 파일 중의 객체의 식별자는, 스트립 인덱스를 파일 중 객체의 총 수량으로 나눈 후에 취득한 나머지일 수 있다. 구체적인 계산식은 다음과 같을 수 있다: 파일 중의 객체 식별자 = 스트립 색인 % 파일의 객체의 수량, 그리고 스트립 오프셋 = (스트립 색인 / 객체의 수량) × 스트립 크기.
스트립 인덱스는 기록될 데이터의 오프셋을 사용하여 결정될 수 있다. 예를 들어, 전체 파일의 경우, 파일이 분할된 후에 취득된 시작 데이터는 제1 객체 중의 스트립(스트립 0)에 위치하고, 현재 기록될 데이터의 오프셋은 객체 1에서 제5 스트립(스트립 4)에 위치한다. 이 경우, 기록 데이터가 분할된 후에 생성된 스트립에서, 제1 스트립의 인덱스는 4이고, 다른 스트립의 인덱스는 유추에 의해 취득된다.
위의 설명은 스트립이 속한 객체의 ID를 계산하기 위한 두 가지 방안을 기술한 것이고, 상이한 스트립 분배 정책에 따라, 다른 구현 방안도 있을 수 있다. 상이한 분배 정책에서 사용되는 파라미터는 상이할 수 있으며, 이러한 파라미터는 일반적으로 클라이언트 서버에 대해 조회를 수행함으로써 취득될 수 있다.
모든 스트립의 처리 방식이 동일하기 때문에, 다음은 설명을 위한 예로서 특정한 "기록될 스트립"만을 사용한다.
단계 24: 클라이언트 서버가 기록될 스트립을 저장하는 데 사용되는 OSD를 선택한다.
구체적으로, 이 단계는 클라이언트 서버의 객체 저장 클라이언트에 의해 실행될 수 있다.
선택적인 계산 방법은, 기록될 스트립의 FID에 따라, 기록 스트립을 저장하기 위한 OSD를 결정하는 것이다. 예를 들어, FID의 해시 값을 OSD의 총 수량으로 나눠서, 나머지를 기록될 스트립을 저장하기 위한 OSD의 식별자로 사용한다. 즉 FID의 해시 값 mod OSD의 총 수량. 다른 방안이 있을 수 있다. 예를 들어, 클라이언트 서버는 객체에 속하는 기록될 스트립을 저장하기 위한 OSD를 임의로 선택하고, 동일한 객체에 속하는 스트립을 동일한 OSD에 저장할 수 있다.
또, 스트립을 저장하기 위한 OSD는 또한 기록될 스트립의 FID 및 객체 ID에 따라 함께 결정될 수 있다. 실제로는, OSD를 선택할 수 있다면, 계산 방법은 임의로 선택될 수 있다.
단계 25: 클라이언트 서버가 스트립 기록 요청을 OSD에 전송하며, 스트립 기록 요청은 기록될 스트립, 기록될 스트립의 버전 번호, 기록될 스트립의 오프셋 및 기록될 스트립이 속하는 객체의 ID를 싣고 있고, 선택적으로, 기록될 스트립의 크기를 더 포함할 수 있다.
선택적으로, OSD가 ROW 및 COW를 모두 지원하는 경우, 기록 모드가 추가로 전송되어, OSD가 클라이언트 서버에 의해 지정된 기록 모드에 따라 기록될 스트립을 기록할 수 있도록 한다. 기록 모드는 ROW 또는 COW이다. OSD가 하나의 기록 모드만을 지원하면, 기록 모드는 OSD로 전송되지 않을 수 있다.
단계 26: OSD가 스트립 기록 요청을 수신하고 기록될 스트립을 OSD의 저장 매체에 기록한다.
OSD가 하나의 기록 모드만을 지원하는 경우, OSD는 기록 모드가 ROW인지 COW인지를 확인할 필요없이 디폴트 기록 모드로 기록될 스트립을 기록 매체에 직접 기록할 수 있다.
데이터를 수신하는 경우, OSD는 먼저 그 데이터를 버퍼에 일시적으로 저장하며, 이 단계에서 버퍼에 있는 기록될 데이터는 저장 매체에 저장될 수 있다.
스트립 오프셋은 객체 내에서의 스트립의 상대 위치를 기술하는 데, 이는 구체적으로, 객체 중의 스트립의 시작 데이터의 상대 위치일 수 있고, 스트립 오프셋 + 스트립 크기 = 개체 중의 스트립의 최종 데이터의 상대 위치.
데이터의 백업 표시(backup mark)는 OSD에 있으며, 데이터의 백업 표시의 그래뉼래러티(granularity)는 객체 ID를 인덱스로 사용하여 OSD에서 조회될 수 있거나, OSD에 의해 수신되는 모든 스트립이 백업 표시의 동일한 그래뉼래러티에 따라 저장되는 것을 디폴트로 설정할 수 있다. 동일한 파일에 속하는 스트립은 동일한 유형의 기록 그래뉼래러티를 사용한다. 실제 기기는 객체가 백업 표시의 그래뉼래러티로서 사용되는 경우만을 지원할 수 있거나, 스트립이 백업 표시의 그래뉼래러티로서 사용되는 경우만을 지원할 수 있다. 이 경우, OSD는 백업 표시의 그래뉼래러티를 조회할 필요 없이 저장을 직접 수행할 수 있다.
OSD에서는 두 개의 파라미터: 객체 ID와 버전 번호를 사용하여 공동으로 객체를 결정할 수 있으므로, 이 두 개의 파라미터를 포함하는 세트를 본 실시예에서는 객체 키 파라미터라고 한다. 객체가 결정된 후, 스트립 오프셋을 더 사용하여 스트립이 결정될 수 있다. 즉 세 개의 파라미터: 객체 ID, 버전 번호 및 스트립 오프셋을 사용하여 공동으로 스트립을 결정할 수 있으므로, 이 세 개의 파라미터를 포함하는 세트를 스트립 키 파라미터라고 한다.
OSD에서, 객체 키 파라미터는 객체를 저장하는 데 사용되는 저장 위치를 지시할 수 있으며, 구체적으로 객체에 의해 사용될 시작 주소를 지시할 수 있다. 선택적으로, 객체 키 파라미터는 객체에 의해 사용될 주소 세그먼트(address segment)를 지시할 수 있다. 마찬가지로, 스트립 키 파라미터는 스트립을 저장하는 데 사용되는 시작 주소 또는 주소 세그먼트를 지시할 수도 있다. 시작 주소 및 주소 세그먼트는 물리 주소 또는 논리 주소일 수 있다.
객체 키 파라미터를 사용하여 결정된 객체의 저장 위치를, 객체 키 파라미터를 사용하여 검색하는 가능한 경우는 여러 가지가 있을 수 있다. 한 가지 경우에, 스트립 기록 요청을 수신하기 전에, OSD는 스트립 기록 요청에 실린 객체 키 파라미터를 이미 기록하고, 이 키 파라미터 그룹에 의해 표현된 스트립에 대한 저장 위치를 할당한다. 다른 경우에, OSD는 이러한 키 파라미터 그룹을 기록하지 않고, 키 파라미터 그룹에 의해 표현되는 스트립에 대한 저장 위치를 할당하지 않으며, 스트립 기록 요청을 수신한 후에, OSD는 저장 위치를 이 객체 키 파라미터의 그룹에 할당한다.
객체 세트는 동일한 객체 ID 및 상이한 버전 번호를 갖는 객체의 세트이며, 객체 세트는 하나 이상의 객체를 포함하고, 객체 세트는 논리 개념일 수 있으며 실제로 분할될 필요는 없다.
객체 ID는 객체 중에 있는, 객체에 실린 데이터의 오프셋의 범위에 따라 결정된다. 동일한 파일의 스냅샷을 여러 번 획득하고, 변경되는 데이터가 스냅샷을 획득할 때마다 OSD에 저장되면, 변경되는 데이터 중에서 동일한 오프셋을 가진 데이터는 동일한 객체 ID를 가진다.
OSD에서, 표시는 객체 또는 스트립이 백업되었는지를 지시하는 데 사용된다. 백업 표시의 그래뉼래러티는 스트립 또는 객체일 수 있습니다. 표시된 가장 작은 단위가 스트립이면, 백업 표시의 그래뉼래러티는 스트립이고, 표시된 가장 작은 단위가 객체DLUS, 백업 표시의 그래뉼래러티는 객체이다.
객체의 백업 표시는 객체 ID 및 버전 번호를 사용하여 결정된 객체가 이미 백업되었음을 지시한다. 구체적으로, 객체의 백업 표시는, 버전 번호에 대응하는 스냅샷이 생성된 후에 객체 ID에 대응하는 객체가 백업되었는지 여부를 지시하며, 1은 객체가 백업되었음을 지시하고, 0은 객체가 백업되지 않았음을 지시한다. 구체적으로 객체의 백업 표시가 0인 경우는 두 가지 있는 데, 한 가지 경우는 객체 ID와 버전 번호를 사용하여 결정된 객체가 수정되고 백업 작업은 아직 실행되지 않은 경우이고; 다른 한 가지 경우는, 객체 ID와 버전 번호를 사용하여 결정된 객체가 수정되지 않은 경우이다.
스트립의 백업 표시는 객체 ID, 버전 번호 및 스트립 오프셋을 사용하여 결정된 스트립이 이미 백업되었음을 지시한다. 구체적으로, 스트립의 백업 표시는 객체 ID 및 스트립 오프셋에 대응하는 스트립이, 버전 번호에 대응하는 스냅샷이 생성된 후에 백업되었는지를 지시하며, 1은 스트립이 백업되었음을 나타내고, 0은 스트립이 백업되지 않았음을 나타낸다. 스트립의 백업 표시가 0인 경우는 구체적으로 두 가지 경우가 있는 데, 한 가지 경우는 객체 ID, 버전 번호 및 스트립 오프셋를 사용하여 결정된 스트립이 수정되고 백업 작업은 아직 실행되지 않은 경우이고; 다른 한 가지 경우는, 객체 ID, 버전 번호 및 스트립 오프셋을 사용하여 결정된 스트립이 수정되지 않은 경우이다.
객체 버전 번호를 비교함으로써, 동일한 객체 중의 상이한 객체의 스냅샷 시각을 결정할 수 있다.
기록될 스트립이 OSD에 기록되는 가능한 방식은 총 네 가지 있다: (1) 기록 모드가 ROW이고 백업 표시의 그래뉼래러티는 스트립이다. (2) 기록 모드가 ROW이고 백업 표시의 그래뉼래러티는 객체이다. (3) 기록 모드가 COW이고 백업 표시의 그래뉼래러티는 스트립이다. (4) 기록 모드가 COW이고 백업 표시의 그래뉼래러티는 객체이다. OSD는 네 가지 가능한 방식 중 하나 이상을 지원할 수 있다. 다음은 네 가지 가능성을 개별적으로 설명한다.
방식 1 : ROW의 경우, OSD에서 데이터의 백업 표시의 그래뉼래러티는 스트립이다.
기록될 스트립은 스트립 요청 중의 스트립 키 파라미터를 사용하여 결정된 저장 위치에 따라 OSD에 직접 기록된다. 또, 기록이 완료된 후, 기록된 스트립에 의해 점유되는 저장 위치(시작 저장 주소 또는 주소 세그먼트)는 이 단계에서 "기록된 유효한 데이터"로서 더 표시될 수 있다. OSD의 저장 매체에 저장된 스트립에 의해 점유 된 저장 위치는 스트립 공간(strip space)이라고도 한다.
객체 중의 각각의 스트립이 백업되는지 여부를 표시하기 위해 한 비트가 사용될 수 있다. 예를 들어, 이 스트립의 저장 위치의 플래그 비트는 1로 설정되는 데, 여기서 1은 데이터가 기록되었음을 나타내고, 0은 데이터가 없음을 나타낸다. 스트립 인덱스는 객체 중의 스트립의 순서를 기술하는 데 사용되며, 플래그 비트가 객체 중의 각각의 스트립을 표시하는 데 사용된다. 예를 들어 총 네 개의 스트립 공간이 있으며, 여기서 0000은 네 개의 스트립 공간에 데이터가 기록되지 않음을 나타낸다. 0010은 데이터가 두 번째 스트립 공간에만 기록되었음을 나타낸다. 0101은 데이터가 제1 스트립 공간과 제3 스트립 공간에 기록되고, 제2 스트립 공간과 제4 공간에는 데이터가 기록되지 않음을 나타낸다.
유의해야 할 것은, 본 실시예에서 설명하는 제N(N은 자연수) 스트립 공간은, 스트립이 속하는 객체에 있어 스트립 공간의 상대 위치를 가리키며, 스트립 인덱스을 의미하지는 않는다는 것이다.
예를 들어, 객체 중의 스트립의 식별자를 결정하는 방법에서, 스트립의 오프셋은 결정을 위해 사용될 수 있으며, 오프셋 값이 작을수록 더 작은 스트립 식별자 값을 나타내며, 인접한 스트립의 식별자들 사이의 차이는 1이고, 가장 작은 스트립 식별자는 0이다. 스트립 분배 정책이 이 단계에서 도 3a에 기술된 정책이면,
스트립 식별자를 결정하기 위한 신속한 계산 방법은 스트립 식별자 = 스트립 오프셋 / 스트립 크기이다. 스트립 오프셋은 객체 중의 스트립의 오프셋이다. 이 스트립 공간이 이미 이전에 "백업 되었음"으로 표시되었으면. 이 표시가 변경되지 않으면 단계에서 표시하는 것은 반복 수행되지 않을 수 있다.
방식 2: ROW의 경우, OSD에서 데이터의 백업 표시의 그래뉼래러티는 객체이다.
방식 2에서 백업 표시를 결정하기 위한 그래뉼래러티는 방식 1과 비교하면 다르고, 스트립의 플래그 비트의 결정이 객체의 플래그 비트를 결정으로 변경된다.
스트립 기록 요청에 실린 객체 키 파라미터를 사용하여 OSD 내의 기록 레코드에서 조회가 수행되어, 객체 키 파라미터에 의해 지시된 저장 위치에 유효한 데이터가 저장되어 있는지를 결정한다. 이 실시예에서, 플래그 비트를 결정함으로써, 유효한 데이터가 저장 위치에 저장되어 있는지를 결정할 수 있다. 예를 들어, 플래그 비트가 1이면 유효한 데이터가 저장되어 있음을 나타내며 플래그 비트가 0이면 유효한 데이터가 저장 위치에 저장되지 않았음을 나타낸다. 객체 키 파라미터에 의해 지시되는 저장 위치의 플래그 비트를 결정함으로써, 이번에 수신된 스트립 기록 요청이 스냅샷이 생성된 후에 이 객체에 대해 수행된 제1 기록 동작인지를 결정할 수 있다. 예를 들어, 플래그 비트가 0이거나 플래그 비트가 발견되지 않으면, 스냅샷을 획득한 후의 제1 기록(first writing)을 나타내고, 플래그 비트가 1이면 스냅샷을 획득한 후의 제1 기록이 아님을 나타낸다.
스트립 기록 요청이 스냅샷을 획득한 후에 이 객체에 대해 수행된 제1 기록이 아닌 경우, 기록될 스트립은 이 객체가 점유하는 저장 위치에 직접 기록되고, 구체적인 기록 위치는 스트립 키 파라미터를 사용하여 결정될 수 있다.
스트립 기록 요청이 이 객체의 스냅샷을 획득한 후에 처음으로 수신된 이 객체대한 기록 요청이면, 스트립 기록 요청 중의 기록될 스트립과 OSD 중의 다른 객체에서 취득된 스트립의 조합이 스플라이싱된 객체라고하는 완전한 객체로 스플라이싱된다. 구체적으로, 나머지 부분을 오는 객체는 유효한 데이터가 있는 객체 중의 버전 번호가 가장 큰 객체(스트립 요청에 실린 버전 번호보다는 작음)이다.
즉, 기록될 스트립의 객체 ID의 객체 세트에 속하는 유효한 데이터를 가지는 객체 중에서 버전 번호가 가장큰 객체가 선택되고, 기록될 스트립의 오프셋과 상이한 오프셋을 가진 스트립이 취득되어, 기록될 스트립과 공동으로 스플라이싱된 객체를 구성한다. OSD에 저장되고, 객체 ID가 기록될 스트립의 객체 ID와 동일하고, 버전 번호가 기록될 스트립의 버전 번호와 상이한 객체의 세트를 기록될 스트립의 객체 ID의 객체 세트라고 한다. 기록 모드가 ROW일 때, 이후의 스냅샷 시각은 더 큰 대응하는 객체 버전 번호를 나타내며, 기록될 스트립의 객체 ID는 기록될 스트립이 속하는 객체의 ID이다.
예를 들어, 각각의 객체는 32개의 스트립을 포함하고, OSD에 의해 수신된 기록될 스트립은 32개의 스트립 중의 제15 스트립이며, 나머지 31개의 스트립, 즉 제1 ∼ 제14 스트립과 제16 ∼제32 스트립은 이전 스냅샷 획득 후에 OSD에 기록되어 있고 유효한 데이터와 동일한 객체 ID를 가진 객체이다.
기록이 완료된 후, 이 객체의 플래그 비트는 백업된 것으로 기록된다. 예를 들어, 플래그 비트는 1로 설정되며, 이는 스냅샷 획득이 완료된 후의 첫 번째 스트립 기록 작업을 의미한다. 즉, 다음 스냅샷을 획득하기 전에 이 객체 중의 임의의 스트립이 다시 기록되면, 이는 스냅샷을 획득한 후에 이 객체에 대해 수행된 첫 번째 기록 작업이 아니므로, 백업 작업을 수행할 필요가 없으며 스트립이 직접 기록된다.
이상의 설명으로부터, 동일한 객체 ID는 다수의 객체에 대응할 수 있고, 각각의 스냅샷 ID는 하나의 객체에 대응하고, 이들 객체는 상이한 시각에 OSD에 기록되며, 인접한 기록 시각을 갖는 객체의 버전 번호는 인접하고, 나중의 기록 시각은 더 큰 버전 번호를 나타낸다는 것을 알 수 있다.
이 기록 작업이 완료된 후, 이번에 새롭게 기록된 객체는 객체 세트의 새로운 멤버이다.
방식 3 : 기록 모드는 COW이고, 데이터의 백업 표시의 그래뉼래러티는 스트립 이다.
저장 위치는 스트립 기록 요청 중의 객체 키 파라미터 및 스트립 오프셋을 사용하여 결정될 수 있다. 우선, 기록될 스트립의 키 파라미터를 이용하여 결정된 저장 위치에 데이터가 이미 저장되어 있는지를 검출하고, 그 결과가 기록될 스트립의 키 파라미터를 이용하여 결정된 저장 위치에 데이터가 저장되어 있지 않다고 판단한 경우 또는 레코드가 발견되지 않는 경우, 이는 이 기록 요청이 스냅샷이 생성된 후 첫 번째 기록 요청이고 백업 작업이 먼저 수행된 후, 기록될 스트립을 기록된다는 것을 의미한다.
일반적인 경우, 다음 스냅샷을 획득하기 전에 첫 번째 스트립 기록 요청만 수신된 후에, 스트립 데이터를 백업해야 하며, 데이터를 기록될 스트립의 객체 ID, 기록될 스트립의 버전 번호 및 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 백업한다. 따라서, OSD에 저장된 최신 스트립은 먼저 기록될 스트립의 키 파라미터에 의해 지 된 저장 위치에 백업 될 필요가 있으며, 이때 수신된 스트립은 나중에 데이터가 백업되어 있는 저장 위치에 기록된다. OSD에 저장된 최신 스트립은 클라이언트 서버에서 전송한 최신 스트립이다. 이 실시예에서, 최신 스트립은 OSD에 저장된 스트립들 중에 있는 스트립이고, 기록될 스트립의 객체 ID를 가지며 버전 번호가 0이고 오프셋이 기록될 스트립의 오프셋과 동일한 스트립이다. 기록될 스트립의 기록 작업은, 스트립 기록 요청이 이어서 수신되고 백업이 수행될 필요가 없는 경우, 직접 수행될 수 있다.
COW에서, OSD에 저장된 최신 객체는 항상 동일한 버전 번호를 사용한다. 예를 들어, 0 또는 널(Null)이 버전 번호로서 사용되며, 이는 본 실시예에서 기본 버전 번호라고 한다. 객체 세트의 다른 객체들 중에 그리고 기본 버전 번호를 제외한 버전 번호 중에서 더 작은 버전 번호를 가진 객체는 나중에(later) 대응하는 스냅샷 시각을 가진다.
ROW 또는 COW에서, 파일의 첫 번째 스냅샷을 획득하기 전에, 데이터가 OSD에 기록될 때, 사용된 스트립 버전 번호가 기본 버전 번호이다. 기본 버전 번호의 값은 0 또는 널(NULL)일 수 있습니다.
백업 동작이 완료된 후에, 스트립 기록 요청에 실린 스트립 키 파라미터에 의해 지시된 저장 위치는 이미 데이터를 저장하고 있다고 표시된다. 다음 스냅샷을 획득하기 전에 OSD가 이 기록될 스트립의 오프셋 위치에 대한 COW 기록 요청을 다시 수신하면, 데이터가 더 이상 마이그레이션되지 않고, 수신된 스트립이 덮어기록 방식으로, 버전 번호가 0이고 기록될 스트립의 오프셋에 의해 점유되는 객체에 있는 저장 위치에 기록된다. 다시말해, 기록 스트립은 기록될 스트립의 객체 ID, 기본 버전 번호 및 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록된다.
또, 이 단계에서, 기록될 스트립이 기록되는 저장 위치는 이미 유효한 데이터를 저장하고 있는 것으로 또한 표시될 수 있으며, 구체적인 표시 방법에 대해서는 방법 1을 참조할 수 있다.
방식 4: 기록 모드는 COW이고, OSD에서의 데이터의 백업 표시의 그래뉼래러티는 객체이다.
방식 4와 방식 3의 차이는 데이터의 백업 표시의 그래뉼래러티가 스트립에서 객체로 변경되고 백업 그래뉼래러티가 스트립에서 객체로 변경된다는 점이다.
저장 위치는 스트립 기록 요청 중의 객체 키 파라미터를 사용함으로써 결정될 수 있다. OSD는 객체 키 파라미터를 사용하여 OSD의 기록 레코드에서 조회를 수행하고, 기록될 스트립의 객체 키 파라미터에 의해 지시되는 저장 위치에 유효한 데이터가 저장되어 있는지를 판정한다. 방식 1에서의 설명과 유사하게, 플래그 비트는 이 실시예에서 객체를 표시하는 데 사용될 수 있다. 예를 들어, 플래그 비트 1은 유효한 데이터가 저장되었음을 나타내며, 플래그 비트가 0이거나 객체 키 파라미터의 플래그 비트가 OSD의 기록 레코드에서 발견되지 않으면 유효한 데이터가 저장되어 있지 않음을 나타낸다.
일반적인 경우, 다음 스냅샷이 획득되기 전에, 그리고 첫 번째 스트립 기록 요청만이 수신된 후에, 객체 데이터는 백업될 필요가 있다. 구체적으로는, 유효한 데이터가 저장되어 있는 경우, 기록될 스트립의 객체 ID와 기록될 스트립의 버전 번호를 사용하여 함께 결정된 객체가 스냅샷 획득 후에 이미 백업된 것을 의미하고, 백업을 다시 수행할 필요가 없다. 유효한 데이터가 저장되어 있지 않거나 또는 스트립 기록 요청 중의 객체 키 파라미터의 레코드가 OSD에서 발견되지 않으면, 이 단계에서 백업을 먼저 수행한 다음, 수신된 스트립 기록 요청 중의 기록될 스트립을 기록할 수 있다.
객체 키 파라미터가 지시하는 저장 위치에 유효한 데이터가 이미 저장되어 있으면, 기록될 스트립은, 기록될 스트립의 객체 ID, 버전 번호 0 및 기록될 스트립의 오프셋을 사용하여 함께 결정된 위치에 직접 기록된다.
유효한 데이터가 객체 키 파라미터가 지시하는 저장 위치에 저장되어 있지 않으면, 버전 0의 객체 중의 모든 스트립은 먼저 스트립 기록 요청의 객체 키 파라미터에 의해 지시되는 저장 위치로 백업된다. 백업이 완료된 후, 스트립 기록 요청 중의 객체 키 매개 변수에 의해 지시된 저장 위치는 1로 표시되고, 기록될 스트립은 이전에 버전 0의 객체에 의해 점유된 저장 위치에 기록되는데, 기록 위치는 기록될 스트립의 객체 ID, 기록될 스트립의 버전 번호 및 기본 버전 번호를 사용하여 결정된다.
단계 26이 실행 된 후, OSD는 기록될 스트립이 성공적으로 저장되었음을 나타내는 응답 메시지를 클라이언트 서버에 전송한다.
유의해야 할 것은, 단계 26은 다음 스냅샷이 획득되기 전에 실행된다는 것이다. 즉, 첫 번째 스냅샷을 획득한 후 다음 스냅샷을 획득하기 전에, 단계 21∼ 26이 실행된다. 단계 21∼ 26은 기록될 스트립을 OSD에 기록하는 절차이다. 이하에는 이미 OSD에 기록된 스트립을 판독하는 방법을 설명하고 판독 프로세스와 기록 프로세스는 상대적으로 독립적인 두 가지 방법이다.
단계 27: 클라이언트 서버가 파일 판독 요청을 수신하며, 파일 판독 요청은 파일명, 판독될 데이터의 크기 및 판독될 데이터의 오프셋을 싣고 있다.
파일 판독 요청은 파일 기록 요청과 유사하게 파일 판독 요청의 파일 경로를 더 실을 수 있으며, 파일 경로는 매핑 관계 테이블의 저장 위치를 기록한다. 파일 경로와 파일명을 사용하여 파일을 유일하게 결정할 수 있습니다.
구체적으로는, 이 단계는 클라이언트 서버의 파일 시스템 내의 프로그램에 의해 실행될 수 있다. 파일 판독 요청은 파일 시스템이 식별할 수 있는 판독 요청이다. 파일 판독 요청은 전체 파일 또는 파일의 일부 데이터를 읽는 요청이다
판독될 데이터의 오프셋은 파일 중의 판독될 데이터의 상대 위치를 기술한다. 특히, 판독될 데이터의 오프셋은 판독될 데이터의 시작 위치와 파일 헤더 사이의 거리를 기술할 수 있다. 판독될 데이터의 오프셋이 0 경우, 판독될 데이터의 시작 위치가 판독될 파일의 시작 위치인 것을 나타낸다. 판독될 데이터의 오프셋이 2 KB이면, 판독될 데이터의 시작 위치와 파일의 시작 위치 사이의 거리가 2 KB의 데이터 크기라는 것을 나타낸다.
선택적으로, 파일 판독 요청은 파일 경로를 더 실을 수 있으며, 파일 경로는 매핑 관계 테이블의 저장 위치를 기록한다. 매핑 관계 테이블에 대한 자세한 내용은 단계 21의 설명을 참조하기 바란다.
파일명은 판독될 데이터가 위치하는 파일의 파일명일 수도 있고 판독될 데이터가 위치한 파일의 스냅샷의 파일명일 수도 있다. 파일명이 판독될 데이터가 위치하는 파일의 파일명이면 파일 판독 요청은 최신의 판독될 데이터에 액세스하려는 것임을 나타낸다. 파일명이 판독될 데이터가 위치하는 파일의 스냅샷의 파일명이면, 파일 판독 요청이 스냅샷의 판독될 데이터에 액세스하려는 것임을 나타낸다.
단계 28: 클라이언트 서버가 파일명을 사용하여 매핑 관계 테이블을 조회하여, 판독될 데이터가 위치하는 파일의 FID를 취득하고 FID에 따라 파일 메타데이터를 조회하여 파일 버전 번호를 취득한다.
파일명이 판독될 데이터가 위치하는 파일의 파일명이면, 매핑 관계 테이블의 파일 경로는 판독될 파일이 있는 파일의 파일 경로이며, 파일 버전 번호는 파일에 대응하는 FID에 따라 메타데이터를 조회하여 획득된다.
파일명이 스냅샷의 파일명인 경우, 매핑 관계 테이블 내의 파일 경로는 스냅샷 파일이 위치하는 경로이며, 파일 버전 번호는 파일의 FID에 따라 메타데이터를 조회하여 획득된다.
매핑 관계 테이블은 파일명과 FID와의 대응 관계를 기록하고, 파일명은 FID와 일대일 대응관계이다. FID 및 FID와 파일 버전 번호 사이의 관계의 설명에 대해서는, 단계 21 및 단계 22를 참조하기 바란다. 매핑 관계 테이블의 저장 위치는 파일 판독 요청 중에 실려 전달될 수 있고 클라이언트 서버에 의해 판독 요청으로부터 취득될 수 있거나, 또는 매핑 관게 테이블은 클라이언트 서버에 의해 클라이언트 서버에 미리 저장될 수 있고, 클라이언트 서버는 파일 경로에 따라 매핑 관계 테이블을 찾거나, 매핑 관계 테이블이 다른 저장 기기에 저장될 수도 있다.
단계 22를 참조하면, 다른 구체적인 경우에 따라, 메타데이터는 파일의 inode에 저장될 수 있거나 파일 시스템의 root inode에 저장될 수 있다.
스냅샷 ID와 파일 버전 번호 사이에는 일대일 대응관계가 있으므로, 클라이언트 서버는 스냅샷 ID에 따라 파일 버전 번호를 취득할 수 있다. 이 대응관계는 파일 메타데이터에 저장될 수 있다.
단계 29 : 클라이언트 서버는 파일 판독 요청을 처리하고 파일 판독 요청을 스트립 판독 요청을 포함하는 복수의 판독 요청으로 변환하며, 여기서 각각의 스트립 판독 요청은 스트립 판독을 요청하는데 사용되고, 스트립 판독 요청은, OSD로부터 판독될 스트립을 판독하도록 요청하는 데 사용되며; 각각의 판독 요청에 대응하는 객체 ID를 결정한다. 스트립 판독 요청은 판독될 스트립의 버전 번호, 판독될 스트립의 오프셋, 판독될 스트립의 크기 및 판독될 스트립의 객체 ID를 싣고 있다.
구체적으로는, 판독될 스트립을 포함하는, 판독되어야 하는 각각의 스트립의 오프셋은, 판독될 데이터의 크기 및 판독될 데이터의 오프셋에 따라 알 수 있다.
단계 23에서의 스트립을 생성하는 방법을 참조하면, 기록될 데이터는 스트립 크기에 따라, 판독될 데이터의 오프셋 및 기록될 데이터의 크기를 사용하여 스트립으로 분할되어, 판독될 스트립의 오프셋을 취득할 수 있다. 동일한 방법에 따라, 이 단계에서, 판독되어야 하는 각각의 스트립의 오프셋은 또한 스트립 크기, 판독될 데이터의 오프셋 및 판독될 데이터의 길이를 사용하여 취득될 수 있다. 스트립 크기는 파일의 inode로부터 나올 수 있고, 이 경우 상이한 파일은 상이한 스트립 크기를 사용할 수 있거나, 전체 시스템의 모든 파일이 하나의 스트립 크기를 공유한다.
판독될 스트립의 오프셋을 취득한 후에, 판독될 스트립이 위치하는 객체의 ID는 단계 23에서와 동일한 방법에 따라 취득될 수 있다. 유의해야 할 것은, 파일명이 판독될 데이터가 위치하는 파일의 파일명인지 또는 스냅샷의 파일명인지에는 무관하게, 판독 요청에 대응하는 객체 ID를 조회하는 데 사용되는 FID는 판독될 데이터가 위치하는 파일의 FID이다.
단계 30: 클라이언트 서버가 스트립 판독 요청을 수신하는 데 사용되는 OSD를 선택한다.
구체적으로, 이 단계는 클라이언트 서버의 객체 저장 클라이언트에 의해 실행될 수 있다.
동일한 스트립의 스트립 판독 요청과 스트립 기록 요청은 동일한 OSD에 대응해야 한다. 실현 가능한 방법은 단계 24에서와 동일한 OSD 선택 계산 방법을 사용하는 것이다.
단계 31: 클라이언트 서버가 스트립 판독 요청을 OSD에 전송한다.
판독될 스트립의 버전 번호는 실제로 판독될 스트립이 속하는 파일의 버전 번호이다.
선택적으로, 기록 모드는 추가로 OSD로 전송될 수 있으며, 기록 모드는 단계 25에서의 스트립 기록 요청에 실린 기록 모드와 일치한다. 스트립의 객체 ID는 판독될 스트립이 속하는 객체의 ID이다.
단계 32: OSD가 스트립 판독 요청을 수신하고, 판독될 스트립의 저장 위치를 검색하여, 클라이언트 서버에 판독될 스트립을 전송
판독될 스트립의 저장 위치는 판독될 스트립의 사작 주소일 수 있고, 시작 주소에서부터 시작하여, 한 개 스트립 크기의 데이터가 판독되고, 판독된 데이터가 판독될 데이터이다.
단계 26에서, 스트립은 복수의 가능한 방식으로 기록된다. 따라서, OSD는 대응하는 방식으로 판독될 스트립을 판독할 수 있으며, 이는 또한 이하에서 개별적으로 설명된다. 스트립/객체가 백업되는지를 판정하는 방법에서, 단계 26에서 설명된 플래그 비트가 사용될 수 있다. 예를 들어, 플래그 비트가 1이면 스트립/객체가 백업되었음을 나타내고, 플래그 비트가 0이면 스트립/객체가 백업되지 않았음을 나타낸다.
COW의 경우, 특수한 경우가 있을 수 있다. 스트립 판독 요청에 실린 버전 번호가 기본 버전 번호인 경우, 특수한 경우의 판독될 스트립을 판독 방식은 다른 경우와 다르며, 이는 기본 버전 번호를 가장 큰 버전으로 지정하는 것과 동일하다(기본 버전 번호의 값이 0인 경우에도). 따라서, 예를 들어, 단계 26에서 설명한 버전 번호가 0인 경우에는, 버전 번호가 이미 가장 큰 버전 번호이기 때문에, 판독될 스트립의 키 파라미터를 사용하여 결정된 스트립이 백업되어 있는지를 판정할 필요가 없을 수 있고, 이 저장 위치의 데이터는 판독될 스트립으로서 직접 판독 및 사용되고, 판독될 스트립이 클라이언트 서버로 전송된다. 다른 경우에, 판독될 스트립은 다음 두 가지 방식으로 판독될 수 있다. 이 특별한 경우를 제외하고, 다른 경우는 다음 두 가지 방식으로 나눌 수 있다:
방식 1 : OSD에서 데이터의 백업 표시의 그래뉼래러티는 스트립이다.
판독될 스트립에 실린 스트립 키 파라미터를 사용하여 결정된 스트립이 백업되어 있는지를 판정한다. 다시 말해, 판독될 스트립의 객체 ID, 판독될 스트립 및 판독될 스트립의 오프셋을 사용하여 결정된 저장 위치에 스트립이 백업되어 있는지를 판정한다. 이 단계에서, 판독될 스트립의 오프셋은 판독될 스트립이 속하는 객체 중의 판독될 스트립의 식별자로 변환될 수 있다. 변환 방법에 대해서는 단계 26의 방식 1을 참조하기 바란다.
스트립이 백업되어 있으면, 판독될 스트립의 객체 ID, 판독될 스트립 및 판독될 스트립의 오프셋을 사용하여 결정된 스트립을 판독하여, 판독될 스트립으로서 사용하고, 판독될 스트립을 클라이언트 서버에 전송한다.
스트립이 백업되어 있지 않으면, 판독될 스트립의 객체 ID의 객체 세트에, 이전의 스냅샷 객체 중의 스트립 데이터에 유효한 데이터 있는지를, 유효한 스트립 데이터가 발견될 때까지 판정한다.
구체적으로는, 판독될 스트립의 객체 ID의 객체 세트에 속하고, 판독될 스트립의 스냅샷 시각보다도 스냅샷 시각이 빠른 객체를, 판독될 스트립의 오프셋을 사용하여 객체의 스냅샷 시각의 내림차순에 따라 하나씩, 백업되어 있는 것으로 표시된 스트립이 발견될 때까지 검색하고, 발견된 스트립을 판독될 스트립으로 사용하고, 그 판독될 스트립을 클라이언트 서버로 전송하며, 객체의 스냅샷 시각은 이 파일을 포함하는 파일 또는 파일 시스템의, 이 객체가 생성되기 전에 획득된 최근 스냅샷의 시각을 가리킨다.,
나중의 스냅샷 시각이 더 큰 스냅샷 버전 번호를 나타내는 경우, 객체의 스냅샷 시간의 내림차순에 따라 검색이 수행된다. 구체적으로, ROW의 경우 버전 번호의 내림차순으로 검색이 수행된다. COW의 경우, 버전 번호의 오름차순으로 검색이 수행된다.
물론, 스트립이 OSD에 기록될 때 더 큰 버전의 판독될 스트립이 나중의 스냅샷 시각에 사용되면, 판독될 스트립은 이 단계에서의 역순으로 검색된다.
방식 2: OSD에서 데이터의 백업 표시의 그래뉼래러티는 객체이다.
이 단계와 방식의 차이는 백업 표시의 그래뉼래러티가 스트립에서 객체로 변경된다는 점이다.
유효한 데이터가 판독될 스트립에 실린 스트립 키 파라미터를 사용하여 결정된 저장 위치에 저장되어 있는지를 판정한다. 즉, 판독될 스트립의 객체 ID와 판독될 스트립의 버전 번호를 사용하여 결정된 저장 위치(객체 공간)에 유효한 데이터가 저장되어 있는지를 판정한다.
유효한 데이터가 존재하는 경우, 판독될 스트립의 객체 ID, 판독될 스트립의 버전 번호 및 판독될 스트립의 오프셋을 사용하여 결정된 유한한 데이터가 판독되어 판독될 데이터로서 사용되며, 판독될 데이터는 클라이언트 서버에 전송된다.
유효한 데이터가 저장되어 있지 않은 경우, 이 단계에서의 방식 1과 마찬가지로, 유효한 데이터를 저장하고 있는 스냅샷 객체가 발견될 때까지 스냅샷 버전 번호의 오름차순에 따라 객체 세트의 객체를 순차적으로 검색하고, 판독될 스트립은 판독될 스트립의 오프셋에 따라 스냅샷 객체로부터 판독되고 클라이언트 서버로 전송된다.
도 4는 ROW 기반 스트립 판독 방안을 도시한다. 도면에 도시된 바와 같이, 파일 A는 객체 1, 객체 2 및 객체 3을 포함한다. 이들 객체가 OSD에 처음 저장된 후, 이들 객체의 버전 번호는 0이다. 도 4에서, 객체 1.0은 객체 ID가 1이고 버전 번호가 0인 객체를 나타낸다. 유사하게, 객체 3.2는 객체 ID가 3이고 버전 번호가 2인 객체를 나타낸다. 실선을 갖는 객체는 이 객체가 백업되었음을 나타낸다. 점선이 있는 객체는 이 객체가 백업되지 않았음을 나타낸다.
본 실시예에서는, 제1 스냅샷(버전 번호가 1임)을 획득한 후에, 객체 1의 데이터는 갱신되지 않고, 객체 2 및 객체 3이 백업되고, 객체 1은 백업되지 않는다. 제2 스냅샷(버전 번호가 2임)을 획득한 후에, 객체 3이 백업되고, 객체 1과 객체 2가 백업되지 않는다. 제3 스냅샷(버전 번호가 3임)을 획득한 후에, 객체 1이 백업되고, 객체 2와 객체 3은 백업되지 않는다.
객체 세트의 개념으로부터, 객체 1.0이 위치하는 객체 세트는 객체 1.0과 객체 1.3을 포함한다는 것을 알 수 있다. 객체 2.0이 위치하는 객체 세트는 객체 2.0과 객체 2.1을 포함한다, 객체 3.0이 위치하는 객체 세트는 객체 3.0, 객체 3.1 및 객체 3.2를 포함한다.
도 4에서 화살표 방향은 객체의 검색 관계를 표시한다. 스트립 판독 요청이 객체 1.2 중의 스트립을 판독하려는 것이면, 도면으로부터 이 객체가 백업되지 않았음을 알 수 있고, 버전 번호의 내림차순에 따라 백업되므로, 객체 1.0 중의 스트립이 판독된다. 동일한 원리에 기초하여, 스트립 판독 요청이 객체 2.2 또는 객체 2.3 중의 판독될 스트립을 판독하려는 것이면, 객체 2.1의 데이터가 실제로 판독된다. 물론, 스트립 판독 요청이 객체 1.3 또는 객체 2.1 또는 객체 3.2의 데이터를 판독하려는 것이면, 이들 객체는 백업되어 있기 때문에 데이터를 직접 판독할 수 있다.
도 5는 COW 기반 스트립 판독 방안을 도시하며, 도 4와의 차이점은 검색 순서가 반대라는 것이며, 검색은 버전 번호의 오름차순에 따라 수행된다.
백업 표시의 그래뉼래러티가 스트립이면, 이 방안의 원리는 도 4와 5의 원리와 유사하며, 차이점은 백업 표시로 표시된 타깃이 객체 중의 스트립이고, 객체가 아니라는 것이다.
전술한 방식 1 또는 방식 2에서, 클라이언트 서버는 스트립 판독 요청에 의해 회신되는 데이터 및 다른 판독 요청에 의해 회신되는 데이터를 수신하고, 회신된 데이터를 스플라이싱하여 판독 데이터를 생성할 수 있다.
도 6에 도시된 바와 같이, 도 6은 전술한 방법을 실행하기 위한 하드웨어를 나타낸다. 클라이언트 서버(41)의 인터페이스(413)는 객체 저장 기기(42)의 인터페이스(423)에 연결되고, 클라이언트 서버는 프로세서(411), 저장 매체(412) 및 인터페이스(413)를 포함하며, 프로세서(411)는 저장 매체(412) 및 인터페이스(413)에 연결된다. 저장 매체(412)는 예를 들면 메모리이고, 컴퓨터 프로그램을 저장한다. 프로세서(411)는 저장 매체(412)에 있는 프로그램을 실행하여 전술한 방법에서 클라이언트 서버에 의해 실행되는 단계들을 실행한다. 인터페이스(413)는 OSD에 연결된 인터페이스를 제공하며, 예를 들어 스트립 판독 요청 또는 스트립 기록 요청을 OSD에 전송한다. 클라이언트 서버(41)에는 영구 메모리를 배치하지 않을 수 있다. 즉, 전술한 방법 관련된, 클라이언트 서버(41)에 기록할 필요가 있는 모든 정보를 클라이언트 서버(41)의 휘발성 저장 매체(412)에 기록할 수 있다.
OSD(42)는 프로세서(421), 저장 매체(422), 인터페이스(423) 및 하드 디스크(424)를 포함하고, 프로세서(421)는 저장 매체(422) 및 인터페이스(423)에 연결되고, 하드 디스크(424)는 저장 매체(422)에 연결된다. 저장 매체(422)는 휘발성 매체, 예를 들어 저장 매체(422)가 컴퓨터 프로그램을 저장하는 메모리일 수 있다. 프로세서(421)는 저장 매체(422)에 있는 프로그램을 실행하여 전술한 방법에서 객체 저장 기기에 의해 실행되는 단계들을 실행한다. 인터페이스(423)는 OSD에 연결된 인터페이스를 제공한다. 예를 들어, 인터페이스(423)는 스트립 판독 요청 또는 스트립 기록 요청을 OSD에 전송한다. 하드 디스크(424)는 스트립을 위해 영구 저장장치를 제공한다. 예를 들어, 비휘발성 저장 매체는 일반적으로 기록될 스트립/객체를 위한 물리 저장 공간을 제공하고, 판독될 스트립/객체를 저장한다. 하드 디스크(424)는 플래시 메모리. 또는 소거 가능한 컴팩트 디스크와 같은 다른 매체로 대체 될 수 있다.
도 7을 참조하면, 도 7은 본 발명의 실시예에 따른 데이터 처리 시스템의 구성도이다.
데이터 처리 시스템은 클라이언트 서빙 장치(51) 및 객체 저장 장치(52)를 포함한다. 클라이언트 서빙 장치(51)는 서버와 같은 물리 장치일 수도 있고, 서버상에서 실행되는 소프트웨어에 의해 구현되는 가상 모듈일 수도 있다. 객체 저장 장치(52)는 객체 저장 기기와 같은 물리 기기일 수도 있고, 객체 저장 기기상에서 실행되는 소프트웨어에 의해 구현되는 가상 모듈일 수도 있다. 클라이언트 서빙 장치(51)는 전술한 방법으로 클라이언트 서버에 의해 실행되는 단계들을 실행하도록 구성될 수 있고, 객체 저장 장치(52)는 전술한 방법에서 객체 저장 기기에 의해 실행되는 단계들을 실행하도록 구성될 수 있다.
클라이언트 서빙 장치(51)는 스트립 요청 생성 모듈(511) 및 스트립 요청 생성 모듈(511)에 연결된 스트립 요청 전송 모듈(512)을 포함하거나, 스트립 요청 생성 모듈(511)에 연결된 스냅샷 모듈(513)을 더 포함할 수 있다.
객체 저장 장치(52)는 스트립 요청 수신 모듈(521)과, 스트립 요청 수신 모듈(521)에 연결된 스트립 저장 모듈(522) 및 스트립 읽기 모듈(523)을 포함한다. 스트립 저장 기능이 구현될 때, 스트립 판독 모듈은 필수는 아니다. 스트립 판독 기능을 구현할 때 스트립 저장 모듈은 필수는 아니다. 스트립 요청 수신 모듈(521)은 스트립 요청 전송 모듈(512)에 연결된다.
다음은 모듈의 기능을 구체적으로 설명한다.
스냅샷 모듈(513)은, 스냅샷의 타깃이 파일을 포함하는 스냅샷을 생성하고; 스냅샷 ID를 스냅샷에 할당할 수 있다.
스냅샷은 2가지 방식으로 생성된다. 한 가지 방식에서는, 파일의 스냅샷이 생성되고, 스냅샷의 타깃은 단일 파일이다. 다른 방식에서는, 파일 시스템의 스냅샷이 생성되, 스냅샷의 타깃은 전체 파일 시스템이며, 파일 시스템은 복수의 파일을 포함한다. 이 두 가지 방식에서, 파일 메타데이터의 저장 위치가 다르다.
파일의 스냅샷을 생성하는 방식에서, 파일은 스냅샷을 생성하도록 선택되고, 파일에 대한 스냅샷 이름이 설정되며, 스냅샷 이름이 사용된 적이 없으면, 스냅샷 ID는 파일의 스냅샷에 할당된다. 파일의 스냅샷 ID가 파일의 메타데이터로 사용되며 파일의 inode(인덱스 노드)에 저장된다. 스냅샷 ID는 스냅샷의 표시임을 유의해야 한다. 예를 들어, 스냅샷 생성하는 시점이 스냅샷 ID로 사용되거나, 스냅샷을 생성하는 시점의 순서에 따라, 증가하는 번호가 스냅샷 ID로 사용된다.
파일 시스템의 스냅샷을 생성하는 방식에서, 파일 시스템은 스냅샷을 획득하도록 선택되고, 스냅샷 이름이 사용된 적이 없으면, 스냅샷 ID는 파일 시스템의 스냅샷에 할당되고, 그 후 할당된 스냅샷 ID는 파일 시스템의 root inode에 저장된다. 이와 같이, 파일 시스템 중의 각각의 파일의 스냅샷 ID는 파일 시스템의 스냅샷 ID와 동일하다고 생각할 수 있다. 이 방식과 이전 방식의 차이점은 파일의 스냅샷 ID가 파일 시스템의 root inode에는 저장되지만, 파일의 inode에는 저장되지 않는다는 것이다.
파일 메타데이터는, 파일의 스냅샷 ID 이외에 파일 식별자(FID)를 더 포함할 수 있으며, 파일 메타데이터는 파일 크기(Size) 및 기록 시간과 같은 정보를 더 포함할 수 있다.
유의해야 할 것은, 스냅샷 모듈(513)은 선택적이라는 것이다. 본 발명의 실시예는 주로 스냅샷이 생성된 후에 다음 스냅샷이 생성되기 전에 클라이언트 제공 장치 및 객체 저장 장치에 의해 수행되는 동작을 설명한다.
구체적으로, 스트립 요청 생성 모듈(511)의 기능은, 클라이언트 서버의 파일 시스템에 있는 프로그램에 의해 실행될 수 있다. 파일 기록 요청은 파일 시스템에 의해 식별될 수 있는 기록 요청이다. 파일 기록 요청은 파일을 생성하는 것, 이미 존재하는 파일을 갱신하기 위해 기록될 데이터를 사용하는 것일 수 있으며, 기록될 데이터는 파일의 일부 또는 전체 파일이다.
파일 기록 요청은 기록될 데이터의 크기를 더 실어 전달할 수 있으므로, 기록될 데이터는 기록될 데이터의 오프셋에 따라 스트립으로 분할된다. 또는 파일 기록 요청은 기록될 데이터의 크기를 측정함으로써, 기록될 데이터의 크기를 취득할 수 있기 때문에, 기록될 데이터의 크리를 싣고 있지 않을 수도 있다.
기록될 데이터의 오프셋은 파일 중의 기록될 데이터의 상대적인 위치를 나타낸다. 특히, 기록될 데이터의 오프셋은 기록될 데이터의 시작 위치와 파일 헤더 사이의 거리를 기술할 수 있다. 기록할 데이터의 오프셋이 0이면, 기록될 데이터의 시작 위치가 기록될 파일의 시작 위치임을 나타낸다. 기록 데이터의 오프셋이 1 KB이면, 기록될 데이터의 시작 위치와 파일의 시작 위치 사이의 거리가 1 KB의 데이터 크기라는 것을 나타낸다.
선택적으로, 파일 기록 요청은 파일 기록 요청의 파일 경로를 더 실어 전달할 수 있으며, 파일 경로는 파일 및 매핑 관계 테이블의 저장 위치를 나타낸다. 파일은 파일 경로와 파일명을 사용하여 함께 결정된다. 예를 들어 파일 경로와 파일 이름의 조합은 /root/mma/a1이며, 여기서 /root/mma/는 파일 경로이고, a1은 파일명이며, 파일과 매핑 관계 테이블은 경로/루트/mma /에 저장되어 있다.
상이한 파일은 상이한 파일명을 가질 수 있고, 동일한 파일 경로 내의 파일명들은 동일하지 않다.
선택적으로, 기록 요청은 매핑 관계 테이블의 저장 위치를 더 실어 전달할 수 있으며, 매핑 관계 테이블은 파일명과 FID 사이의 매핑 관계를 기록한다.
파일명을 사용하여 매칭 관게 테이블에 대해 조회를 수행하기 전에, 스냅샷 ID와 파일 버전 번호 사이의 매핑 관계가 기록될 수 있으며, 다음 두 작업이 실행될 수 있다:.
(1) 현재 최신 파일 메타데이터를 백업한다. 이는 구체적으로 inode를 백업함으로써 구현될 수 있다. 파일 수준의 스냅샷의 경우, 파일의 inode가 백업되고,
파일 시스템의 스냅샷이 생성되면, 파일 inode와 파일의 root inode를 모두 포함하는, 파일 시스템의 inode가 백업된다.
(2) inode에서 버전 번호를 갱신한다. 클라이언트 서버에 설정된 기록 모드가 ROW이면, 갱신된 버전 번호가 백업된 inode에 저장된다. 클라이언트 서버에 설정된 기록 모드가 COW이면, 갱신된 버전 번호는 백업에 의해 생성되는 inode에 저장되며, 선택적으로 백업된 inode는 또한 갱신된 버전 번호를 기록할 수도 있다. 예를 들어, inode A가 inode B를 생성하기 위해 백업되는 경우 inode A는 백업된 inode이고 inode B는 백업에 의해 생성되는 inode이다.
파일 버전 번호와 스냅샷 ID 사이에는 대응관계가 있으며, 스냅샷 ID는 스냅샷 시각에 대응한다. 따라서, 파일 버전 번호와 스냅샷 시각 사이에 대응관계가 있다고 생각할 수도 있다. 대응관계는 각각의 파일 버전 번호가 하나의 유일한 스냅샷 ID와 대응하고, 파일 버전 번호의 변경 규칙이 스냅샷 ID의 변경 규칙과 유사하다는 것을 의미한다. 예를 들어 더 큰 스냅샷 ID는 더 큰 파일 버전 번호를 나타내거나, 더 큰 스냅샷 ID는 더 작은 파일 버전 번호를 나타낸다. 여러 스냅샷 중에서 나중의 스냅샷 시각을 가지는 스냅샷이 더 큰 ID를 가진다.
유의해야 할 것은, SAN을 포함한, 블록 시스템에 기초한 데이터 기록 방법에서는, 파일명 대신에 볼륨 ID를 사용하여 볼륨을 표시하고, 볼륨 ID의 기능은 FID의 기능과 유사하다는 것이다. 또 볼륨에는 파일 경로와 유사한 개념이 없다. 따라서, 매핑 관계 테이블에 대해 조회를 수행하는 것은 더 이상 필요하지 않으며, 조회는 볼륨 ID를 사용하여 볼륨 메타데이터에 대해 직접 수행되어 파일 버전 번호를 취득할 수 있다.
스트립 요청 생성 모듈(511)은 추가로, 파일명을 사용하여 매핑 관계 테이블에 대한 조회를 수행하여, 기록될 데이터가 위치하는 파일의 파일 식별자(FID)를 취득하고, FID에 따라 파일 메타데이터에 대한 조회를 수행하여 파일 버전 번호를 취득할 수 있다.
매핑 관계 테이블은 파일명과 FID 사이의 대응 관계를 기록하고, 파일명은 FID와 일대일 대응하고 있다. 매핑 관계 테이블의 저장 위치는 파일 판독 요청에 실려 전달될 수 있고 클라이언트에 의해 기록 요청으로부터 취득되거나, 매핑 관계 테이블은 클라이언트 서버에 의해 클라이언트 서버에 미리 저장될 수 있으며, 클라이언트 서버는 파일 경로에 따라 매핑 관계 테이블을 발견하거나, 또는 매핑 관계 테이블은 다른 저장 기기에 저장될 수 있다.
스트립 요청 생성 모듈(511)은 또한 취득된 파일 버전 번호를 메타데이터로 갱신할 수 있다. 갱신 후에, 파일 메타데이터는 FID 및 파일 버전 번호를 기록하고, 파일 버전 번호는 FID를 사용하여 파일 메타데이터를 조회함으로써 취득될 수 있다. 파일 메타데이터는 inode에 대한 정보에 저장될 수 있다. 파일 경로는 inode의 저장 위치를 나타낸다. 이상으로부터, ROW에서는, 버전 번호가 백업된 inode에 저장되기 때문에, 스트립 요청 생성 모듈(511)은 백업된 inode 노드를 판독하고; COW에서는, 버전 번호가 백업에 의해 생성된 inode에 저장되기 때문에, 스트립 요청 생성 모듈(511)은 백업에 의해 생성된 inode를 판독한다.
파일 버전 번호와 파일의 스냅샷 ID 사이에는 일대일 대응관계가 존재하고 스냅샷 ID를 생성한 후에, 클라이언트 서버는 스냅샷 ID와 일대일 대응관계에 있는 파일 버전 번호를 생성한다. 예를 들어, 스냅샷 ID는 파일 버전 번호로 직접 사용될 수 있거나 작업 수행이 후에 취득되는 스냅샷 ID가 파일 버전 번호로 사용될 수 있다. 나중에 생성된 스냅샷이 더 큰 스냅샷 ID를 가지면, 하나의 선택적 방식은, 나중에 생성된 스냅샷이 더 큰 값의 스냅샷 ID 값을 가지는 것이고, 다른 선택적 방식은 나중에 생성된 스냅샷이 더 작은 값의 스냅샷 ID을 갖는 것이다.
스트립 요청 생성 모듈(511)은 추가로 기록될 데이터를 기록될 스트립(strip)을 포함하는 복수의 스트립으로 분리하고, 스트립 분배 정책에 따라, 기록될 스트립의 오프셋 및 기록될 스트립이 속하는 객체의 ID를 취득하는 데, 이 ID는 객체 ID라고도 한다.
클라이언트 서버는 데이터를 스트립 크기(Size)에 따라 하나 이상의 스트립으로 분할한다. 스트립은 특정 크기의 데이터이다. 기록될 데이터의 크기가 단일 스트립의 크기 이하일 때, 기록될 데이터는 하나의 스트립으로 분할된다. 기록될 데이터의 크기가 단일 스트립의 크기보다 크면, 기록될 데이터는 복수의 스트립으로 분할된다. 동일한 파일에서 분할된 스트립의 크기는 동일하다. 스트립 크기(Size)는 파일 메타데이터에 저장될 수 있으며, 이 경우 다른 파일들은 다른 스트립 크기를 사용할 수 있다. 또는, 스트립 크기는 객체가 속하는 파일의 메타데이터에 저장되지 않을 수 있으며, 전체 파일 시스템 중의 파일은 하나의 스트립 크기를 공유하고, 이 경우 서로 다른 파일이 동일한 스트립 크기를 사용하고, 스트립 크기는 파일 시스템의 root inode에 저장된다. 객체는 스트립을 수용할 수 있는 컨테이너로 간주될 수 있다.
예를 들어, 기록될 데이터가 여러 개의 데이터 스트립으로 분할되는 경우, 스트립은 분할에 의해 취득된 데이터 스트립을 가리키거나; 또는 기록될 데이터가 데이터 스트립으로 분할된 후에, 데이터 스트립에 대한 데이터 보호를 수행하기 위해 몇 개의 검증 스트립이 추가로 생성되면, 분할에 의해 생성된 스트립은 데이터 스트립 및 검증 스트립 모두를 포함한다.
각각의 객체에 포함된 스트립의 총 수량은 파일 메타데이터에 저장될 수 있으며, 이 경우, 상이한 파일 중의 객체에 포함된 스트립의 총 수량은 다를 수 있거나; 또는 각각의 객체에 포함된 스트립의 총 수량은 객체가 속한 파일의 메타데이터에 저장되지 않을 수 있으며, 이 경우 서로 다른 파일에 있는 객체에 포함된 스트립의 총 수량은 동일하다.
유의해야 할 것은, 파일 중의 기록될 데이터의 시작 위치는 기록될 데이터의 오프셋으로부터 알 수 있고, 파일 중의 기록될 데이터의 종료 위치는 파일은 기록될 데이터의 오프셋 및 기록될 데이터의 크기로부터 알 수 있다. 기록될 데이터의 시작 위치가 스트립 크기의 정수배가 아니거나, 종료 위치에 1을 더한 값이 스트립 크기의 정수배가 아닌 경우, 기록될 데이터는 먼저 스트립 크기에 따라 분할되고, 분할 경계는 스트립 크기의 정수배이다. 분할 후에 그 크기가 하나의 스트립보다 작은 데이터(이 유형의 데이터를 스트립의 더티 데이터(dirty data)라고도 함)가 생기면, 데이터가 보충되어 스트립을 형성한다. 스트립 요청 생성 모듈(511)에 의해 수행되는 보충 작업으로 인해, 달리 지정되지 않는 한, 순차적으로 언급되는 스트립과 오프셋은 모두 보충 후에 취득된 스트립 및 오프셋을 가리킨다.
예를 들어, 기록될 데이터의 오프셋 범위가 4 KB∼~300 KB이고, 스트립 크기가 256 KB인 경우에는, 기록될 데이터를 분할하는 경계로서 0 KB와 256 KB가 사용되고, 두 개의 데이터 블록이 형성되는 데, 기록될 데이터 중의 두 개의 데이터 블록의 오프셋 범위는 각각 4 KB∼255 KB 및 256 KB∼300 KB이다. 두 개의 데이터 블록에 대해 보충을 수행되어, 256 KB 크기의 두 개의 스트립이 형성된다. 앞의(former) 데이터 블록을 보충하는 데 사용된 데이터(크기는 3 KB∼0 KB = 3 KB)는 이전 스트립에서 가져오고, 뒤의(latter)의 데이터 블록을 보완하는 데 사용되는 데이터(크기는 511KB∼ 300 KB=21 KB)는 다음 스트립에서 가져온다. 기록될 데이터의 오프셋은 파일 중의 기록될 데이터의 상대적인 위치이다.
다른 보충 방법은 다음과 같다: 기록될 데이터의 시작 위치가 스트립 크기의 정수 배가 아니거나, 종료 위치 오프셋에 1을 더한 값이 스트립의 정수배가 아니면, 스트립의 기록될 데이터에 대해 보충 작업이 수행될 수 있으므로, 분할 후에 취득되는 스트립의 크기가 일정하고 스트립에 여백이 없다. OSD에 이미 저장된 데이터를 핀독하여 보충을 위한 데이터로 사용할 수 있다.
예를 들어, 기록될 데이터의 오프셋 범위가 4 KB∼~300 KB이고, 스트립 사이즈가 256 KB이면, 기록될 데이터는 오프셋 범위가 0 KB∼-511 KB인 데이터를 형성하도록 보충될 수 있고, 그 후, 오프셋 범위가 0 KB∼255 KB 및 256 KB∼511 KB인 두 개의 스트립으로 분할되므로, 각각의 스트립의 크기는 256 KB가 된다.
스트립 분배 정책은 클라이언트 서버의 파일 시스템에 의해 제공된다. 스트립이 속하는 객체가 기술된다. 즉 스트립과 객체 사이의 대응관계가 기술된다. 구체적으로 대응관계는 스트립의 오프셋과 객체 사이의 대응관계일 수 있다.
객체 ID는 객체를 유일하게 식별할 수 있게 하며, 동일 파일에 속하는 객체들의 ID는 상이하며, 상이한 파일 중의 객체들의 ID도 또한 다르다.
선택적으로, 객체 ID와 객체가 속하는 파일의 FID 사이에는 대응관계가 있을 수 있다. 즉, 예를 들어, 이 객체 ID로 표현되는 객체가 유래된 파일은 객체 ID로부터 알 수 있다.
예를 들어, 객체 ID를 생성하는 선택적 방법은 다음과 같다: 객체 ID는 64비트의 2진수를 포함하며, 앞의 32비트는 객체가 속하는 파일의 ID이고, 뒤의 32비트는 파일에서 유일하며, 동일한 파일 중의 다른 객체의 뒤의 32비트는 상이하다. 예를 들어, 파일에서 객체 식별자가 사용된다. 이러한 방식으로, 대응하는 FID를 객체 ID의 앞의 32비트로부터 알 수 있게 된다. 유사하게, 블록(block) 시스템에서, 객체 ID와 볼륨 ID 사이의 관계가 성립될 수도 있다.
객체 ID를 생성하는 다른 선택적인 방법은 다음과 같다: 객체 ID는 48비트의 이진수를 포함하며, 여기서 앞의 16비트는 파일에 대응하고, 다른 파일의 앞의 16비트는 다르다. 뒤의 32비트는 클라이언트 서버에 의해 할당되고, 뒤의 32비트는 파일에서 유일하며, 동일 파일 중의 상이한 객체들의 뒤의 32비트는 상이하다.
다른 실시예에서, ID와 객체가 속하는 파일의 FID 사이에 대응관계가 없을 수도 있다.
도 3a 및 도 3b는 두 개의 상이한 스트립 분배 정책을 나타낸다. 스트립 인덱스는 파일 중의 스트립의 오프셋 관계를 기술하고, 스트립 인덱스는 0 이상의 정수이며, 가장 작은 스트립 인덱스는 0이고, 두 번째 가장 작은 스트립 인덱스는 1이고, 세 번째 가장 작은 스트립 인덱스 2, ..., 등이다. 인접한 인덱스 값을 갖는 두 개의 스트립은 또한 파일에서 인접한 오프셋을 가진다.
선택적 스트립 분배 정책이 3a에 도시되어 있다: (1) 동일한 파일에 속하는 객체의 크기는 고정되어 있고, 동일한 파일에 있는 스트립의 크기는 동일하다. 이는 상이한 객체에 포함된 스트립의 총 수량은 동일하다는 것을 의미한다. (2) 이전 객체가 먼저 채워진 다음 인덱스 순서에 따라 다음 객체가 스트립에 의해 채워진다. 즉, 수 개의 연속되는 스트립이 기록될 데이터 중의 스트립의 오프셋 크기의 순서에 따라 동일한 객체에 속한다. 도 3a에 도시된 바와 같이, 각각의 객체는 고정적으로 4개의 스트립을 포함한다. 예를 들어, 스트립 크기는 256 KB이고 각각의 객체에는 4개의 스트립이 있다. 즉, 객체 크기는 256 KB×4=1024 KB이다. 이 경우, 제1 객체는 스트립 0∼스트립 3을 저장하고, 제2 객체는 스트립 4∼스트립 7을 저장하고, 제3 객체는 스트립 8∼스트립 11을 저장하고, ..., 등이다. 따라서, 제1 객체의 ID는 0, 제2 객체의 ID는 1, 제3 객체의 ID는 3, ..., 등이다.
스트립 오프셋은 객체 내에서의 스트립의 상대 위치를 기술하는 데 사용되며, 구체적으로는 객체 중의 스트립의 시작 데이터의 상대 위치일 수 있다. 스트립 오프셋 = (스트립 인덱스 % 객체 중의 스트립의 수량) × 스트립 크기. 여기서 스트립 인덱스 % 객체 중의 스트립의 수량(Strip index % Quantity of strips)은 스트립 인덱스를 객체 중의 스트립의 수량으로 나눈 나머지를 계산하는 것이다.
다른 선택적 스트립 분배 정책이 3b에 도시되어 있다: (1) 동일한 파일 중의 객체의 크기는 고정되어 있지 않다. 즉, 동일한 파일의 서로 다른 객체에 있는 스트립의 총 수량은 다를 수 있다. (2) 객체의 총 수량이 고정되어 있다. 즉 상이한 파일이 동일한 수량의 객체를 가지고 있고, 도 3b에 도시된 바와 같이, 총 3개의 객체가 있다. 예를 들어, 스트립 크기가 25 6KB이고 객체의 총 수량이 3으로 고정되어 있으면, 제1 스트립(스트립 0)은 제1 객체(객체 0)에 위치하고 제2 스트립 (스트립 1)은 제2 객체(객체 1)에 위치하고, ..., 유추하여, 제4 스트립(스트립 3)도 제1 객체에 위치하고, 제5 스트립(스트립 4)도 제2 객체에 위치한다. 스트립 인덱스는 0 이상의 정수이며 파일 중의 스트립들 사이의 위치 관계를 기술한다. 스트립이 속하는 객체 중의 각각의 스트립의 오프셋이 또한 결정될 수 있으며, 파일 중의 객체의 식별자는, 스트립 인덱스를 파일 중 객체의 총 수량으로 나눈 후에 취득한 나머지일 수 있다. 구체적인 계산식은 다음과 같을 수 있다: 파일 중의 객체 식별자 = 스트립 색인 % 파일의 객체의 수량, 그리고 스트립 오프셋 = (스트립 색인 / 객체의 수량) × 스트립 크기..
스트립 인덱스는 기록될 데이터의 오프셋을 사용하여 결정될 수 있다. 예를 들어, 전체 파일의 경우, 파일이 분할된 후에 취득된 시작 데이터는 제1 객체 중의 스트립(스트립 0)에 위치하고, 현재 기록될 데이터의 오프셋은 객체 1에서 제5 스트립(스트립 4)에 위치한다. 이 경우, 기록 데이터가 분할된 후에 생성된 스트립에서, 제1 스트립의 인덱스는 4이고, 다른 스트립의 인덱스는 유추에 의해 취득된다.
위의 설명은 스트립이 속한 객체의 ID를 계산하기 위한 두 가지 방안을 기술한 것이고, 상이한 스트립 분배 정책에 따라, 다른 구현 방안도 있을 수 있다. 상이한 분배 정책에서 사용되는 파라미터는 상이할 수 있으며, 이러한 파라미터는 일반적으로 클라이언트 서버에 대해 조회를 수행함으로써 취득될 수 있다.
모든 스트립의 처리 방식이 동일하기 때문에, 다음은 설명을 위한 예로서 특정한 "기록될 스트립"만을 사용한다.
스트립 요청 송신 모듈(512)은 기록될 스트립을 저장하는 데 사용되는 OSD를 선택하도록 구성된다.
선택적인 계산 방법은, 기록될 스트립의 FID에 따라, 기록 스트립을 저장하기 위한 OSD를 결정하는 것이다. 예를 들어, FID의 해시 값을 OSD의 총 수량으로 나눠서, 나머지를 기록될 스트립을 저장하기 위한 OSD의 식별자로 사용한다. 즉 FID의 해시 값 mod OSD의 총 수량. 다른 방안이 있을 수 있다. 예를 들어, 클라이언트 서버는 객체에 속하는 기록될 스트립을 저장하기 위한 OSD를 임의로 선택하고, 동일한 객체에 속하는 스트립을 동일한 OSD에 저장할 수 있다.
또, 스트립을 저장하기 위한 OSD는 또한 기록될 스트립의 FID 및 객체 ID에 따라 함께 결정될 수 있다. 실제로는, OSD를 선택할 수 있다면, 계산 방법은 임의로 선택될 수 있다.
스트립 요청 전송 모듈(512)은 스트립 기록 요청을 OSD에 전송하도록 더 구성되며, 스트립 기록 요청은 기록될 스트립, 기록될 스트립의 버전 번호, 기록될 스트립의 오프셋 및 기록될 스트립이 속하는 객체의 ID를 싣고 있다.
선택적으로, OSD가 ROW 및 COW를 모두 지원하는 경우, 기록 모드가 추가로 전송되어, OSD가 클라이언트 서버에 의해 지정된 기록 모드에 따라 기록될 스트립을 기록할 수 있도록 한다. 기록 모드는 ROW 또는 COW이다. OSD가 하나의 기록 모드만을 지원하면, 기록 모드는 OSD로 전송되지 않을 수 있다.
스트립 요청 수신 모듈(521)은 스트립 기록 요청을 수신하고 기록될 스트립을 OSD의 저장 매체에 기록하도록 구성된다.
스트립 요청 수신 모듈(521)은 단계 26에서의 방법을 실행할 수 있다.예를 들어, 기록될 스트립의 기록은 네 가지 방식 중 하나 이상의 방식으로 구현될 수 있다.
스트립 요청 생성 모듈(511)은 추가로 파일 판독 요청을 수신하도록 구성될 수 있으며, 파일 판독 요청은 파일명, 판독될 데이터의 크기 및 판독될 데이터의 오프셋을 싣고 있다.
파일 기록 요청과 유사하게, 파일 판독 요청을 파일 판독 요청의 파일 경로를 더 실어 전달할 수 있으며, 파일 경로는 매핑 관계 테이블의 저장 위치를 기록한다. 파일은 파일 경로 및 파일명을 사용하여 유일하게 결정될 수 있다.
구체적으로, 이 단계는 클라이언트 서버의 파일 시스템 내의 프로그램에 의해 실행될 수 있다. 파일 판독 요청은 파일 시스템이 식별할 수 있는 판독 요청이다. 파일 판독 요청은 전체 파일 또는 파일의 일부 데이터를 읽는 요청이다
판독될 데이터의 오프셋은 파일 중의 판독될 데이터의 상대 위치를 기술한다. 특히, 판독될 데이터의 오프셋은 판독될 데이터의 시작 위치와 파일 헤더 사이의 거리를 기술할 수 있다. 판독될 데이터의 오프셋이 0 경우, 판독될 데이터의 시작 위치가 판독될 파일의 시작 위치인 것을 나타낸다. 판독될 데이터의 오프셋이 2 KB이면, 판독될 데이터의 시작 위치와 파일의 시작 위치 사이의 거리가 2 KB의 데이터 크기라는 것을 나타낸다.
선택적으로, 파일 판독 요청은 파일 경로를 더 실어 전달할 수 있으며, 파일 경로는 매핑 관계 테이블의 저장 위치를 기록한다. 매핑 관계 테이블에 대한 자세한 내용은 단계 21의 설명을 참조하기 바란다.
파일명은 판독될 데이터가 위치하는 파일의 파일명일 수도 있고, 판독될 데이터가 위치한 파일의 스냅샷의 파일명일 수도 있다. 파일명이 판독될 데이터가 위치하는 파일의 파일명이면 파일 판독 요청은 최신의 판독될 데이터에 액세스하려는 것임을 나타낸다. 파일명이 판독될 데이터가 위치하는 파일의 스냅샷의 파일명이면, 파일 판독 요청이 스냅샷의 판독될 데이터에 액세스하려는 것임을 나타낸다. 스트립 요청 저장 모듈(522)은 파일명을 사용하여 매핑 관계 테이블을 조회하여, 판독될 데이터가 위치하는 파일의 FID를 취득하고, FID에 따라 파일 메타데이터를 조회하여 파일 버전 번호를 취득하도록 구성된다.
파일명이 판독될 데이터가 위치하는 파일의 파일명이면, 매핑 관계 테이블을 저장하는 파일 경로이 판독될 파일가 위치하는 파일의 파일 경로이며, 파일 버전 번호는 파일에 대응하는 FID에 따라 메타데이터를 조회하여 획득된다.
파일명이 스냅샷의 파일명인 경우, 매핑 관계 테이블 내의 파일 경로는 스냅샷 파일이 위치하는 경로이며, 파일 버전 번호는 파일의 FID에 따라 메타데이터를 조회하여 획득된다.
매핑 관계 테이블은 파일명과 FID와의 대응 관계를 기록하고, 파일명은 FID와 일대일 대응관계이다. FID 및 FID와 파일 버전 번호 사이의 관계의 설명에 대해서는, 단계 21 및 단계 22를 참조하기 바란다. 매핑 관계 테이블의 저장 위치는 파일 판독 요청 중에 실려 전달될 수 있고 클라이언트 서버에 의해 판독 요청으로부터 취득될 수 있거나, 또는 매핑 관게 테이블은 클라이언트 서버에 의해 클라이언트 서버에 미리 저장될 수 있고, 클라이언트 서버가 파일 경로에 따라 매핑 관계 테이블을 찾거나, 매핑 관계 테이블이 다른 저장 기기에 저장될 수도 있다.
단계 22를 참조하면, 다른 구체적인 경우에 따라, 메타데이터는 파일의 inode에 저장될 수 있거나 파일 시스템의 root inode에 저장될 수 있다.
스냅샷 ID와 파일 버전 번호 사이에는 일대일 대응관계가 있으므로, 클라이언트 서버는 스냅샷 ID에 따라 파일 버전 번호를 취득할 수 있다. 이 대응관계는 파일 메타데이터에 저장될 수 있다.
스트립 요청 생성 모듈(511)은 추가로, 클라이언트 서버는 파일 판독 요청을 처리하고 파일 판독 요청을, 스트립 판독 요청을 포함하는 복수의 판독 요청으로 변환하며 - 여기서, 각각의 스트립 판독 요청은 스트립 판독을 요청하는 데 사용되고, 스트립 판독 요청은, OSD로부터 판독될 스트립을 판독하도록 요청하는 데 사용됨 -; 각각의 판독 요청에 대응하는 객체 ID를 결정하도록 구성되며, 스트립 판독 요청은 판독될 스트립의 버전 번호, 판독될 스트립의 오프셋, 판독될 스트립의 크기 및 판독될 스트립의 객체 ID를 싣고 있다.
구체적으로는, 판독될 스트립을 포함하는, 판독되어야 하는 각각의 스트립의 오프셋은, 판독될 데이터의 크기 및 판독될 데이터의 오프셋에 따라 알 수 있다.
단계 23에서의 스트립을 생성하는 방법을 참조하면, 기록될 데이터는 스트립 크기에 따라, 판독될 데이터의 오프셋 및 기록될 데이터의 길이를 사용하여 스트립으로 분할되어, 판독될 스트립의 오프셋을 취득할 수 있다. 동일한 방법에 따라, 이 단계에서, 판독되어야 하는 각각의 스트립의 오프셋은 또한 스트립 크기, 판독될 데이터의 오프셋 및 판독될 데이터의 길이를 사용하여 취득될 수 있다. 스트립 크기는 파일의 inode로부터 나올 수 있고, 이 경우 상이한 파일은 상이한 스트립 크기를 사용할 수 있거나, 전체 시스템의 모든 파일이 하나의 스트립 크기를 공유한다.
판독될 스트립의 오프셋을 취득한 후에, 판독될 스트립이 위치하는 객체의 ID는 단계 23에서와 동일한 방법에 따라 취득될 수 있다. 유의해야 할 것은, 파일명이 판독될 데이터가 위치하는 파일의 파일명인지 또는 스냅샷의 파일명인지에 무관하게, 판독 요청에 대응하는 객체 ID를 조회하는 데 사용되는 FID는 판독될 데이터가 위치하는 파일의 FID이다.
스트립 요청 전송 모듈(512)은 추가로 스트립 판독 요청을 수신하는 데 사용되는 OSD를 선택하도록 구성될 수 있다.
구체적으로, 이 단계는 클라이언트 서버의 객체 저장 클라이언트에 의해 실행될 수 있다.
동일한 스트립의 스트립 판독 요청과 스트립 기록 요청은 동일한 OSD에 대응해야 한다. 실현 가능한 방법은 단계 24에서와 동일한 OSD 선택 계산 방법을 사용하는 것이다.
스트립 요청 전송 모듈(512)은 추가로 스트립 판독 요청을 OSD에 전송하도록 구성될 수 있다.
판독될 스트립의 버전 번호는 판독될 스트립이 속하는 파일의 버전 번호이다.
선택적으로, 기록 모드는 추가로 OSD로 전송될 수 있으며, 기록 모드는 단계 25에서의 스트립 기록 요청에 실린 기록 모드와 일치한다. 스트립의 객체 ID는 판독될 스트립이 속하는 객체의 ID이다.
스트립 요청 수신 모듈(521)은 추가로, 스트립 판독 요청을 수신하고, 판독될 스트립의 저장 위치를 검색하여, 판독될 스트립을 클라이언트 서빙 장치에 전송하도록 구성될 수 있다.
스트립 요청 수신 모듈(521)은 단계 32에서의 기능을 구현할 수 있다. 예를 들어 단계 32에 언급된 방식 1 또는 방식 2로 판독될 스트립을 판독한다. 따라서, 스트립 요청 수신 모듈(521)의 구체적인 기능에 대해서는 단계 32를 참조할 수 있다.
본 발명의 각 측면 또는 각 측면의 가능한 구현 방식은 시스템, 방법 또는 컴퓨터 프로그램 제품으로서 구체적으로 구현될 수 있다. 따라서, 본 발명의 각 측면 또는 각 측면의 가능한 구현 방식은 하드웨어만의 실시예 또는 소프트웨어만의 실시예(펌웨어, 상주 소프트웨어 등을 포함함) 또는 소프트웨어와 하드웨어의 조합을 갖는 실시예의 형태를 사용할 수 있으며, 이를 "회로", "모듈" 또는 "시스템"이라고 통칭한다. 또한, 본 발명의 각 측면 또는 각 측면의 가능한 구현 방식은 컴퓨터로 판독할 수 있는 매체에 저장된 컴퓨터로 판독할 수 있는 프로그램 코드를 지칭하는 컴퓨터 프로그램 제품의 형태를 취할 수 있다.
컴퓨터로 판독한 수 있는 매체는 컴퓨터로 판독할 수 있는 신호 매체 또는 컴퓨터로 판독할 수 있는 저장 매체 일 수 있다. 컴퓨터로 판독할 수 있는 저장 매체는, 랜덤 액세스 메모리(RAM), 판독 전용 메모리(ROM), 소거 가능/프로그램 가능 판독 전용 메모리 (EPROM 또는 플래시 메모리), 광섬유 및 CD-ROM(compact disc read only memory)과 같은, 전자, 자기, 광학, 전자기, 적외선 또는 반도전성 시스템(semi-conductive system), 기기 또는 장치, 또는 이들의 임의의 적절한 조합을 포함하지만 이에 한정되는 것은 아니다.
컴퓨터의 프로세서는 컴퓨터로 판독할 수 있는 매체에 저장된, 컴퓨터로 판독할 수 있는 프로그램 코드를 판독하여, 프로세서가 흐름도의 각 단계 또는 단계들의 조합에서 특정된 기능 및 동작을 수행할 수 있다. 각 블록 또는 블록 다이어그램의 블록들의 조합에서 특정된 기능 및 동작을 구현하기 위한 장치가 생성된다.

Claims (45)

  1. 객체 저장 기기(object storage device, OSD)가 클라이언트 서버에 의해 전송되는 스트립 기록 요청(strip write request)을 수신하는 단계 - 상기 스트립 기록 요청은 기록될 스트립, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋 및 상기 기록될 스트립의 객체 ID를 포함하고, 상기 기록될 스트립의 버전 번호는 상기 기록될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷(snapshot)의 스냅샷 ID에 대응하고, 상기 기록될 스트립의 오프셋은 상기 기록될 스트립이 속하는 객체 내에서의 상기 기록될 스트립의 위치를 기술하고, 상기 기록될 스트립의 객체 ID는 상기 기록될 스트립이 속하는 객체의 ID임 -; 및
    상기 객체 ID, 상기 기록될 스트립의 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 상기 기록될 스트립을 기록하는 단계
    를 포함하는 데이터 저장 방법.
  2. 제1항에 있어서,
    상기 OSD가 클라이언트 서버에 의해 전송되는 스트립 기록 요청을 수신하는 단계 전에,
    상기 클라이언트 서버가, 상기 기록될 스트립이 속하는 파일 또는 볼륨의 스냅샷을 획득하여, 상기 최근 스냅샷의 스냅샷 ID을 생성하는 단계; 및
    상기 최근 스냅샷의 스냅샷 ID에 따라 상기 기록될 스트립의 버전 번호를 생성하는 단계를 더 포함하는 데이터 저장 방법.
  3. 제2항에 있어서,
    상기 클라이언트 서버가 상기 기록될 스트립의 버전 번호를 상기 파일 또는 상기 볼륨의 메타데이터로 갱신하는 단계
    를 더 포함하는 데이터 저장 방법
  4. 제1항 또는 제2항 또는 제3항에 있어서,
    상기 OSD가 클라이언트 서버에 의해 전송되는 스트립 기록 요청을 수신하는 단계 전에,
    상기 클라이언트 서버가 파일 기록 요청을 수신하는 단계 - 상기 파일 기록 요청은 기록될 데이터, 상기 기록될 데이터의 오프셋, 및 파일명을 포함하고, 상기 기록될 데이터는 상기 파일의 일부임 -;
    상기 클라이언트 서버가, 상기 파일명에 따라 파일 식별자(file identifier, FID)를 취득하고, 상기 FID에 따라 상기 파일의 메타데이터를 조회하여 상기 파일의 버전 번호를 취득하고, 상기 파일의 버전 번호를 상기 기록될 스트립의 버전 번호로 사용하는 단계 - 상기 파일의 버전 번호는 상기 기록될 스트립이 속하는 파일의 최근 스냅샷의 스냅샷 ID에 대응함 -;
    상기 클라이언트 서버가, 상기 기록될 데이터의 오프셋 및 상기 기록될 데이터의 크기에 따라, 상기 기록될 데이터를 상기 기록될 스트립을 포함하는 복수의 스트립으로 분할하고, 상기 기록될 스트립이 속하는 객체의 ID를 결정하고, 상기 기록될 스트립의 오프셋을 취득하는 단계; 및
    상기 스트립 기록 요청을 생성하는 단계를 더 포함하는 데이터 저장 방법.
  5. 제1항에 있어서,
    상기 OSD가 클라이언트 서버에 의해 전송되는 스트립 기록 요청을 수신하는 단계 전에,
    상기 클라이언트 서버가, 볼륨 기록 요청을 수신하는 단계 - 상기 볼륨 기록 요청은 기록될 데이터, 상기 기록될 데이터의 오프셋, 및 볼륨 식별자(ID)를 포함하고, 상기 기록될 데이터는 상기 볼륨의 일부임 -;
    상기 클라이언트 서버가, 상기 볼륨 ID에 따라, 상기 볼륨의 메타데이터를 조회하여 상기 볼륨의 버전 번호를 취득하고, 상기 볼륨의 버전 번호를 상기 기록될 스트립의 버전 번호로 사용하는 단계 - 상기 볼륨의 버전 번호는 상기 기록될 스트립이 속하는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응함 -;
    상기 클라이언트 서버가, 상기 기록될 데이터의 오프셋 및 상기 기록될 데이터의 크기에 따라, 상기 기록될 데이터를 상기 기록될 스트립을 포함하는 복수의 스트립으로 분할하고, 상기 기록될 스트립이 속하는 객체의 ID를 결정하고, 상기 기록될 스트립의 오프셋을 결정하는 단계; 및
    상기 스트립 기록 요청을 생성하는 단계를 더 포함하는 데이터 저장 방법.
  6. 객체 저장 기기(OSD)가 클라이언트 서버에 의해 전송되는 스트립 기록 요청을 수신하는 단계 - 상기 스트립 기록 요청은 기록될 스트립, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋 및 상기 기록될 스트립의 객체 ID를 포함하고, 상기 기록될 스트립의 버전 번호는 상기 기록될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응하고, 상기 기록될 스트립의 오프셋은 상기 기록될 스트립이 속하는 객체 내에서의 상기 기록될 스트립의 위치를 기술하고, 상기 기록될 스트립의 객체 ID는 상기 기록될 스트립이 속하는 객체의 ID임 -;
    상기 OSD가 상기 기록될 스트립의 버전 번호 및 상기 객체 ID를 사용하여 결정된 객체가 백업되어 있는지를 판정하는 단계; 및
    상기 객체가 백업되어 있으면, 상기 OSD가, 상기 기록될 스트립을 상기 객체 ID, 상기 기록될 스트립의 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록하거나; 또는 상기 객체가 백업되어 있지 않으면, 상기 OSD가, 상기 기록될 스트립을 사용하여 스플라이싱된 객체(spliced object)를 생성한 다음, 상기 스플라이싱된 객체를 상기 기록될 스트립의 버전 번호 및 상기 객체 ID를 사용하여 결정된 저장 위치에 기록하는 단계
    를 포함하는 데이터 저장 방법.
  7. 제6항에 있어서,
    상기 OSD가, 상기 기록될 스트립을 사용하여 스플라이싱된 객체를 생성하는 것은,
    상기 OSD가, 상기 기록될 스트립의 객체 ID의 객체 세트에 속하는 백업된 객체 중에서 최근 스냅샷 시각을 가진 객체를 선택하여, 상기 기록될 스트립의 오프셋과 다른 오프셋을 가진 스트립을 취득하고, 상기 기록될 스트립 및 상기 기록될 스트립의 오프셋과 다른 오프셋을 가진 스트립을 사용하여 공동으로 상기 스플라이싱된 객체를 구성하는 것을 포함하고,
    상기 기록될 스트립의 객체 ID의 객체 세트란, 상기 OSD에 저장되어 있고 상기 기록될 스트립의 객체 ID과 동일한 객체 ID를 가지고 상기 기록될 스트립의 버전 번호와 상이한 버전 번호를 가진 객체의 세트인, 데이터 저장 방법.
  8. 제6항에 있어서,
    상기 OSD가 클라이언트 서버에 의해 전송되는 스트립 기록 요청을 수신하는 단계 전에,
    상기 클라이언트 서버가, 상기 기록될 스트립이 속하는 파일 또는 볼륨의 스냅샷을 획득하여, 상기 최근 스냅샷의 스냅샷 ID을 생성하는 단계;
    상기 최근 스냅샷의 스냅샷 ID에 따라 상기 기록될 스트립의 버전 번호를 생성하는 단계; 및
    상기 클라이언트 서버가 상기 기록될 스트립의 버전 번호를 상기 파일 또는 상기 볼륨의 메타데이터로 갱신하는 단계를 더 포함하는 데이터 저장 방법.
  9. 객체 저장 기기(OSD)가 클라이언트 서버에 의해 전송되는 스트립 기록 요청을 수신하는 단계 - 상기 스트립 기록 요청은 기록될 스트립, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋 및 상기 기록될 스트립의 객체 ID를 포함하고, 상기 기록될 스트립의 버전 번호는 상기 기록될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응하고, 상기 기록될 스트립의 오프셋은 상기 기록될 스트립이 속하는 객체 내에서의 상기 기록될 스트립의 위치를 기술하고, 상기 기록될 스트립의 객체 ID는 상기 기록될 스트립이 속하는 객체의 ID임 -;
    상기 OSD가, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 객체 ID 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 스트립이 백업되어 있는지를 판정하는 단계; 및
    상기 스트립이 백업되어 있으면, 상기 기록될 스트립을 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 객체 ID 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록하거나; 또는 상기 스트립이 백업되어 있지 않으면, 상기 OSD 중의 기본 버전(base version)의 객체에 있고 크기가 상기 기록될 스트립의 크기인 데이터를, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋, 및 상기 기록될 스트립의 객체 ID를 사용하여 결정된 저장 위치에 백업하고 - 상기 기본 버전의 객체의 객체 ID는 상기 기록될 스트립의 객체 ID와 동일하고, 상기 기본 버전의 객체의 버전 번호가 기본 버전 번호임 -, 상기 기록될 스트립을 상기 기록될 스트립의 객체 ID, 상기 기본 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록하는 단계
    를 포함하는 데이터 처리 방법.
  10. 제9항에 있어서,
    상기 OSD가 클라이언트 서버에 의해 전송되는 스트립 기록 요청을 수신하는 단계 전에,
    상기 클라이언트 서버가, 상기 기록될 스트립이 속하는 파일 또는 볼륨의 스냅샷을 획득하여, 상기 최근 스냅샷의 스냅샷 ID을 생성하는 단계; 및
    상기 최근 스냅샷의 스냅샷 ID에 따라 상기 기록될 스트립의 버전 번호를 생성하는 단계를 더 포함하는 데이터 처리 방법.
  11. 제10항에 있어서,
    상기 클라이언트 서버가 상기 기록될 스트립의 버전 번호를 상기 파일 또는 상기 볼륨의 메타데이터로 갱신하는 단계를 더 포함하는 데이터 처리 방법
  12. 제9항에 있어서,
    상기 OSD가 클라이언트 서버에 의해 전송되는 스트립 기록 요청을 수신하는 단계 전에,
    상기 클라이언트 서버가 파일 기록 요청을 수신하는 단계 - 상기 파일 기록 요청은 기록될 데이터, 상기 기록될 데이터의 오프셋, 및 파일명을 포함하고, 상기 기록될 데이터는 상기 파일의 일부임 -;
    상기 클라이언트 서버가, 상기 파일명에 따라 파일 식별자(FID)를 취득하고, 상기 FID에 따라 상기 파일의 메타데이터를 조회하여 상기 파일의 버전 번호를 취득하고, 상기 파일의 버전 번호를 상기 기록될 스트립의 버전 번호로 사용하는 단계 - 상기 파일의 버전 번호는 상기 기록될 스트립이 속하는 파일의 최근 스냅샷의 스냅샷 ID에 대응함 -;
    상기 클라이언트 서버가, 상기 기록될 데이터의 오프셋 및 상기 기록될 데이터의 크기에 따라, 상기 기록될 데이터를 상기 기록될 스트립을 포함하는 복수의 스트립으로 분할하고, 상기 기록될 스트립이 속하는 객체의 ID를 결정하고, 상기 기록될 스트립의 오프셋을 취득하는 단계; 및
    상기 스트립 기록 요청을 생성하는 단계를 더 포함하는 데이터 처리 방법.
  13. 제9항에 있어서,
    상기 OSD가 클라이언트 서버에 의해 전송되는 스트립 기록 요청을 수신하는 단계 전에,
    상기 클라이언트 서버가, 볼륨 기록 요청을 수신하는 단계 - 상기 볼륨 기록 요청은 기록될 데이터, 상기 기록될 데이터의 오프셋, 및 볼륨 식별자(ID)를 포함하고, 상기 기록될 데이터는 상기 볼륨의 일부임 -;
    상기 클라이언트 서버가, 상기 볼륨 ID에 따라, 상기 볼륨의 메타데이터를 조회하여 상기 볼륨의 버전 번호를 취득하고, 상기 볼륨의 버전 번호를 상기 기록될 스트립의 버전 번호로 사용하는 단계 -;
    상기 클라이언트 서버가, 상기 기록될 데이터의 오프셋 및 상기 기록될 데이터의 크기에 따라, 상기 기록될 데이터를 상기 기록될 스트립을 포함하는 복수의 스트립으로 분할하고, 상기 기록될 스트립이 속하는 객체의 ID를 결정하고, 상기 기록될 스트립의 오프셋을 결정하는 단계; 및
    상기 스트립 기록 요청을 생성하는 단계를 더 포함하는 데이터 처리 방법.
  14. 객체 저장 기기(OSD)가 클라이언트 서버에 의해 전송되는 스트립 기록 요청을 수신하는 단계 - 상기 스트립 기록 요청은 기록될 스트립, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋 및 상기 기록될 스트립의 객체 ID를 포함하고, 상기 기록될 스트립의 버전 번호는 상기 기록될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응하고, 상기 기록될 스트립의 오프셋은 상기 기록될 스트립이 속하는 객체 내에서의 상기 기록될 스트립의 위치를 기술하고, 상기 기록될 스트립의 객체 ID는 상기 기록될 스트립이 속하는 객체의 ID임 -;
    상기 OSD가 상기 기록될 스트립의 버전 번호 및 상기 객체 ID를 사용하여 결정된 객체가 백업되어 있는지를 판정하는 단계; 및
    상기 객체가 백업되어 있으면, 상기 OSD가, 상기 기록될 스트립을 상기 객체 ID, 상기 객체의 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록하거나; 또는 상기 객체가 백업되어 있지 않으면, 상기 OSD 중의 기본 버전의 객체에 있는 데이터를, 상기 기록될 스트립의 버전 번호 및 상기 객체 ID를 사용하여 결정된 저장 위치에 백업하고, - 상기 기본 버전의 객체의 객체 ID는 상기 기록될 스트립의 객체 ID와 동일하고, 상기 기본 버전의 객체의 버전 번호가 기본 버전 번호임 -, 그리고 상기 OSD가, 상기 기록될 스트립을 상기 객체 ID, 상기 기본 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록하는 단계
    를 포함하는 데이터 처리 방법.
  15. 객체 저장 기기(OSD)가 클라이언트 서버에 의해 전송되는 스트립 판독 요청을 수신하는 단계 - 상기 스트립 판독 요청은 판독될 스트립의 크기, 상기 판독될 스트립의 오프셋, 상기 판독될 스트립의 버전 번호 및 상기 판독될 스트립의 객체 ID를 포함하고, 상기 판독될 스트립의 버전 번호는 상기 판독될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응하고, 상기 판독될 스트립의 객체 ID는 상기 판독될 스트립이 속하는 객체의 ID임 -; 및
    상기 OSD가 상기 객체 ID, 상기 판독될 스트립의 버전 번호 및 상기 판독될 스트립의 오프셋을 사용하여 결정된 스트립이 백업되어 있는지를 판정하는 단계; 및
    상기 스트립이 백업되어 있으면, 상기 객체 ID, 상기 판독될 스트립의 버전 번호, 상기 판독될 스트립의 오프셋, 및 상기 판독될 스트립의 크기를 사용하여 결정된 데이터를 판독하고, 상기 판독된 데이터를 상기 판독될 스트립으로 사용하여, 상기 판독될 스트립을 상기 클라이언트 서버에 전송하거나; 또는 상기 스트립이 백업되어 있지 않으면, 상기 판독될 스트립의 객체 ID와 동일한 객체 ID를 가지고 상기 판독될 스트립의 버전 번호와 상이한 버전 번호를 가진 객체를, 객체의 스냅샷 시각의 내림차순에 따라 하나씩, 상기 판독될 스트립의 오프셋을 사용하여 결정된 저장 위치에서 유효한 데이터를 저장하고 있는 객체가 발견될 때까지 검색하고, 상기 발견된 유효한 데이터를 상기 판독될 스트립으로 사용하고, 상기 판독될 스트립을 상기 클라이언트 서버에 전송하는 단계 - 상기 객체의 버전 번호는 상기 객체가 생성되기 전에 존재하고 있는, 상기 판독될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응함 -
    를 포함하는 데이터 판독 방법.
  16. 제15항에 있어서,
    상기 OSD의 기록 모드가 ROW이면, 상기 객체의 스냅샷 시각의 내림차순이 버전 번호의 내림차순이거나;
    상기 OSD의 기록 모드가 COW이면, 상기 객체의 스냅샷 시각의 내림차순이 버전 번호의 오름차순인, 데이터 판독 방법.
  17. 제15항에 있어서,
    상기 OSD가 클라이언트 서버에 의해 전송되는 스트립 기록 요청을 수신하는 단계 전에,
    상기 클라이언트 서버가, 파일 판독 요청을 수신하는 단계 - 상기 파일 판독 요청은 파일명, 판독될 데이터의 크기 및 상기 판독될 데이터의 오프셋을 포함하고, 상기 판독될 데이터는 상기 파일의 일부임 -;
    상기 클라이언트 서버가, 상기 파일명에 따라 파일 식별자(FID)를 취득하고, 상기 FID에 따라 상기 파일의 메타데이터를 조회하여 상기 파일의 버전 번호를 취득하고, 상기 파일의 버전 번호를 상기 판독될 스트립의 버전 번호로 사용하는 단계 - 상기 파일의 버전 번호는 상기 판독될 스트립이 속하는 파일의 최근 스냅샷의 스냅샷 ID에 대응함 -;
    상기 클라이언트 서버가, 상기 판독될 데이터의 오프셋 및 상기 판독될 데이터의 크기에 따라, 상기 판독될 스트립이 속하는 객체의 ID를 결정하고, 상기 판독될 스트립의 오프셋을 취득하는 단계; 및
    상기 스트립 판독 요청을 생성하는 단계를 더 포함하는 데이터 판독 방법.
  18. 제15항에 있어서,
    상기 OSD가 클라이언트 서버에 의해 전송되는 스트립 기록 요청을 수신하는 단계 전에,
    상기 클라이언트 서버가, 볼륨 판독 요청을 수신하는 단계 - 상기 볼륨 판독 요청은 볼륨 ID, 판독될 데이터의 크기 및 상기 판독될 데이터의 오프셋을 포함하고, 상기 판독될 데이터는 상기 볼륨의 일부임 -;
    상기 클라이언트 서버가, 상기 볼륨 ID에 따라, 상기 볼륨의 메타데이터를 조회하여 상기 볼륨의 버전 번호를 취득하고, 상기 볼륨의 버전 번호를 상기 판독될 스트립의 버전 번호로 사용하는 단계 - 상기 볼륨의 버전 번호는 상기 판독될 스트립이 속하는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응함 -;
    상기 클라이언트 서버가, 상기 판독될 데이터의 오프셋 및 상기 판독될 데이터의 크기에 따라, 상기 판독될 스트립이 속하는 객체의 ID를 결정하고, 상기 판독될 스트립의 오프셋을 취득하는 단계; 및
    상기 스트립 판독 요청을 생성하는 단계를 더 포함하는 데이터 판독 방법.
  19. 객체 기반 저장 기기(OSD) 및 클라이언트 서버를 포함하는 객체 저장 시스템에 적용되는 데이터 판독 방법으로서,
    상기 OSD가 상기 클라이언트 서버에 의해 전송되는 스트립 판독 요청을 수신하는 단계 - 상기 스트립 판독 요청은 판독될 스트립의 크기, 상기 판독될 스트립의 오프셋, 상기 판독될 스트립의 버전 번호 및 상기 판독될 스트립의 객체 ID를 포함하고, 상기 판독될 스트립의 버전 번호는 상기 판독될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응하고, 상기 판독될 스트립의 객체 ID는 상기 판독될 스트립이 속하는 객체의 ID임 -; 및
    상기 OSD가 상기 객체 ID 및 상기 판독될 스트립의 버전 번호를 사용하여 결정된 객체가 백업되어 있는지를 판정하는 단계; 및
    상기 객체가 백업되어 있으면, 상기 객체 ID, 상기 판독될 스트립의 버전 번호, 상기 판독될 스트립의 오프셋, 및 상기 판독될 스트립의 크기를 사용하여 결정된 데이터를 판독하고, 상기 판독된 데이터를 상기 판독될 스트립으로 사용하고, 상기 판독될 스트립을 상기 클라이언트 서버에 전송하거나; 또는 상기 객체가 백업되어 있지 않으면, 상기 판독될 스트립의 오프셋을 사용하여 결정된 저장 위치에서 상기 판독될 스트립의 객체 ID와 동일한 객체 ID를 가지고 상기 판독될 스트립의 버전 번호와 상이한 버전 번호를 가진 객체가 발견될 때까지, 객체의 스냅샷 시각의 내림차순에 따라 하나씩 검색하고, 발견된 유효한 데이터를 상기 판독될 스트립으로 사용하고, 상기 판독될 스트립을 상기 클라이언트 서버에 전송하는 단계 - 상기 객체의 버전 번호는 상기 객체가 생성되기 전에 존재하고 있는, 상기 판독될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응함 -
    를 포함하는 데이터 판독 방법.
  20. 클라이언트 서버에 의해 전송되는 스트립 기록 요청을 수신하도록 구성된 스트립 요청 수신 모듈 - 상기 스트립 기록 요청은 기록될 스트립, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋 및 상기 기록될 스트립의 객체 ID를 포함하고, 상기 기록될 스트립의 버전 번호는 상기 기록될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷(snapshot)의 스냅샷 ID에 대응하고, 상기 기록될 스트립의 오프셋은 상기 기록될 스트립이 속하는 객체 내에서의 상기 기록될 스트립의 위치를 기술하고, 상기 기록될 스트립의 객체 ID는 상기 기록될 스트립이 속하는 객체의 ID임 -; 및
    상기 객체 ID, 상기 기록될 스트립의 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 상기 기록될 스트립을 기록하도록 구성된 스트립 저장 모듈
    을 포함하는 데이터 저장 방법.
  21. 클라이언트 서버에 의해 전송되는 스트립 기록 요청을 수신하도록 구성된 스트립 요청 수신 모듈 - 상기 스트립 기록 요청은 기록될 스트립, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋 및 상기 기록될 스트립의 객체 ID를 포함하고, 상기 기록될 스트립의 버전 번호는 상기 기록될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷(snapshot)의 스냅샷 ID에 대응하고, 상기 기록될 스트립의 오프셋은 상기 기록될 스트립이 속하는 객체 내에서의 상기 기록될 스트립의 위치를 기술하고, 상기 기록될 스트립의 객체 ID는 상기 기록될 스트립이 속하는 객체의 ID임 -; 및
    상기 기록될 스트립의 버전 번호 및 상기 객체 ID를 사용하여 결정된 객체가 백업되어 있는지를 판정하도록 구성된 스트립 저장 모듈
    을 포함하고,
    상기 객체가 백업되어 있으면, 상기 스트립 저장 모듈은 추가로, 상기 기록될 스트립을 상기 객체 ID, 상기 기록될 스트립의 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록하도록 구성되거나;
    상기 객체가 백업되어 있지 않으면, 상기 스트립 저장 모듈은 추가로, 상기 기록될 스트립을 사용하여 스플라이싱된 객체를 생성한 다음, 상기 스플라이싱된 객체를 상기 기록될 스트립의 버전 번호 및 상기 객체 ID를 사용하여 결정된 저장 위치에 기록하도록 구성되는,
    를 포함하는 데이터 저장 장치.
  22. 제21항에 있어서,
    상기 스트립 저장 모듈이 추가로, 상기 기록될 스트립을 사용하여 스플라이싱된 객체를 생성하도록 구성되는 것은,
    상기 스트립 저장 모듈이, 상기 기록될 스트립의 객체 ID의 객체 세트에 속하는 백업된 객체 중에서 최근 스냅샷 시각을 가진 객체를 선택하여, 상기 기록될 스트립의 오프셋과 다른 오프셋을 가진 스트립을 취득하고, 상기 기록될 스트립 및 상기 기록될 스트립의 오프셋과 다른 오프셋을 가진 스트립을 사용하여 공동으로 상기 스플라이싱된 객체를 구성하는 것을 포함하고,
    상기 기록될 스트립의 객체 ID의 객체 세트란, 상기 데이터 저장 장치에 저장되어 있고 상기 기록될 스트립의 객체 ID과 동일한 객체 ID를 가지고 상기 기록될 스트립의 버전 번호와 상이한 버전 번호를 가진 객체의 세트인, 데이터 저장 장치.
  23. 데이터 처리 장치로서,
    클라이언트 서버에 의해 전송되는 스트립 기록 요청을 수신하도록 구성된 스트립 요청 수신 모듈 - 상기 스트립 기록 요청은 기록될 스트립, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋 및 상기 기록될 스트립의 객체 ID를 포함하고, 상기 기록될 스트립의 버전 번호는 상기 기록될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응하고, 상기 기록될 스트립의 오프셋은 상기 기록될 스트립이 속하는 객체 내에서의 상기 기록될 스트립의 위치를 기술하고, 상기 기록될 스트립의 객체 ID는 상기 기록될 스트립이 속하는 객체의 ID임 -; 및
    상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 객체 ID 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 스트립이 백업되어 있는지를 판정하고;
    상기 스트립이 백업되어 있으면, 상기 기록될 스트립을 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 객체 ID 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록하거나;
    상기 스트립이 백업되어 있지 않으면, 데이터 저장 장치 중의 기본 버전의 객체에 있고 오프셋이 상기 기록될 스트립의 오프셋이고 크기가 상기 기록될 스트립의 크기인 데이터를, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋, 및 상기 기록될 스트립의 객체 ID를 사용하여 결정된 저장 위치에 백업하고 - 상기 기본 버전의 객체의 객체 ID는 상기 기록될 스트립의 객체 ID와 동일하고, 상기 기본 버전의 객체의 버전 번호가 기본 버전 번호임 -, 상기 기록될 스트립을 상기 기록될 스트립의 객체 ID, 상기 기본 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록하도록 구성되는 스트립 저장 모듈
    을 포함하는 데이터 처리 장치.
  24. 클라이언트 서버에 의해 전송되는 스트립 기록 요청을 수신하도록 구성된 스트립 요청 수신 모듈 - 상기 스트립 기록 요청은 기록될 스트립, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋 및 상기 기록될 스트립의 객체 ID를 포함하고, 상기 기록될 스트립의 버전 번호는 상기 기록될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응하고, 상기 기록될 스트립의 오프셋은 상기 기록될 스트립이 속하는 객체 내에서의 상기 기록될 스트립의 위치를 기술하고, 상기 기록될 스트립의 객체 ID는 상기 기록될 스트립이 속하는 객체의 ID임 -; 및
    (1) 상기 기록될 스트립의 버전 번호 및 상기 객체 ID를 사용하여 결정된 객체가 백업되어 있는지를 판정하고; (2-1) 상기 객체가 백업되어 있으면, 상기 기록될 스트립을 상기 객체 ID, 상기 객체의 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록하거나; 또는 (2-2) 상기 객체가 백업되어 있지 않으면, 기본 버전의 객체에 있는 데이터를, 상기 기록될 스트립의 버전 번호 및 상기 객체 ID를 사용하여 결정된 저장 위치에 백업하도록 구성된 스트립 저장 모듈 - 상기 기본 버전의 객체의 객체 ID는 상기 기록될 스트립의 객체 ID와 동일하고, 상기 기본 버전의 객체의 버전 번호가 기본 버전 번호임 -
    을 포함하고,
    상기 스트립 저장 모듈은 추가로, 상기 기록될 스트립을 상기 객체 ID, 상기 기본 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록하도록 구성되는,
    데이터 처리 장치.
  25. 클라이언트 서버에 의해 전송되는 스트립 판독 요청을 수신하도록 구성된 스트립 요청 수신 모듈 - 상기 스트립 판독 요청은 판독될 스트립의 크기, 상기 판독될 스트립의 오프셋, 상기 판독될 스트립의 버전 번호 및 상기 판독될 스트립의 객체 ID를 포함하고, 상기 판독될 스트립의 버전 번호는 상기 판독될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응하고, 상기 판독될 스트립의 객체 ID는 상기 판독될 스트립이 속하는 객체의 ID임 -; 및
    (1) 상기 객체 ID, 상기 판독될 스트립의 버전 번호 및 상기 판독될 스트립의 오프셋을 사용하여 결정된 스트립이 백업되어 있는지를 판정하고; (2-1) 상기 스트립이 백업되어 있으면, 상기 객체 ID, 상기 판독될 스트립의 버전 번호, 상기 판독될 스트립의 오프셋, 및 상기 판독될 스트립의 크기를 사용하여 결정된 데이터를 판독하고, 상기 판독된 데이터를 상기 판독될 스트립으로 사용하여, 상기 판독될 스트립을 상기 클라이언트 서버에 전송하거나; 또는 (2-2) 상기 스트립이 백업되어 있지 않으면, 상기 판독될 스트립의 객체 ID와 동일한 객체 ID를 가지고 상기 판독될 스트립의 버전 번호와 상이한 버전 번호를 가진 객체를, 객체의 스냅샷 시각의 내림차순에 따라 하나씩, 상기 판독될 스트립의 오프셋을 사용하여 결정된 저장 위치에서 유효한 데이터를 저장하고 있는 객체가 발견될 때까지 검색하고, 상기 발견된 유효한 데이터를 상기 판독될 스트립으로 사용하고, 상기 판독될 스트립을 상기 클라이언트 서버에 전송하도록 구성된 스트립 판독 모듈 - 상기 객체의 버전 번호는 상기 객체가 생성되기 전에 존재하고 있는, 상기 판독될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응함 -
    을 포함하는 데이터 판독 장치.
  26. 제25항에 있어서,
    상기 객체의 스냅샷 시각의 내림차순은,
    상기 데이터 판독 장치의 기록 모드가 ROW이면, 상기 객체의 스냅샷 시각의 내림차순이 버전 번호의 내림차순이거나;
    상기 데이터 판독 장치의 기록 모드가 COW이면, 상기 객체의 스냅샷 시각의 내림차순이 버전 번호의 오름차순인 것을 포함하는, 데이터 판독 장치.
  27. 클라이언트 서버에 의해 전송되는 스트립 판독 요청을 수신하도록 구성된 스트립 요청 수신 모듈 - 상기 스트립 판독 요청은 판독될 스트립의 크기, 상기 판독될 스트립의 오프셋, 상기 판독될 스트립의 버전 번호 및 상기 판독될 스트립의 객체 ID를 포함하고, 상기 판독될 스트립의 버전 번호는 상기 판독될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응하고, 상기 판독될 스트립의 객체 ID는 상기 판독될 스트립이 속하는 객체의 ID임 -; 및
    (1) 상기 객체 ID 및 상기 판독될 스트립의 버전 번호를 사용하여 결정된 객체가 백업되어 있는지를 판정하고; (2-1)상기 객체가 백업되어 있으면, 상기 객체 ID, 상기 판독될 스트립의 버전 번호, 상기 판독될 스트립의 오프셋, 및 상기 판독될 스트립의 크기를 사용하여 결정된 데이터를 판독하고, 상기 판독된 데이터를 상기 판독될 스트립으로 사용하여, 상기 판독될 스트립을 상기 클라이언트 서버에 전송하거나; 또는 (2-2) 상기 객체가 백업되어 있지 않으면, 상기 판독될 스트립의 객체 ID와 동일한 객체 ID를 가지고 상기 판독될 스트립의 버전 번호와 상이한 버전 번로를 가진 객체를, 객체의 스냅샷 시각의 내림차순에 따라 하나씩, 상기 판독될 스트립의 오프셋을 사용하여 결정된 저장 위치에서 유효한 데이터를 저장하고 있는 객체가 발견될 때까지 검색하고, 상기 발견된 유효한 데이터를 상기 판독될 스트립으로 사용하고, 상기 판독될 스트립을 상기 클라이언트 서버에 전송하도록 구성된 스트립 판독 모듈 - 상기 객체의 버전 번호는 상기 객체가 생성되기 전에 존재하고 있는, 상기 판독될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응함 -
    을 포함하는 데이터 판독 장치.
  28. 클라이언트 서버와 객체 저장 기기를 포함하는 데이터 저장 시스템으로서,
    상기 클라이언트 서버는,
    파일 기록 요청을 수신하고 - 상기 파일 기록 요청은 기록될 데이터, 상기 기록될 데이터의 오프셋, 및 파일명을 포함하고, 상기 기록될 데이터는 상기 파일의 일부임 -;
    상기 파일명에 따라 파일 식별자(FID)를 취득하고, 상기 FID에 따라 상기 파일의 메타데이터를 조회하여 상기 파일의 버전 번호를 취득하며 - 상기 파일의 버전 번호는 상기 파일의 최근 스냅샷의 스냅샷 ID에 대응함 -;
    상기 기록될 데이터의 오프셋 및 상기 기록될 데이터의 크기에 따라, 상기 기록될 데이터를 기록될 스트립을 포함하는 복수의 스트립으로 분할하고, 상기 기록될 스트립이 속하는 객체의 ID를 결정하고, 상기 기록될 스트립의 오프셋을 취득하며;
    스트립 기록 요청을 생성하고 상기 스트립 기록 요청을 상기 객체 저장 기기에 전송하도록 구성되며;
    상기 객체 저장 기기는,
    스트립 기록 요청을 수신하고 - 상기 스트립 기록 요청은 기록될 스트립, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋 및 상기 기록될 스트립의 객체 ID를 포함하고, 상기 기록될 스트립의 버전 번호는 상기 기록될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응하고, 상기 기록될 스트립의 오프셋은 상기 기록될 스트립이 속하는 객체 내에서의 상기 기록될 스트립의 위치를 기술하고, 상기 기록될 스트립의 객체 ID는 상기 기록될 스트립이 속하는 객체의 ID임 -;
    상기 기록될 스트립을 상기 객체 ID, 상기 기록될 스트립의 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록하도록 구성되는,
    데이터 저장 시스템.
  29. 제28항에 있어서,
    상기 클라이언트 서버는 추가로,
    상기 스트립 기록 요청을 전송하기 전에, 상기 기록될 스트립이 속하는 파일의 스냅샷을 획득하여, 상기 최근 스냅샷의 스냅샷 ID을 생성하고;
    상기 최근 스냅샷의 스냅샷 ID에 따라 상기 기록될 스트립의 버전 번호를 생성하고;
    상기 기록될 스트립의 버전 번호를 상기 파일의 메타데이터로 갱신하도록 구성되는, 데이터 저장 시스템.
  30. 클라이언트 서버와 객체 저장 기기를 포함하는 데이터 저장 시스템으로서,
    상기 클라이언트 서버는,
    볼륨 기록 요청을 수신하고 - 상기 볼륨 기록 요청은 기록될 데이터, 상기 기록될 데이터의 오프셋, 및 볼륨 식별자(ID)를 포함하고, 상기 기록될 데이터는 볼륨의 일부임 -;
    상기 볼륨 ID에 따라 상기 볼륨의 메타데이터를 조회하여 상기 볼륨의 버전 번호를 취득하고 - 상기 볼륨의 버전 번호는 상기 볼륨의 최근 스냅샷의 스냅샷 ID에 대응함 -;
    상기 기록될 데이터의 오프셋 및 상기 기록될 데이터의 크기에 따라, 상기 기록될 데이터를 기록될 스트립을 포함하는 복수의 스트립으로 분할하고, 상기 기록될 스트립이 속하는 객체의 ID를 결정하고, 상기 기록될 스트립의 오프셋을 취득하며;
    스트립 기록 요청을 생성하고 상기 스트립 기록 요청을 상기 객체 저장 기기에 전송하도록 구성되며;
    상기 객체 저장 기기는,
    상기 스트립 기록 요청을 수신하고 - 상기 스트립 기록 요청은 기록될 스트립, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋 및 상기 기록될 스트립의 객체 ID를 포함하고, 상기 볼륨의 버전 번호는 상기 기록될 스트립의 버전 번호이고, 상기 기록될 스트립의 오프셋은 상기 기록될 스트립이 속하는 객체 내에서의 상기 기록될 스트립의 위치를 기술하고, 상기 기록될 스트립의 객체 ID는 상기 기록될 스트립이 속하는 객체의 ID임 -;
    상기 기록될 스트립을 상기 객체 ID, 상기 기록될 스트립의 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록하도록 구성되는,
    데이터 저장 시스템.
  31. 제30항에 있어서,
    상기 클라이언트 서버는 추가로,
    상기 스트립 기록 요청을 전송하기 전에, 상기 기록될 스트립이 속하는 볼륨의 스냅샷을 획득하여, 상기 최근 스냅샷의 스냅샷 ID을 생성하고;
    상기 최근 스냅샷의 스냅샷 ID에 따라 상기 기록될 스트립의 버전 번호를 생성하고;
    상기 기록될 스트립의 버전 번호를 상기 볼륨의 메타데이터로 갱신하도록 구성되는, 데이터 저장 시스템.
  32. 클라이언트 서버와 객체 저장 기기를 포함하는 데이터 저장 시스템으로서,
    상기 클라이언트 서버는,
    파일 기록 요청을 수신하고 - 상기 파일 기록 요청은 기록될 데이터, 상기 기록될 데이터의 오프셋, 및 파일명을 포함하고, 상기 기록될 데이터는 상기 파일의 일부임 -;
    상기 파일명에 따라 파일 식별자(FID)를 취득하고, 상기 FID에 따라 상기 파일의 메타데이터를 조회하여 상기 파일의 버전 번호를 취득하며 - 상기 파일의 버전 번호는 상기 파일의 최근 스냅샷의 스냅샷 ID에 대응함 -;
    상기 기록될 데이터의 오프셋 및 상기 기록될 데이터의 크기에 따라, 상기 기록될 데이터를 기록될 스트립을 포함하는 복수의 스트립으로 분할하고, 상기 기록될 스트립이 속하는 객체의 ID를 결정하고, 상기 기록될 스트립의 오프셋을 취득하며;
    스트립 기록 요청을 생성하고 상기 스트립 기록 요청을 상기 객체 저장 기기에 전송하도록 구성되며;
    상기 객체 저장 기기는,
    상기 스트립 기록 요청을 수신하고 - 상기 스트립 기록 요청은 기록될 스트립, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋 및 상기 기록될 스트립의 객체 ID를 포함하고, 상기 기록될 스트립의 버전 번호는 상기 기록될 스트립이 속하는 파일의 최근 스냅샷의 스냅샷 ID에 대응하고, 상기 기록될 스트립의 오프셋은 상기 기록될 스트립이 속하는 객체 내에서의 상기 기록될 스트립의 위치를 기술하고, 상기 기록될 스트립의 객체 ID는 상기 기록될 스트립이 속하는 객체의 ID임 -;
    상기 기록될 스트립의 버전 번호 및 상기 객체 ID를 사용하여 결정된 객체가 백업되어 있는지를 판정하고;
    상기 객체가 백업되어 있으면, 상기 기록될 스트립을 상기 객체 ID, 상기 객체의 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록하거나; 또는 상기 객체가 백업되어 있지 않으면, 상기 기록될 스트립을 사용하여 스플라이싱된 객체를 생성한 다음, 상기 스플라이싱된 객체를 상기 기록될 스트립의 버전 번호 및 상기 객체 ID를 사용하여 결정된 저장 위치에 기록하도록 구성되는,
    데이터 저장 시스템.
  33. 제32항에 있어서,
    상기 객체 저장 기기가 상기 기록될 스트립을 사용하여 스플라이싱된 객체를 생성하도록 구성되는 것은,
    상기 기록될 스트립의 객체 ID의 객체 세트에 속하는 백업된 객체 중에서 최근 스냅샷 시각을 가진 객체를 선택하여, 상기 기록될 스트립의 오프셋과 다른 오프셋을 가진 스트립을 취득하고, 상기 기록될 스트립 및 상기 기록될 스트립의 오프셋과 다른 오프셋을 가진 스트립을 사용하여 공동으로 상기 스플라이싱된 객체를 구성하는 것을 포함하고,
    상기 기록될 스트립의 객체 ID과 동일한 객체 ID를 가지고 상기 기록될 스트립의 버전 번호와 다른 버전을 가진, 상기 객체 저장 기기에 저장되어 있는 객체의 세트를 상기 기록될 스트립의 객체 ID의 객체 세트라고 하는, 데이터 저장 시스템.
  34. 클라이언트 서버와 객체 저장 기기를 포함하는 데이터 저장 시스템으로서,
    상기 클라이언트 서버는,
    볼륨 기록 요청을 수신하고 - 상기 볼륨 기록 요청은 기록될 데이터, 상기 기록될 데이터의 오프셋, 및 볼륨 식별자(ID)를 포함하고, 상기 기록될 데이터는 상기 볼륨의 일부임 -;
    상기 볼륨 ID에 따라 상기 볼륨의 메타데이터를 조회하여 상기 볼륨의 버전 번호를 취득하고 - 상기 볼륨의 버전 번호는 상기 볼륨의 최근 스냅샷의 스냅샷 ID에 대응함 -;
    상기 기록될 데이터의 오프셋 및 상기 기록될 데이터의 크기에 따라, 기록될 데이터를 기록될 스트립을 포함하는 복수의 스트립으로 분할하고, 상기 기록될 스트립이 속하는 객체의 ID를 결정하고, 상기 기록될 스트립의 오프셋을 취득하며;
    스트립 기록 요청을 생성하고 상기 스트립 기록 요청을 상기 객체 저장 기기에 전송하도록 구성되며;
    상기 객체 저장 기기는,
    스트립 기록 요청을 수신하고 - 상기 스트립 기록 요청은 기록될 스트립, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋 및 상기 기록될 스트립의 객체 ID를 포함하고, 상기 기록될 스트립의 버전 번호는 상기 기록될 스트립이 속하는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응하고, 상기 기록될 스트립의 오프셋은 상기 기록될 스트립이 속하는 객체 내에서의 상기 기록될 스트립의 위치를 기술하고, 상기 기록될 스트립의 객체 ID는 상기 기록될 스트립이 속하는 객체의 ID임 -;
    상기 기록될 스트립의 버전 번호 및 상기 객체 ID를 사용하여 결정된 객체가 백업되어 있는지를 판정하고;
    상기 객체가 백업되어 있으면, 상기 기록될 스트립을 상기 객체 ID, 상기 객체의 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록하거나; 또는
    상기 객체가 백업되어 있지 않으면, 상기 기록될 스트립을 사용하여 스플라이싱된 객체를 생성한 다음, 상기 스플라이싱된 객체를 상기 기록될 스트립의 버전 번호 및 상기 객체 ID를 사용하여 결정된 저장 위치에 기록하도록 구성되는,
    데이터 저장 시스템.
  35. 제34항에 있어서,
    상기 객체 저장 기기가 상기 기록될 스트립을 사용하여 스플라이싱된 객체를 생성하도록 구성되는 것은,
    상기 기록될 스트립의 객체 ID의 객체 세트에 속하는 백업된 객체 중에서 최근 스냅샷 시각을 가진 객체를 선택하여, 상기 기록될 스트립의 오프셋과 다른 오프셋을 가진 스트립을 취득하고, 상기 기록될 스트립 및 상기 기록될 스트립의 오프셋과 다른 오프셋을 가진 스트립을 사용하여 공동으로 상기 스플라이싱된 객체를 구성하는 것을 포함하고,
    상기 기록될 스트립의 객체 ID의 객체 세트란, 상기 객체 저장 기기에 저장되어 있고 상기 기록될 스트립의 객체 ID과 동일한 객체 ID를 가지고 상기 기록될 스트립의 버전 번호와 상이한 버전 번호를 가진 객체의 세트인, 데이터 저장 시스템.
  36. 클라이언트 서버와 객체 저장 기기를 포함하는 데이터 판독 시스템으로서,
    상기 클라이언트 서버는,
    파일 판독 요청을 수신하고 - 상기 파일 판독 요청은 파일명, 판독될 데이터의 크기 및 상기 판독될 데이터의 오프셋을 포함하고, 상기 판독될 데이터는 상기 파일의 일부임 -;
    상기 파일명에 따라 파일 식별자(FID)를 취득하고, 상기 FID에 따라 상기 파일의 메타데이터를 조회하여 상기 파일의 버전 번호를 취득하며 - 상기 파일의 버전 번호는 상기 파일의 최근 스냅샷의 스냅샷 ID에 대응함 -;
    상기 판독될 데이터의 오프셋 및 상기 판독될 데이터의 크기에 따라, 판독될 스트립이 속하는 객체의 ID를 결정하고, 상기 판독될 스트립의 오프셋을 취득하며;
    스트립 판독 요청을 생성하고 상기 스트립 판독 요청을 전송하도록 구성되며;
    상기 객체 저장 기기는,
    스트립 판독 요청을 수신하고 - 상기 스트립 판독 요청은 판독될 스트립의 크기, 상기 판독될 스트립의 오프셋, 상기 판독될 스트립의 버전 번호, 및 상기 판독될 스트립의 객체 ID를 포함하고, 상기 판독될 스트립의 버전 번호는 상기 판독될 스트립이 속하는 파일의 최근 스냅샷의 스냅샷 ID에 대응하고, 상기 판독될 스트립의 객체 ID는 상기 판독될 스트립이 속하는 객체의 ID임 -;
    상기 객체 ID, 상기 판독될 스트립의 버전 번호 및 상기 판독될 스트립의 오프셋을 사용하여 결정된 스트립이 백업되어 있는지를 판정하고;
    상기 스트립이 백업되어 있으면, 상기 객체 ID, 상기 판독될 스트립의 버전 번호, 상기 판독될 스트립의 오프셋, 및 상기 판독될 스트립의 크기를 사용하여 결정된 데이터를 판독하고, 상기 판독된 데이터를 상기 판독될 스트립으로 사용하고, 상기 판독될 스트립을 상기 클라이언트 서버에 전송하거나; 또는 상기 스트립이 백업되어 있지 않으면, 상기 판독될 스트립의 객체 ID와 동일한 객체 ID를 가지고 상기 판독될 스트립의 버전 번호와 상이한 버전 번호를 가진 객체를, 객체의 스냅샷 시각의 내림차순에 따라 하나씩, 상기 판독될 스트립의 오프셋을 사용하여 결정된 저장 위치에서 유효한 데이터를 저장하고 있는 객체가 발견될 때까지 검색하고, 상기 발견된 유효한 데이터를 상기 판독될 스트립으로 사용하고, 상기 판독될 스트립을 상기 클라이언트 서버에 전송하도록 구성되는 - 상기 객체의 버전 번호는 상기 객체가 생성되기 전에 존재하고 있는, 상기 판독될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응함 -
    데이터 저장 시스템.
  37. 클라이언트 서버와 객체 저장 기기를 포함하는 데이터 판독 시스템으로서,
    상기 클라이언트 서버는,
    볼륨 판독 요청을 수신하고 - 상기 볼륨 판독 요청은 볼륨 ID, 판독될 데이터의 크기 및 상기 판독될 데이터의 오프셋을 포함하고, 상기 판독될 데이터는 상기 볼륨의 일부임 -;
    상기 볼륨 ID에 따라 상기 볼륨의 메타데이터를 조회하여 상기 볼륨의 버전 번호를 취득하고 - 상기 볼륨의 버전 번호는 상기 볼륨의 최근 스냅샷의 스냅샷 ID에 대응함 -;
    상기 판독될 데이터의 오프셋 및 상기 판독될 데이터의 크기에 따라, 판독될 스트립이 속하는 객체의 ID를 결정하고, 상기 판독될 스트립의 오프셋을 취득하며;
    스트립 판독 요청을 생성하고 상기 스트립 판독 요청을 전송하도록 구성되며;
    상기 객체 저장 기기는,
    상기 스트립 판독 요청을 수신하고 - 상기 스트립 판독 요청은 상기 판독될 스트립의 크기, 상기 판독될 스트립의 오프셋, 상기 판독될 스트립의 버전 번호 및 상기 판독될 스트립의 객체 ID를 포함하고, 상기 판독될 스트립의 버전 번호는 상기 판독될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응하고, 상기 판독될 스트립의 객체 ID는 상기 판독될 스트립이 속하는 객체의 ID임 -;
    상기 객체 ID, 상기 판독될 스트립의 버전 번호 및 상기 판독될 스트립의 오프셋을 사용하여 결정된 스트립이 백업되어 있는지를 판정하고;
    상기 스트립이 백업되어 있으면, 상기 객체 ID, 상기 판독될 스트립의 버전 번호, 상기 판독될 스트립의 오프셋, 및 상기 판독될 스트립의 크기를 사용하여 결정된 데이터를 판독하고, 상기 판독된 데이터를 상기 판독될 스트립으로 사용하여, 상기 판독될 스트립을 상기 클라이언트 서버에 전송하거나; 또는 상기 스트립이 백업되어 있지 않으면, 상기 판독될 스트립의 객체 ID와 동일한 객체 ID를 가지고 상기 판독될 스트립의 버전 번호와 상이한 버전 번호를 가진 객체를, 객체의 스냅샷 시각의 내림차순에 따라 하나씩, 상기 판독될 스트립의 오프셋을 사용하여 결정된 저장 위치에서 상기 판독될 스트립의 오프셋을 사용하여 결정된 저장 위치에서 유효한 데이터를 저장하고 있는 객체가 발견될 때까지 검색하고, 상기 발견된 유효한 데이터를 상기 판독될 스트립으로 사용하고, 상기 판독될 스트립을 상기 클라이언트 서버에 전송하도록 구성되는 - 상기 객체의 버전 번호는 상기 객체가 생성되기 전에 존재하고 있는, 상기 판독될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응함 -
    데이터 판독 시스템.
  38. 프로세서와, 상기 프로세서에 연결되는 저장 매체 및 인터페이스를 포함하는 객체 저장 기기로서,
    상기 인터페이스는 클라이언트 서버에 의해 전송되는 스트립 기록 요청을 수신하도록 구성되며, 상기 스트립 기록 요청은 기록될 스트립, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋 및 상기 기록될 스트립의 객체 ID를 포함하고, 상기 기록될 스트립의 버전 번호는 상기 기록될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷(snapshot)의 스냅샷 ID에 대응하고, 상기 기록될 스트립의 오프셋은 상기 기록될 스트립이 속하는 객체 내에서의 상기 기록될 스트립의 위치를 기술하고, 상기 기록될 스트립의 객체 ID는 상기 기록될 스트립이 속하는 객체의 ID이며;
    상기 저장 매체는 컴퓨터 프로그램을 저장하고;
    상기 프로세서는 상기 컴퓨터 프로그램을 실행함으로써, 다음 단계:
    상기 객체 ID, 상기 기록될 스트립의 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 상기 기록될 스트립을 기록하는 단계를 실행하는,
    데이터 저장 기기.
  39. 프로세서와, 상기 프로세서에 연결되는 저장 매체 및 인터페이스를 포함하는 객체 저장 기기로서,
    상기 인터페이스는 클라이언트 서버에 의해 전송되는 스트립 기록 요청을 수신하도록 구성되며, 상기 스트립 기록 요청은 기록될 스트립, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋 및 상기 기록될 스트립의 객체 ID를 포함하고, 상기 기록될 스트립의 버전 번호는 상기 기록될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷(snapshot)의 스냅샷 ID에 대응하고, 상기 기록될 스트립의 오프셋은 상기 기록될 스트립이 속하는 객체 내에서의 상기 기록될 스트립의 위치를 기술하고, 상기 기록될 스트립의 객체 ID는 상기 기록될 스트립이 속하는 객체의 ID이며;
    상기 저장 매체는 컴퓨터 프로그램을 저장하고;
    상기 프로세서는 상기 컴퓨터 프로그램을 실행함으로써, 다음 단계:
    상기 기록될 스트립의 버전 번호 및 상기 객체 ID를 사용하여 결정된 객체가 백업되어 있는지를 판정하는 단계; 및
    상기 객체가 백업되어 있으면, 상기 기록될 스트립을 상기 객체 ID, 상기 기록될 스트립의 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록하거나; 또는 상기 객체가 백업되어 있지 않으면, 상기 기록될 스트립을 사용하여 스플라이싱된 객체를 생성한 다음, 상기 스플라이싱된 객체를 상기 기록될 스트립의 버전 번호 및 상기 객체 ID를 사용하여 결정된 저장 위치에 기록하는 단계를 실행하는,
    객체 저장 기기.
  40. 제39항에 있어서,
    상기 프로세서가 상기 기록될 스트립을 사용하여 스플라이싱된 객체를 생성하는 것은,
    상기 프로세서가, 상기 기록될 스트립의 객체 ID의 객체 세트에 속하는 백업된 객체 중에서 최근 스냅샷 시각을 가진 객체를 선택하여, 상기 기록될 스트립의 오프셋과 다른 오프셋을 가진 스트립을 취득하고, 상기 기록될 스트립 및 상기 기록될 스트립의 오프셋과 다른 오프셋을 가진 스트립을 사용하여 공동으로 상기 스플라이싱된 객체를 구성하도록 구성되는 것을 포함하고,
    상기 기록될 스트립의 객체 ID의 객체 세트란, 상기 객체 저장 기기에 저장되어 있고 상기 기록될 스트립의 객체 ID과 동일한 객체 ID를 가지고 상기 기록될 스트립의 버전 번호와 상이한 버전 번호를 가진 객체의 세트인, 객체 저장 기기.
  41. 프로세서와, 상기 프로세서에 연결되는 저장 매체 및 인터페이스를 포함하는 객체 저장 기기로서,
    상기 인터페이스는 클라이언트 서버에 의해 전송되는 스트립 기록 요청을 수신하도록 구성되며, 상기 스트립 기록 요청은 기록될 스트립, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋 및 상기 기록될 스트립의 객체 ID를 포함하고, 상기 기록될 스트립의 버전 번호는 상기 기록될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응하고, 상기 기록될 스트립의 오프셋은 상기 기록될 스트립이 속하는 객체 내에서의 상기 기록될 스트립의 위치를 기술하고, 상기 기록될 스트립의 객체 ID는 상기 기록될 스트립이 속하는 객체의 ID이며;
    상기 저장 매체는 컴퓨터 프로그램을 저장하고;
    상기 프로세서는 상기 컴퓨터 프로그램을 실행함으로써, 다음 단계:
    상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 객체 ID, 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 스트립이 백업되어 있는지를 판정하는 단계; 및
    상기 스트립이 백업되어 있으면, 상기 기록될 스트립을 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 객체 ID 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록하고; 또는 상기 스트립이 백업되어 있지 않으면, 상기 기록될 스트립의 오프셋과 동일한 오프셋을 가지고 상기 기록될 스트립의 크기와 동일한 크기를 가진, 상기 객체 저장 기기 중의 기본 버전의 객체에 있는 데이터를, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋, 및 상기 기록될 스트립의 객체 ID를 사용하여 결정된 저장 위치에 백업하고 - 상기 기본 버전의 객체의 객체 ID는 상기 기록될 스트립의 객체 ID와 동일하고, 상기 기본 버전의 객체의 버전 번호가 기본 버전 번호임 -, 상기 기록될 스트립을 상기 기록될 스트립의 객체 ID, 상기 기본 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록하는 단계를 실행하는,
    객체 저장 기기.
  42. 프로세서와, 상기 프로세서에 연결되는 저장 매체 및 인터페이스를 포함하는 객체 저장 기기로서,
    상기 인터페이스는 클라이언트 서버에 의해 전송되는 스트립 기록 요청을 수신하도록 구성되며, 상기 스트립 기록 요청은 기록될 스트립, 상기 기록될 스트립의 버전 번호, 상기 기록될 스트립의 오프셋 및 상기 기록될 스트립의 객체 ID를 포함하고, 상기 기록될 스트립의 버전 번호는 상기 기록될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응하고, 상기 기록될 스트립의 오프셋은 상기 기록될 스트립이 속하는 객체 내에서의 상기 기록될 스트립의 위치를 기술하고, 상기 기록될 스트립의 객체 ID는 상기 기록될 스트립이 속하는 객체의 ID이며;
    상기 저장 매체는 컴퓨터 프로그램을 저장하고;
    상기 프로세서는 상기 컴퓨터 프로그램을 실행함으로써, 다음 단계:
    상기 기록될 스트립의 버전 번호 및 상기 객체 ID를 사용하여 결정된 객체가 백업되어 있는지를 판정하는 단계; 및
    상기 객체가 백업되어 있으면, 상기 객체 저장 기기가, 상기 기록될 스트립을 상기 객체 ID, 상기 객체의 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록하거나; 상기 객체가 백업되어 있지 않으면, 상기 객체 저장 기기가, 기본 버전의 객체에 있는 데이터를, 상기 기록될 스트립의 버전 번호 및 상기 객체 ID를 사용하여 결정된 저장 위치에 백업하고 - 상기 기본 버전의 객체의 객체 ID는 상기 기록될 스트립의 객체 ID와 동일하고, 상기 기본 버전의 객체의 버전 번호가 기본 버전 번호임 - , 상기 객체 저장 기기가, 상기 기록될 스트립을 상기 객체 ID, 상기 기본 버전 번호 및 상기 기록될 스트립의 오프셋을 사용하여 결정된 저장 위치에 기록하는 단계를 실행하는,
    객체 저장 기기.
  43. 프로세서와, 상기 프로세서에 연결되는 저장 매체 및 인터페이스를 포함하는 객체 저장 기기로서,
    상기 인터페이스는 클라이언트 서버에 의해 전송되는 스트립 판독 요청을 수신하도록 구성되고, 상기 스트립 판독 요청은 판독될 스트립의 크기, 상기 판독될 스트립의 오프셋, 상기 판독될 스트립의 버전 번호 및 상기 판독될 스트립의 객체 ID를 포함하고, 상기 판독될 스트립의 버전 번호는 상기 판독될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응하고, 상기 판독될 스트립의 객체 ID는 상기 판독될 스트립이 속하는 객체의 ID이며;
    상기 저장 매체는 컴퓨터 프로그램을 저장하고;
    상기 프로세서는 상기 컴퓨터 프로그램을 실행하여 다음 단계:
    상기 객체 ID, 상기 판독될 스트립의 버전 번호 및 상기 판독될 스트립의 오프셋을 사용하여 결정된 스트립이 백업되어 있는지를 판정하는 단계; 및
    상기 스트립이 백업되어 있으면, 상기 객체 ID, 상기 판독될 스트립의 버전 번호, 상기 판독될 스트립의 오프셋, 및 상기 판독될 스트립의 크기를 사용하여 결정된 데이터를 판독하고, 상기 판독된 데이터를 상기 판독될 스트립으로 사용하여, 상기 판독될 스트립을 상기 클라이언트 서버에 전송하거나; 또는 상기 스트립이 백업되어 있지 않으면, 상기 판독될 스트립의 객체 ID와 동일한 객체 ID를 가지고 상기 판독될 스트립의 버전 번호와 상이한 버전 번호를 가진 객체를, 객체의 스냅샷 시각의 내림차순에 따라 하나씩, 상기 판독될 스트립의 오프셋을 사용하여 결정된 저장 위치에서 유효한 데이터를 저장하고 있는 객체가 발견될 때까지 검색하고, 상기 발견된 유효한 데이터를 상기 판독될 스트립으로 사용하고, 상기 판독될 스트립을 상기 클라이언트 서버에 전송하는 단계 - 상기 객체의 버전 번호는 상기 객체가 생성되기 전에 존재하고 있는, 상기 판독될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응함 -를 실행하는,
    객체 저장 기기.
  44. 제43항에 있어서,
    상기 객체의 스냅샷 시각의 내림차순은,
    상기 객체 저장 기기의 기록 모드가 ROW이면, 상기 객체의 스냅샷 시각의 내림차순이 버전 번호의 내림차순이거나;
    상기 객체 저장 기기의 기록 모드가 COW이면, 상기 객체의 스냅샷 시각의 내림차순이 버전 번호의 오름차순인, 객체 저장 기기.
  45. 프로세서와, 상기 프로세서에 연결되는 저장 매체 및 인터페이스를 포함하는 객체 저장 기기로서,
    상기 인터페이스는 클라이언트 서버에 의해 전송되는 스트립 판독 요청을 수신하도록 구성되고, 상기 스트립 판독 요청은 판독될 스트립의 크기, 상기 판독될 스트립의 오프셋, 상기 판독될 스트립의 버전 번호 및 상기 판독될 스트립의 객체 ID를 포함하고, 상기 판독될 스트립의 버전 번호는 상기 판독될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응하고, 상기 판독될 스트립의 객체 ID는 상기 판독될 스트립이 속하는 객체의 ID이며;
    상기 저장 매체는 컴퓨터 프로그램을 저장하고;
    상기 프로세서는 상기 컴퓨터 프로그램을 실행하여 다음 단계:
    상기 객체 ID 및 상기 판독될 스트립의 버전 번호를 사용하여 결정된 객체가 백업되어 있는지를 판정하는 단계;
    상기 객체가 백업되어 있으면, 상기 객체 ID, 상기 판독될 스트립의 버전 번호, 상기 판독될 스트립의 오프셋, 및 상기 판독될 스트립의 크기를 사용하여 결정된 데이터를 판독하고, 상기 판독된 데이터를 상기 판독될 스트립으로 사용하여, 상기 판독될 스트립을 상기 클라이언트 서버에 전송하거나; 또는 상기 객체가 백업되어 있지 않으면, 상기 판독될 스트립의 객체 ID와 동일한 객체 ID를 가지고 버전 번호가 상기 판독될 스트립의 버전 번호와 상이한 버전 번호를 가진 객체를, 객체의 스냅샷 시각의 내림차순에 따라 하나씩, 상기 판독될 스트립의 오프셋을 사용하여 결정된 저장 위치에서 유효한 데이터를 저장하고 있는 객체가 발견될 때까지 검색하고, 상기 발견된 유효한 데이터를 상기 판독될 스트립으로 사용하고, 상기 판독될 스트립을 상기 클라이언트 서버에 전송하는 단계 - 상기 객체의 버전 번호는 상기 객체가 생성되기 전에 존재하고 있는, 상기 판독될 스트립이 속하는 파일 또는 볼륨의 최근 스냅샷의 스냅샷 ID에 대응함 -를 실행하는,
    객체 저장 기기.
KR1020177012992A 2014-12-27 2014-12-27 데이터 처리 방법, 장치 및 시스템 KR102030786B1 (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2014/095223 WO2016101283A1 (zh) 2014-12-27 2014-12-27 一种数据处理方法装置及系统

Publications (2)

Publication Number Publication Date
KR20170068564A KR20170068564A (ko) 2017-06-19
KR102030786B1 true KR102030786B1 (ko) 2019-10-10

Family

ID=56149009

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177012992A KR102030786B1 (ko) 2014-12-27 2014-12-27 데이터 처리 방법, 장치 및 시스템

Country Status (10)

Country Link
US (3) US20170295239A1 (ko)
EP (1) EP3203386A4 (ko)
JP (1) JP6607941B2 (ko)
KR (1) KR102030786B1 (ko)
CN (2) CN105993013B (ko)
AU (1) AU2014415350B2 (ko)
BR (1) BR112017011412B1 (ko)
CA (1) CA2965715C (ko)
SG (1) SG11201703410YA (ko)
WO (1) WO2016101283A1 (ko)

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108021333B (zh) * 2016-11-03 2021-08-24 阿里巴巴集团控股有限公司 随机读写数据的系统、装置及方法
US10733305B2 (en) 2016-11-15 2020-08-04 StorageOS Limited System and method for implementing cryptography in a storage system
US10353632B2 (en) 2016-11-15 2019-07-16 StorageOS Limited System and method for storing data blocks in a volume of data
US10691350B2 (en) 2016-11-15 2020-06-23 StorageOS Limited Method for provisioning a volume of data including placing data based on rules associated with the volume
WO2018119998A1 (zh) * 2016-12-30 2018-07-05 华为技术有限公司 一种快照回滚方法、装置、存储控制器和系统
CN106708443B (zh) * 2017-01-03 2020-01-17 北京百度网讯科技有限公司 数据读写方法及装置
US10652330B2 (en) * 2017-01-15 2020-05-12 Google Llc Object storage in cloud with reference counting using versions
JP6724252B2 (ja) * 2017-04-14 2020-07-15 華為技術有限公司Huawei Technologies Co.,Ltd. データ処理方法、記憶システムおよび切り換え装置
US10547683B2 (en) * 2017-06-26 2020-01-28 Christopher Squires Object based storage systems that utilize direct memory access
US20190114232A1 (en) * 2017-10-17 2019-04-18 Christopher Squires Local and offloaded snapshots for volatile memory
CN110309100B (zh) * 2018-03-22 2023-05-23 腾讯科技(深圳)有限公司 一种快照对象生成方法和装置
CN110837479B (zh) * 2018-08-17 2023-09-01 华为云计算技术有限公司 数据处理方法、相关设备及计算机存储介质
CN110874181B (zh) * 2018-08-31 2021-12-17 杭州海康威视系统技术有限公司 一种数据更新方法及更新装置
CN109634526B (zh) * 2018-12-11 2022-04-22 浪潮(北京)电子信息产业有限公司 一种基于对象存储的数据操作方法及相关装置
CN109669634B (zh) * 2018-12-17 2022-03-04 浪潮电子信息产业股份有限公司 一种数据落盘方法、装置、设备及可读存储介质
EP3889752B1 (en) * 2018-12-25 2024-09-25 Huawei Cloud Computing Technologies Co., Ltd. Data storage method and apparatus in distributed storage system, and computer program product
US11163730B2 (en) * 2019-05-13 2021-11-02 Microsoft Technology Licensing, Llc Hard link operations for files in a file system
CN110674518A (zh) * 2019-09-26 2020-01-10 海南新软软件有限公司 一种设备标识信息生成方法、装置及系统
CN110769062A (zh) * 2019-10-29 2020-02-07 广东睿江云计算股份有限公司 一种分布式存储的异地灾备方法
CN112835511B (zh) * 2019-11-25 2022-09-20 浙江宇视科技有限公司 分布式存储集群的数据写入方法、装置、设备和介质
CN111064801B (zh) * 2019-12-26 2023-06-13 浪潮电子信息产业股份有限公司 一种基于分布式文件系统的osd通信方法、装置及介质
US11609834B2 (en) * 2020-01-21 2023-03-21 Druva Inc. Event based aggregation for distributed scale-out storage systems
CN111352594B (zh) * 2020-03-12 2023-06-20 湖州旻合科技有限公司 eFuse中写入数据、读取数据的方法及装置
CN111857602B (zh) * 2020-07-31 2022-10-28 重庆紫光华山智安科技有限公司 数据处理方法、装置、数据节点及存储介质
CN111966845B (zh) * 2020-08-31 2023-11-17 重庆紫光华山智安科技有限公司 图片管理方法、装置、存储节点及存储介质
CN112261097B (zh) * 2020-10-15 2023-11-24 科大讯飞股份有限公司 用于分布式存储系统的对象定位方法及电子设备
CN114697351B (zh) * 2020-12-30 2023-03-10 华为技术有限公司 一种存储管理方法、设备及介质
CN113821377B (zh) * 2021-08-27 2023-12-22 济南浪潮数据技术有限公司 一种分布式存储集群的数据恢复方法、系统及存储介质
CN113742140B (zh) * 2021-11-03 2022-03-18 统信软件技术有限公司 一种文件备份方法、装置及计算设备
CN115981875B (zh) * 2023-03-21 2023-08-25 人工智能与数字经济广东省实验室(广州) 内存存储系统的增量更新方法、装置、设备、介质和产品

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006146904A (ja) 2004-11-17 2006-06-08 Hitachi Ltd ストレージシステムでオブジェクトレベルのスナップショットを生成するシステムと方法
CN100355899C (zh) 2006-04-14 2007-12-19 清华大学 一种对具荚膜细菌发酵液过滤预处理方法
US8825602B1 (en) 2010-03-15 2014-09-02 Symantec Corporation Systems and methods for providing data protection in object-based storage environments

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6651147B2 (en) * 2001-05-08 2003-11-18 International Business Machines Corporation Data placement and allocation using virtual contiguity
US6957362B2 (en) 2002-08-06 2005-10-18 Emc Corporation Instantaneous restoration of a production copy from a snapshot copy in a data storage system
US7209933B2 (en) * 2003-12-12 2007-04-24 Oracle International Corporation Object versioning
US7386663B2 (en) * 2004-05-13 2008-06-10 Cousins Robert E Transaction-based storage system and method that uses variable sized objects to store data
WO2006050455A2 (en) 2004-11-05 2006-05-11 Trusted Data Corporation Dynamically expandable and contractible fault-tolerant storage system with virtual hot spare
US20060204134A1 (en) 2005-03-01 2006-09-14 James Modrall Method and system of viewing digitized roll film images
US7373366B1 (en) * 2005-06-10 2008-05-13 American Megatrends, Inc. Method, system, apparatus, and computer-readable medium for taking and managing snapshots of a storage volume
US7716171B2 (en) 2005-08-18 2010-05-11 Emc Corporation Snapshot indexing
US8285758B1 (en) 2007-06-30 2012-10-09 Emc Corporation Tiering storage between multiple classes of storage on the same container file system
US20100082538A1 (en) * 2008-09-29 2010-04-01 Heiko Rentsch Isolated replication of shared objects
US8099572B1 (en) * 2008-09-30 2012-01-17 Emc Corporation Efficient backup and restore of storage objects in a version set
JP5244979B2 (ja) * 2009-02-23 2013-07-24 株式会社日立製作所 ストレージシステムおよびその制御方法
CN101515296A (zh) * 2009-03-06 2009-08-26 成都市华为赛门铁克科技有限公司 数据更新方法和装置
US8285681B2 (en) * 2009-06-30 2012-10-09 Commvault Systems, Inc. Data object store and server for a cloud storage environment, including data deduplication and data management across multiple cloud storage sites
CN101783814A (zh) * 2009-12-29 2010-07-21 上海交通大学 海量存储系统的元数据存储方法
US8918674B2 (en) * 2010-01-28 2014-12-23 Cleversafe, Inc. Directory file system in a dispersed storage network
US9824095B1 (en) 2010-05-03 2017-11-21 Panzura, Inc. Using overlay metadata in a cloud controller to generate incremental snapshots for a distributed filesystem
US9852150B2 (en) 2010-05-03 2017-12-26 Panzura, Inc. Avoiding client timeouts in a distributed filesystem
US8396905B2 (en) * 2010-11-16 2013-03-12 Actifio, Inc. System and method for improved garbage collection operations in a deduplicated store by tracking temporal relationships among copies
EP2754027B1 (en) * 2011-09-14 2017-08-23 Hitachi, Ltd. Method for creating clone file, and file system adopting the same
US9804928B2 (en) 2011-11-14 2017-10-31 Panzura, Inc. Restoring an archived file in a distributed filesystem
US9635132B1 (en) 2011-12-15 2017-04-25 Amazon Technologies, Inc. Service and APIs for remote volume-based block storage
US9817834B1 (en) * 2012-10-01 2017-11-14 Veritas Technologies Llc Techniques for performing an incremental backup
US9092837B2 (en) 2012-11-29 2015-07-28 International Business Machines Corporation Use of snapshots to reduce risk in migration to a standard virtualized environment
US9742873B2 (en) 2012-11-29 2017-08-22 International Business Machines Corporation Adjustment to managed-infrastructure-as-a-service cloud standard
CN104079600B (zh) 2013-03-27 2018-10-12 中兴通讯股份有限公司 文件存储方法、装置、访问客户端及元数据服务器系统
US20140344539A1 (en) * 2013-05-20 2014-11-20 Kaminario Technologies Ltd. Managing data in a storage system
CN103558998B (zh) * 2013-11-07 2016-03-30 华为技术有限公司 一种数据操作的方法和设备
US20150244795A1 (en) 2014-02-21 2015-08-27 Solidfire, Inc. Data syncing in a distributed system
US9400741B1 (en) * 2014-06-30 2016-07-26 Emc Corporation Reclaiming space from file system hosting many primary storage objects and their snapshots

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006146904A (ja) 2004-11-17 2006-06-08 Hitachi Ltd ストレージシステムでオブジェクトレベルのスナップショットを生成するシステムと方法
CN100355899C (zh) 2006-04-14 2007-12-19 清华大学 一种对具荚膜细菌发酵液过滤预处理方法
US8825602B1 (en) 2010-03-15 2014-09-02 Symantec Corporation Systems and methods for providing data protection in object-based storage environments

Also Published As

Publication number Publication date
US20170293533A1 (en) 2017-10-12
CN105993013A (zh) 2016-10-05
US11032368B2 (en) 2021-06-08
CN105993013B (zh) 2018-05-04
AU2014415350B2 (en) 2019-02-21
BR112017011412B1 (pt) 2023-02-14
JP6607941B2 (ja) 2019-11-20
US11799959B2 (en) 2023-10-24
EP3203386A4 (en) 2017-12-27
CA2965715A1 (en) 2016-06-30
EP3203386A1 (en) 2017-08-09
SG11201703410YA (en) 2017-06-29
CA2965715C (en) 2019-02-26
US20170295239A1 (en) 2017-10-12
BR112017011412A8 (pt) 2022-09-06
CN108733761A (zh) 2018-11-02
WO2016101283A1 (zh) 2016-06-30
US20210152638A1 (en) 2021-05-20
AU2014415350A1 (en) 2017-05-18
BR112017011412A2 (pt) 2018-06-26
CN108733761B (zh) 2021-12-03
JP2017537397A (ja) 2017-12-14
KR20170068564A (ko) 2017-06-19

Similar Documents

Publication Publication Date Title
KR102030786B1 (ko) 데이터 처리 방법, 장치 및 시스템
CN110321301B (zh) 一种数据处理的方法及装置
US8612488B1 (en) Efficient method for relocating shared memory
US11579777B2 (en) Data writing method, client server, and system
JP6501916B2 (ja) ファイルストレージにおけるインデックス付け実施方法及びシステム
US9436410B2 (en) Replication of volumes on demands using absent allocation
JP6388339B2 (ja) 分散キャッシングおよびキャッシュ分析
US12086116B2 (en) Object and sequence number management
CN111090618B (zh) 一种数据读取方法、系统及设备
US20130332418A1 (en) Method of managing data in asymmetric cluster file system
JP2020506444A (ja) 期限切れバックアップ処理方法及びバックアップサーバ
EP4087212A1 (en) Method and apparatus for cloning file system
CN110147203B (zh) 一种文件管理方法、装置、电子设备及存储介质
US9122689B1 (en) Recovering performance of a file system post-migration
US10387043B2 (en) Writing target file including determination of whether to apply duplication elimination
WO2021189312A1 (en) Meta server crash recovery in object storage system using enhanced meta structure
EP3532939A1 (en) Garbage collection system and process
KR20190056087A (ko) 블록 삭제시의 데이터 입출력을 최소화하는 파일 관리 구조 제어 시스템 및 방법
WO2021189308A1 (en) Delete operation in object storage system using enhanced meta structure
WO2021189306A1 (en) Write operation in object storage system using enhanced meta structure
WO2021189315A1 (en) Proxy server crash recovery in object storage system using enhanced meta structure
WO2021189314A1 (en) Data server crash recovery in object storage system using enhanced meta structure

Legal Events

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