KR101343212B1 - 온라인 저장 볼륨 축소를 위한 컴퓨터 판독가능 매체,시스템, 및 방법 - Google Patents

온라인 저장 볼륨 축소를 위한 컴퓨터 판독가능 매체,시스템, 및 방법 Download PDF

Info

Publication number
KR101343212B1
KR101343212B1 KR1020087014150A KR20087014150A KR101343212B1 KR 101343212 B1 KR101343212 B1 KR 101343212B1 KR 1020087014150 A KR1020087014150 A KR 1020087014150A KR 20087014150 A KR20087014150 A KR 20087014150A KR 101343212 B1 KR101343212 B1 KR 101343212B1
Authority
KR
South Korea
Prior art keywords
volume
boundary
area
shrink
reduction
Prior art date
Application number
KR1020087014150A
Other languages
English (en)
Other versions
KR20080075873A (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 KR20080075873A publication Critical patent/KR20080075873A/ko
Application granted granted Critical
Publication of KR101343212B1 publication Critical patent/KR101343212B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0644Management of space entities, e.g. partitions, extents, pools
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/16Protection against loss of memory contents
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • 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/0604Improving or facilitating administration, e.g. storage management
    • G06F3/0607Improving or facilitating administration, e.g. storage management by facilitating the process of upgrading existing storage systems, e.g. for improving compatibility between host and storage device
    • 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/0608Saving storage space on storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0674Disk device
    • G06F3/0676Magnetic disk device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Mathematical Physics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

예컨대, 축소 프로그램(shrink program)을 실행한 다음 자유로워진 공간을 재생(reclaim)하는 것에 의해 디스크 상에 새로운 볼륨 또는 파티션이 생성될 수 있게 하는 기술이 설명된다. 축소가 온라인으로 일어나는 동안, 사용자 또는 시스템 프로세스들은 판독 및 기입을 위해 디스크를 달리 이용하고 있을 수도 있다. 이 기술은 볼륨의 스냅숏 버전들을 보호하면서 동작한다. 볼륨을 경계 내로 축소시키는 요구를 수신하는 즉시, 축소를 위해, 어떤 할당이든 그 경계 내의 볼륨 영역에 대해 행해지도록 새로운 할당들이 제한된다. 그 경계 외부로부터 그 경계 내로 데이터가 이동되고, 경계 외부에 어떤 볼륨 데이터도 남아 있지 않을 때 축소가 커밋(commit)된다. 지정된 영역으로부터 데이터가 이동되었을 때 지정된 영역을 포함하지 않는 감소된 사이즈의 볼륨 또는 파티션이 커밋된다. 그 영역에 대응하는 새로운 볼륨 또는 파티션이 자유로워질 수 있다.
디스크, 볼륨 축소, 파티션, 스냅숏

Description

온라인 저장 볼륨 축소를 위한 컴퓨터 판독가능 매체, 시스템, 및 방법{ONLINE STORAGE VOLUME SHRINK}
현재, 대부분의 퍼스널 컴퓨터들은 사전 파티션 분할된(pre-partitioned) 하드 디스크 드라이브(디스크)와 함께 운송되고, 디스크는 전형적으로 전체 디스크를 스팬(span)하는 하나의 볼륨을 갖는다. 그러나, 특정 상황들에서는, 다른 파티셔닝 배열이 요구된다. 전 볼륨 암호화(full-volume encryption)는, 다른 파티션이 요구되는 경우, 즉 복구 파티션(recovery partition)을 제공하기 위한 경우의 하나의 예다. 또 다른 예는 사용자가 예컨대 특정 데이터를 깨끗이 분리하기 위해 단일 볼륨을 다수의 볼륨들로 분할하기를 원하는 경우이다.
만일 다른 파티션이 요구된다면, 사용자는 볼륨 콘텐츠를 백업하고, 디스크를 원하는 대로 재분할(re-partition)한 다음 볼륨 콘텐츠를 복구할 필요가 있다. 이것은 매우 시간 소모적이고(비용이 많이 들고) 힘든 프로세스이고, 자신의 데이터를 부적절하게 백업 또는 복구하는 사용자들에게는 데이터 손실의 위험이 있을 수도 있다.
<발명의 요약>
이 요약은 아래 상세한 설명에서 더 설명되는 대표적인 개념들 중 선택된 것을 간략화한 형태로 소개하기 위해 제공된다. 이 요약은 청구된 내용의 중요한 특 징들 또는 필수적인 특징들을 식별하도록 의도된 것도 아니고, 청구된 내용의 범위를 제한할 어떤 식으로든 이용되도록 의도된 것도 아니다.
요컨대, 여기에서 설명되는 내용의 다양한 양태들은 사용자들이, 예컨대 새로운 파티션을 생성하기 위해, 축소 프로그램(shrink program)을 실행한 다음 자유로워진 공간을 재생(reclaim)하는 것에 의해 디스크 상에 자유 공간을 생성할 수 있게 하는 기술에 관한 것이다. 이것이 온라인으로 일어나는 동안, 사용자 또는 시스템 프로세스들은 판독 및 기입을 위해 디스크를 달리 이용하고 있을 수도 있다. 또한, 이 기술은 디스크의 스냅숏 버전들을 보호하면서 동작하고, 여기서 스냅숏 버전들은 그것들이 과거에 다양한 시간들에서 존재했던 볼륨의 상태들(예컨대, 사본들)에 대응한다.
볼륨을 경계 내로 축소시키는 요구를 수신하는 즉시, 축소를 위해, 어떤 할당이든 그 경계 내의 볼륨의 영역에 대해 행해지도록 임의의 새로운 파일 시스템 할당들이 제한된다. 그 경계 외부로부터 그 경계 내로 데이터가 이동되고, 경계의 외부에 어떤 볼륨 데이터도 남아 있지 않을 때 축소가 커밋(commit)된다.
축소 엔진은 파일 시스템 컴포넌트와 통신하여, 파티션의 임의의 위치로부터 판독 동작들을 허용하면서 할당들을 그 파티션의 특정 영역 내에서만 허용되도록 제한한다. 그 통신은 또한 지정된 영역으로부터 파티션 내의 다른 위치로 데이터를 이동시킨다. 지정된 영역으로부터 유효 데이터가 이동되었을 때 그 지정된 영역을 포함하지 않는 감소된 사이즈의 파티션이 커밋된다. 다른 파티션 내의 영역에 대응하는 새로운 파티션이 자유로워질 수 있고, 이것은 그 영역을 준비하고, 그 영역으로부터 다른 파티션 내로 데이터를 이동시키고, 그 영역 내에 어떤 유효 데이터도 남아 있지 않은 경우 그 영역을 포함하지 않도록 다른 파티션을 커맷하는 것에 의해 이루어진다. 예를 들면, 볼륨이 주어지면, 축소는 그 볼륨 상의 파일들을 그 볼륨의 처음 쪽으로 이동시킬 수 있고, 그에 의해 동일한 디스크 상에 새로운 파티션/볼륨을 위한 공간을 자유롭게 할 수 있다.
그 밖의 이점들은 도면들과 함께 다음의 상세한 설명을 이해하였을 때 명백해질 것이다.
본 발명은 예로서 설명되고 첨부 도면들에서 제한되지 않는다. 첨부 도면들에서 유사한 참조 번호들은 유사한 요소들을 나타낸다.
도 1은 본 발명의 다양한 양태들이 통합될 수 있는 범용 컴퓨팅 환경의 예시적인 예를 도시한다.
도 2는 새로운 파티션을 위한 공간을 제공하기 위해 축소를 커밋하기 전과 후의 파일 시스템에서의 예시적인 파티셔닝 스킴을 나타내는 도이다.
도 3은 축소 동작을 수행하는 데 연루될 수 있는 예시적인 컴포넌트들을 나타내는 블록도이다.
도 4는 온라인 축소 동작 동안에 공간을 이동시키고 할당들을 경계 전의 영역으로 제한하기 위해 코디네이트(coordinate)하는 파일 시스템 및 축소 엔진을 나타내는 도이다.
도 5는 파일 시스템 및 그의 기초가 되는 볼륨을 축소시키기 위해 취해질 수 있는 예시적인 컴퓨터 구현 단계들을 포함하는 흐름도이다.
예시적인 운영 환경
도 1은 본 발명이 구현될 수 있는 적합한 컴퓨팅 시스템 환경(100)의 일례를 도시하고 있다. 컴퓨팅 시스템 환경(100)은 적합한 컴퓨팅 환경의 일례에 불과하며, 본 발명의 용도 또는 기능성의 범위에 관해 어떤 제한을 암시하고자 하는 것이 아니다. 컴퓨팅 환경(100)은 예시적인 운영 환경(100)에 도시된 컴포넌트들 중 임의의 하나 또는 그 컴포넌트들의 임의의 조합과 관련하여 어떤 의존성 또는 요구사항을 갖는 것으로 해석되어서는 안된다.
본 발명은 많은 기타 범용 또는 특수 목적의 컴퓨팅 시스템 환경 또는 구성에서 동작할 수 있다. 본 발명과 함께 사용하는 데 적합할 수 있는 잘 알려진 컴퓨팅 시스템, 환경 및/또는 구성의 예로는 퍼스널 컴퓨터, 서버 컴퓨터, 핸드-헬드 또는 랩톱 장치, 태블릿 장치, 멀티프로세서 시스템, 마이크로프로세서 기반 시스템, 셋톱 박스, 프로그램가능한 가전제품, 네트워크 PC, 미니컴퓨터, 메인프레임 컴퓨터, 상기 시스템들이나 장치들 중 임의의 것을 포함하는 분산 컴퓨팅 환경, 기타 등등이 있지만 이에 제한되는 것은 아니다.
본 발명은 일반적으로 컴퓨터에 의해 실행되는 프로그램 모듈과 같은 컴퓨터 실행가능 명령어와 관련하여 기술될 수 있다. 일반적으로, 프로그램 모듈은 특정 태스크를 수행하거나 특정 추상 데이터 유형을 구현하는 루틴, 프로그램, 개체, 컴포넌트, 데이터 구조 등을 포함한다. 본 발명은 또한 통신 네트워크를 통해 연결되어 있는 원격 처리 장치들에 의해 태스크가 수행되는 분산 컴퓨팅 환경에서 실시될 수도 있다. 분산 컴퓨팅 환경에서, 프로그램 모듈은 메모리 저장 장치를 포함하는 로컬 및/또는 원격 컴퓨터 저장 매체에 위치할 수 있다.
도 1과 관련하여, 본 발명을 구현하는 예시적인 시스템은 컴퓨터(110) 형태의 범용 컴퓨팅 장치를 포함한다. 컴퓨터(110)의 컴포런트들은 처리 장치(120), 시스템 메모리(130), 및 시스템 메모리를 비롯한 각종 시스템 컴포넌트들을 처리 장치(120)에 연결시키는 시스템 버스(121)를 포함하지만 이에 제한되는 것은 아니다. 시스템 버스(121)는 메모리 버스 또는 메모리 컨트롤러, 주변 장치 버스 및 각종 버스 아키텍처 중 임의의 것을 이용하는 로컬 버스를 비롯한 몇몇 유형의 버스 구조 중 어느 것이라도 될 수 있다. 예로서, 이러한 아키텍처는 ISA(Industry Standard Architecture) 버스, MCA(Micro Channel Architecture) 버스, EISA(Enhanced ISA) 버스, VESA(Video Electronics Standard Association) 로컬 버스, 그리고 메자닌 버스(Mezzanine bus)로도 알려진 PCI(Peripheral Component Interconnect) 버스 등을 포함하지만 이에 제한되는 것은 아니다.
컴퓨터(110)는 통상적으로 각종 컴퓨터 판독가능 매체를 포함한다. 컴퓨터(110)에 의해 액세스 가능한 매체는 그 어떤 것이든지 컴퓨터 판독가능 매체가 될 수 있고, 이러한 컴퓨터 판독가능 매체는 휘발성 및 비휘발성 매체, 이동식 및 비이동식 매체를 포함한다. 예로서, 컴퓨터 판독가능 매체는 컴퓨터 저장 매체 및 통신 매체를 포함하지만 이에 제한되는 것은 아니다. 컴퓨터 저장 매체는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터와 같은 정보를 저장하는 임의의 방법 또는 기술로 구현되는 휘발성 및 비휘발성, 이동식 및 비이동식 매체를 포함한다. 컴퓨터 저장 매체는 RAM, ROM, EEPROM, 플래시 메모리 또는 기타 메모리 기술, CD-ROM, DVD(digital versatile disk) 또는 기타 광 디스크 저장 장치, 자기 카세트, 자기 테이프, 자기 디스크 저장 장치 또는 기타 자기 저장 장치, 또는 컴퓨터(110)에 의해 액세스될 수 있고 원하는 정보를 저장하는 데 이용될 수 있는 임의의 기타 매체를 포함하지만 이에 제한되는 것은 아니다. 통신 매체는 통상적으로 반송파(carrier wave) 또는 기타 전송 메커니즘(transport mechanism)과 같은 피변조 데이터 신호(modulated data signal)에 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터 등을 구현하고 임의의 정보 전달 매체를 포함한다. "피변조 데이터 신호"라는 용어는, 신호 내에 정보를 인코딩하도록 그 신호의 특성들 중 하나 이상을 설정 또는 변경시킨 신호를 의미한다. 예로서, 통신 매체는 유선 네트워크 또는 직접 배선 접속(direct-wired connection)과 같은 유선 매체, 그리고 음향, RF, 적외선 및 기타 무선 매체와 같은 무선 매체를 포함한다. 상술된 것들 중 임의의 것들의 조합들도 컴퓨터 판독가능 매체의 범위 안에 포함된다.
시스템 메모리(130)는 ROM(read only memory)(131) 및 RAM(random access memory)(132)와 같은 휘발성 및/또는 비휘발성 메모리 형태의 컴퓨터 저장 매체를 포함한다. 시동 중과 같은 때에, 컴퓨터(110) 내의 구성요소들 사이의 정보 전송을 돕는 기본 루틴을 포함하는 기본 입/출력 시스템(BIOS)(133)은 통상적으로 ROM(131)에 저장되어 있다. RAM(132)은 통상적으로 처리 장치(120)가 즉시 액세스할 수 있고 및/또는 현재 동작시키고 있는 데이터 및/또는 프로그램 모듈을 포함한다. 예로서, 도 1은 운영 체제(134), 애플리케이션 프로그램(135), 기타 프로그램 모듈(136) 및 프로그램 데이터(137)를 도시하고 있지만 이에 제한되는 것은 아니다.
컴퓨터(110)는 또한 기타 이동식/비이동식, 휘발성/비휘발성 컴퓨터 저장 매체를 포함한다. 단지 예로서, 도 1은 비이동식, 비휘발성 자기 매체로부터 판독하거나 그것에 기입하는 하드 디스크 드라이브(141), 이동식, 비휘발성 자기 디스크(152)로부터 판독하거나 그것에 기입하는 자기 디스크 드라이브(151), 및 CD-ROM 또는 기타 광 매체 등의 이동식, 비휘발성 광 디스크(156)로부터 판독하거나 그것에 기입하는 광 디스크 드라이브(155)를 예시한다. 예시적인 운영 환경에서 사용될 수 있는 기타 이동식/비이동식, 휘발성/비휘발성 컴퓨터 저장 매체로는 자기 테이프 카세트, 플래시 메모리 카드, DVD, 디지털 비디오 테이프, 고상(solid state) RAM, 고상 ROM 등이 있지만 이에 제한되는 것은 아니다. 하드 디스크 드라이브(141)는 통상적으로 인터페이스(140)와 같은 비이동식 메모리 인터페이스를 통해 시스템 버스(121)에 접속되고, 자기 디스크 드라이브(151) 및 광 디스크 드라이브(155)는 통상적으로 인터페이스(150)와 같은 이동식 메모리 인터페이스에 의해 시스템 버스(121)에 접속된다.
위에서 설명되고 도 1에 도시된 드라이브들 및 이들과 관련된 컴퓨터 저장 매체는, 컴퓨터(110)에 대한 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 및 기타 데이터의 저장을 제공한다. 도 1에서, 예를 들어, 하드 디스크 드라이브(141)는 운영 체제(144), 애플리케이션 프로그램(145), 기타 프로그램 모듈(146) 및 프로그램 데이터(147)를 저장하는 것으로 도시되어 있다. 이들 컴포넌트들은 운영 체제(134), 애플리케이션 프로그램(135), 기타 프로그램 모듈(136), 및 프로그램 데이터(137)와 동일할 수도 있고 또는 그와 다를 수도 있다는 것에 유의한다. 여기서 운영 체제(144), 애플리케이션 프로그램(145), 기타 프로그램 모듈(146) 및 프로그램 데이터(147)에 다른 번호가 부여되어 있다는 것은 적어도 이들이 다른 사본(copy)이라는 것을 나타내기 위한 것이다. 사용자는 태블릿, 또는 전자 디지타이저(164), 마이크(163), 키보드(162) 및 일반적으로 트랙볼(trackball) 또는 터치 패드로 불리는 포인팅 장치(161) 등의 입력 장치를 통해 명령 및 정보를 컴퓨터(110)에 입력할 수 있다. 도시되지 않은 다른 입력 장치로는 조이스틱, 게임 패드, 위성 안테나, 스캐너 등이 있다. 이들 및 기타 입력 장치는 종종 시스템 버스에 결합된 사용자 입력 인터페이스(160)를 통해 처리 장치(120)에 접속되지만, 병렬 포트, 게임 포트 또는 USB(universal serial bus) 등의 다른 인터페이스 및 버스 구조에 의해 접속될 수도 있다. 모니터(191) 또는 다른 유형의 디스플레이 장치도 비디오 인터페이스(190) 등의 인터페이스를 통해 시스템 버스(121)에 접속될 수 있다. 모니터(191)는 터치-스크린 패널 등과 통합될 수도 있다. 모니터 및/또는 터치 스크린 패널은, 태블릿형 퍼스널 컴퓨터에서와 같이, 컴퓨팅 장치(110)가 통합되어 있는 하우징에 물리적으로 연결될 수 있다는 것에 유의한다. 또한, 컴퓨팅 장치(110)와 같은 컴퓨터들은 스피커(195) 및 프린터(196) 등의 기타 주변 출력 장치를 포함할 수도 있고, 이들은 출력 주변장치 인터페이스(194) 등을 통해 접속될 수 있다.
컴퓨터(110)는 원격 컴퓨터(180)와 같은 하나 이상의 원격 컴퓨터로의 논리적 접속을 사용하여 네트워크화된 환경에서 동작할 수 있다. 원격 컴퓨터(180)는 퍼스널 컴퓨터, 서버, 라우터, 네트워크 PC, 피어 장치 또는 기타 통상의 네트워크 노드일 수 있고, 통상적으로 컴퓨터(110)와 관련하여 상술된 구성요소들의 다수 또는 전부를 포함하지만, 도 1에는 메모리 저장 장치(181)만 예시되었다. 도 1에 도시된 논리적 접속으로는 LAN(local area network)(171) 및 WAN(wide area network)(173)이 있지만, 기타 네트워크를 포함할 수도 있다. 이러한 네트워킹 환경은 사무실, 전사적 컴퓨터 네트워크(enterprise-wide computer network), 인트라넷 및 인터넷에서 일반적인 것이다.
LAN 네트워킹 환경에서 사용될 때, 컴퓨터(110)는 네트워크 인터페이스 또는 어댑터(170)를 통해 LAN(171)에 접속된다. WAN 네트워킹 환경에서 사용될 때, 컴퓨터(110)는 통상적으로 인터넷과 같은 WAN(173)을 통해 통신을 설정하기 위한 모뎀(172) 또는 기타 수단을 포함한다. 내장형 또는 외장형일 수 있는 모뎀(172)은 사용자 입력 인터페이스(160) 또는 기타 적절한 메커니즘을 통해 시스템 버스(121)에 접속될 수 있다. 네트워크화된 환경에서, 컴퓨터(110) 또는 그의 일부와 관련하여 기술된 프로그램 모듈은 원격 메모리 저장 장치에 저장될 수 있다. 예로서, 도 1은 원격 애플리케이션 프로그램(185)이 원격 컴퓨터(180)에 있는 것으로 도시하고 있지만 이에 제한되는 것은 아니다. 도시된 네트워크 접속은 예시적인 것이며 이 컴퓨터들 사이에 통신 링크를 설정하는 기타 수단이 사용될 수 있다는 것을 이해할 것이다.
온라인 볼륨 축소
여기에서 설명되는 기술의 다양한 양태들은 예컨대 파티션을 자유롭게 하기 위한, 저장 볼륨의 온라인 축소에 관한 것이고, 여기에서 사용될 때, "축소(shrinking)" 및 그의 변형어들(shrink, shrunk 등)은 디스크 공간을 자유롭게 하는 것을 지칭한다. 보다 구체적으로, 온라인 볼륨 축소는 사용자들이 새로운 파티션을 생성하기 위해 축소를 실행한 다음 자유로워진 공간을 재생(re-claiming)하는 것에 의해 디스크 상에 자유로운 파티션 가능한 공간(free-partition-able space)을 생성할 수 있게 하는 기술(예컨대, 메커니즘/특징)을 지칭한다. 온라인에 의해, 그것이 본질적으로 의미하는 것은 저장 볼륨은 그에 대하여 기입/판독되고 있는 동안에도, 예컨대 통상의 사용 중에도, 축소가 가능하다는 것이다. 즉, 볼륨을 축소시키는 것은 볼륨의 입출력(I/O) 및 사용에 영향을 주지 않고 구현된다는 것이다.
일반적으로, 여기에서의 예들은 특정한 예시적인 구현에 관한 것이고, 단순함과 간결함을 위해 일부 가상적인 제한들이 설명된다. 예를 들면, 여기에서 설명된 하나의 예시적인 구현에서는, 단지 또는 원시(포맷되지 않은) 볼륨들 또는 Microsoft® NTFS 파일 시스템을 이용하여 포맷된 볼륨들이 축소되지만, 여기에서 설명된 기술들로부터 기초하더라도, 다른 파일 시스템들을 이용하여 포맷된 볼륨들도 유사하게 축소 가능할 수 있다. 원시 볼륨들은 축소될 수 있지만, 여기서는 데이터를 이동시키지 않고 축소하는 것으로 설명되어 있다는 것에 유의한다.
또 다른 예로서, 여기에서는 (기본 파티션들, 스팬된(spanned) 및 미러링된(mirrored) 볼륨들을 포함하는) 단순한 것들만이 축소 가능한 것으로 설명되어 있다. 스트라이프(Stripe) 및 RAID-5 볼륨 축소의 예들은 여기에서 설명되어 있지 않다.
또한, 볼륨들은 통상적으로 끝(end)으로부터만 축소된다. 예컨대, 볼륨이 주어지면, 축소 메커니즘은 볼륨 상의 파일들을, 경계의 앞에, 볼륨의 처음 쪽으로 이동시키고, 그에 의해 동일한 디스크 상에 새로운 파티션/볼륨을 위한 공간을 자유롭게 한다. 그러한 예시적인 구현에서는, 축소 영역은 볼륨의 끝에 위치하는 볼륨 상의 연속 영역(contiguous region)이다. 그럼에도 불구하고, 대안 구현들에서는, 축소 영역은 볼륨 상의 어느 곳에든, 예컨대, 처음에, 또는 처음 또는 끝이 아닌 사이의 어딘가에 위치할 수도 있고, 및/또는 불연속일 수도 있다. 예를 들면, 축소는 다수의 디스크로 구성된 단일 저장 볼륨으로부터 하나 이상의 디스크로부터 데이터를 제거하기 위해 이용될 수 있다. 해당 디스크는 그 후 제거될 수 있다. 따라서, 영역(region)이라는 용어는 연속은 물론 불연속 위치들을 지칭하고, 경계(boundary)라는 용어는 단일 경계 또는 경계 포인트들의 세트를 나타낼 수 있다.
따라서, 이해되는 바와 같이, 본 발명은 여기에서 이용되는 예들에 제한되지 않는다. 그러므로, 여기에서 언급된 예들 중 어떤 것도 비제한적이고, 본 발명은 일반적으로 계산 및 데이터 저장에서 이익 및 이점을 제공하는 다양한 방법들로 이용될 수 있다.
도 2를 참조하면, 임의의 사이즈의 저장 장치(예컨대, 하드 디스크 드라이브) 상에, 임의의 축소 동작 전에 존재할 수 있는, 파일 시스템(예컨대, NTFS) 파티션(202A)이 도시되어 있다. 도 2에서, 파일 시스템 볼륨은 전체 파티션(202A)을 차지하지만, 통상적으로는, 주어진 시간에 파티션의 대부분이 미사용 공간일 수 있다. 축소 동작의 커밋팅(committing)에 이어서, 후술되는 바와 같이, 파일 시스템 파티션(202B)에 의해 소비되는 사이즈의 양이 감소되고, 지금은 축소된 볼륨(now-shrunken volume)에 의해 이전에 사용된 공간에서 새로운 축소 영역(204)이 이용 가능하다. 일반적으로, 축소 영역(204)은 축소의 결과로서 제거된 볼륨의 영역에 대응한다.
도 3을 참조하면, 가상 디스크 서비스(VDS; Virtual Disk Service)(312)가 사용자/관리자가 저장 볼륨들을 관리하기 위해 이용할 수 있는 API(application programming interface) 세트를 제공하는 예시적인 실시예가 나타내어져 있다. VDS(312)에 의해 제공되는 인터페이스들 중 하나는 사용자가 볼륨을 축소시키는 것을 요구할 수 있게 한다. 보다 구체적으로, 이 구현에서는, 사용자 인터페이스(314)를 통하여, 사용자가 원하는 축소 사이즈를 가지고 VDS(312)에 호출한다. VDS(312)는, 먼저 파일 시스템이 원하는 축소 사이즈만큼 축소될 수 있는지를 알기 위해 체크하고, 만일 그렇다면, 파일 시스템의 실제 축소를 행하기 위해, 축소 엔진(316)과 코디네이트한다. 파일 시스템의 축소가 완료된 후에, VDS(312)는 실제 볼륨을 축소시키기 위해 소프트웨어 제공자(software provider)와 코디네이트한다. 기본 및 동적인 제공자들은 축소 인터페이스를 지원한다.
축소는 비동기 동작일 수 있고, 비동기일 경우, 사용자는 축소 동작의 상태에 대해 체크하거나, 또는 축소 동작을 취소하기 위해 사용자 인터페이스(314)를 통하여 VDS(312)와 통신할 수 있다. VDS(312)는 이들 태스크를 위해 축소 엔진(316)과 코디네이트한다.
축소 엔진(316)은 VDS(312)에 의해 호출될 수 있는 독립실행형 dll(dynamic link library)로서 구현될 수 있다. 또한, 축소 엔진(316)은 COM 컴포넌트로서 구현될 수 있고 COM 인터페이스를 가질 수 있다. 축소 엔진(316)과 VDS(312) 간의 인터페이스는 VDS(312)와 그의 제공자들 간의 인터페이스와 유사할 수 있다. 축소 엔진(316)은 VDS(312)의 동일한 프로세스에서 실행할 수도 있고 로컬 시스템으로서 실행할 수도 있다. 축소 엔진(316)은 최대 축소 사이즈를 결정하는 메서드 및 실제 파일 시스템 축소를 수행하는 메서드를 VDS(312)에 제공한다. VDS(312), 사용자 인터페이스(314) 및 축소 엔진(316)은 도 3에서 사용자 모드 컴포넌트들로서 나타내어져 있지만, 이들 컴포넌트들 중 임의의 것의 일부 또는 전부가 커널 모드 컴포넌트들로서 구현될 수도 있다.
축소 엔진(316)은 볼륨 내의 파일들을 축소 영역으로부터 볼륨의 나머지 부분 내로 이동시키는 역할을 담당하고 있다. 주어진 기존의 파일 시스템 볼륨 상에서, 일부 파일들은 이동 불가능한(non-moveable) 것으로 간주될 수 있다는 것에 유의한다. 그 결과, 축소 동작을 시도할 때 그러한 파일들이 고려될 필요가 있다. 여기에서 사용될 때, 알려진 이동 불가능한 파일들은 항상 이동 불가능한 파일들이고, 잘 알려진 페이지 파일(예컨대, 가상 메모리용) 및 볼스냅(volsnap)(볼륨 스냅숏) 차등 영역 파일(differential area file)(이전 볼륨 상태들을 복구하기 위한 것)을 포함한다. 알려진 이동 불가능한 파일들은 이동 불가능한 것으로 마킹되어 있는 파일들과 동일하지 않는 것에 유의한다. 마킹된 이동 불가능한 파일들은 반드시 이동 불가능하다고는 할 수 없기 때문이다. 축소 엔진(316)은 파일 시스템 자유 공간에 대하여 쿼리하고 모든 이동 불가능한 파일들에 대하여 체크함으로써 볼륨의 최대 축소 사이즈를 체크할 수 있을 필요가 있다.
축소 엔진(316)은 또한 축소 영역으로부터 파일들을 이동시키기 전과 후에 파일 시스템(318)과(예컨대, 파일 시스템 API들 및/또는 I/O 관리자 등을 통하여 NTFS와) 코디네이트한다. 일 구현에서, 축소 엔진(316)은 축소 동작에 관한 진행 정보를 VDS(312)에 제공하고, 축소 동작의 취소를 허용하는 메커니즘을 포함한다.
도 4는 축소 동작을 겪고 있는 볼륨에 관련하여 이들 컴포넌트들을 보여준다. 일반적으로, 축소 엔진(316)은 축소되고 있는 영역으로부터 감소된 사이즈의 파일 시스템 볼륨으로 파일들을 이동시키는 책임이 있는 반면, 파일 시스템(318)은 실제의(적어도 논리적인) 이동을 수행하고, 볼륨을 축소시키는 단계들에 달리 연루된다. 파일 시스템(318)에 의해 수행되는 하나의 단계는 축소 엔진(316)이 축소되고 있는 영역(404)(도 2의 축소 영역(204)에 대응함)으로부터 파일들을 이동시키고 있는 동안 임의의 새로운 할당들을 그 축소되고 있는 영역(404)에서 할당되지 못하게 제한한다. 바꾸어 말하면, 축소 동작에 대하여 통지받고 적절한 매개 변수들을 제공받는 경우, 파일 시스템(318)은 임의의 새로운 할당들이 감소된 사이즈의 NTFS 파티션(402B) 내의 위치에 대해 행해지도록 한다. 이것은 온라인 동작을 용이하게 한다. 이는 볼륨이 축소되고 있는 동안, 축소되고 있는 영역(404)에 영향을 주지 않고, (비록 감소된 사이즈의 파일 시스템 파티션(402B)에 제한되기는 하지만) 통상의 할당들이 일어날 수 있기 때문이다. 사용자는 이전에 할당된 공간이 이동되기 전에 경계 영역 외부에 존재하는 그 공간에 여전히 데이터를 기입할 수 있다는 것에 유의한다.
또 다른 단계는, 예컨대, 커밋 시에, 파일 시스템의 실제 사이즈 감소를 수행한다. 축소 엔진(316)은 그러한 단계들이 언제 일어나는지를 판정하고 그 정보를 파일 시스템(318)에 통신한다. 파일 시스템은 만일 어떤 이유로 유효한(예컨대, 파일 또는 스냅숏) 데이터가 파일 시스템으로부터 제거될 영역에 여전히 남아 있다면 커밋하지 못할 수 있다는 것에 유의한다.
볼륨 스냅숏들은 본질적으로 볼륨의 사본을 주어진 "스냅숏" 시점에서의 그것의 상태로 복구되도록 허용하는 최근 기술이다. 일반적으로, 하나의 그러한 볼륨 스냅숏 메커니즘은 삭제된 파일 데이터 또는 덮어쓰여진 파일 데이터일 것의 할당 단위들(예컨대, 클러스터들)을 차등 파일(differential file)에 유지함으로써 동작한다. 예를 들면, 이것은 블록의 데이터가 변경된 경우 그것을 단순히 덮어쓰거나 또는 삭제된 경우 그것이 나중에 덮어쓰여지도록 허용하는 것이 아니라, 각 블록을 차등 파일의 일부로서 추적(tracking)하는 것에 의해, 또는 기입시 복사 동작(copy-on-write operaton)에서 각 블록을 차등 파일에 복사하는 것에 의해 달성될 수 있다. "변경된" 및/또는 "삭제된" 데이터는 실제로는 저장 장치 상에 여전히 존재하고 주어진 시점의 스냅숏과 연관되기 때문에, 차등 파일은 볼륨들을 재생성하는 데 이용될 수 있다. 이 기술은 비교적 잘 이해되므로, 볼륨 스냅숏들에 대해서는, 볼륨 스냅숏 동작들이 어떻게 온라인 볼륨 축소에 관련되는지를 설명하는 것을 제외하고는, 여기에서 상세히 설명되지 않을 것이다.
요구된 축소 동작 후에 스냅숏들을 보전하기 위해, 볼륨 스냅숏 메커니즘(볼스냅)은 차등 파일 영역 범위들을 보고하고, 볼륨으로부터 제거되고 있는 공간 내의 삭제된 파일들을 보전하도록 동작한다. 삭제된 파일들은 그 삭제된 파일들을 차등 영역 파일에 복사함으로써 보전된다.
도 5는 온라인 볼륨 축소 동안에 수행될 수 있는 몇몇 예시적인 동작들을 나타내는 흐름도이다(예컨대, NTFS 파일 시스템 볼륨으로서 포맷된 볼륨). 도 5의 단계들 중 일부는 도시된 순서대로 수행될 수 있지만, 일부 단계들은 상이한 순서로 수행될 수도 있고, 다른 단계들은 병행하여 수행될 수도 있다는 것에 유의한다.
볼륨을 축소시키는 요구가 행해지는 경우(단계 500), 단계 502가 나타내는 바와 같이 사이즈, 자유 공간 등에 기초하여 볼륨이 요구된/지정된 사이즈까지 축소될 수 있는지에 대하여 판정하는 체크가 행해진다. 사이즈는 범위 또는 그에 상당하는 것, 예컨대, 새로운 파티션이 N 바이트의 사이즈(예컨대, 클러스터들에 대응하는 것)이지만, 적어도 N-M 바이트가 이용 가능한 한 축소가 계속되도록 허용하는 요구일 수 있다는 것에 유의한다. 만일 그렇지 않다면, 단계 504에서 오류 코드(errorcode) 등이 호출자에게, 전형적으로는 도 3의 사용자 인터페이스(314)에게(그러나 어쩌면 축소를 개시한 어떤 자동화 프로세스에게) 반환되고, 그에 의해 사용자 또는 프로세스는 보다 적은 공간이 자유로워지는 요구와 같은, 다른 행동 방침(course of action)을 결정할 수 있다. 또한, 요구되는 공간을 제공하기 위해 일부 데이터의 압축이 선택될 수도 있고, 이것은 선택되었을 때 축소 메커니즘에 의해 제어될 수 있다.
보다 구체적으로, 볼륨이 지정된 사이즈까지 축소될 수 있는지를 알기 위해 체크할 때, 그 체크는, 축소 버퍼를 공제하지 않는 것을 제외하고, 상술한 바와 같이 최대 축소 사이즈를 구함으로써 행해진다. 그 후 축소 엔진(316)이 축소하려고 할 양을 결정하기 위해, 최대 축소 사이즈와 사용자가 입력한 최소 축소 사이즈에 대한 비교가 행해진다.
만일 최대 축소 사이즈가 클라이언트가 지정한 최소 축소 사이즈보다 작다면, 호출은 실패되는데, 이는 볼륨이 클라이언트가 지정한 요구 사항을 만족시키도록 축소될 수 없기 때문이다. 역으로, 만일 최대 축소 사이즈가 지정된 원하는 사이즈보다 크다면, 볼륨을 사용자가 원하는 축소 사이즈만큼 축소시키는 것이 가능하고, 그에 의해 축소 엔진(316)은 볼륨을 원하는 대로 축소하려는 그것의 시도를 계속할 것이다.
만일 최대 축소 사이즈가 원하는 축소 사이즈보다는 작고 최소 축소 사이즈보다는 크다면, 볼륨은 축소될 수 있지만, 사용자가 원하는 축소 사이즈까지는 축소될 수 없다. 하나의 구현에서는, 원하는 축소 사이즈가 가능하지 않다고 이미 판정되었기 때문에, 축소 엔진(316)은 볼륨을 사용자가 원하는 축소 사이즈 대신 최대 축소 사이즈까지 축소시키려고 할 것이다.
만일 충분한 공간이 이용 가능하다면, 파일 시스템에게 축소를 준비하도록 통지하는 것을 나타내는 단계 506이 수행된다. 통지를 받으면, 파일 시스템은 그 후, 예컨대, 할당들을 감소된 사이즈의 파일 시스템 파티션(402B) 내에 할당되도록 제한함으로써, 축소 영역에의 할당들을 차단할 것이다. 진행중인 어떤 기입이든 완료되어 나중에 이동될 수 있다는 것에 유의한다. 이는 축소되고 있는 영역(404)으로부터의 이동은 후속 단계에서 처리될 수 있기 때문이다. 예시적인 NTFS 구현에서는, 파일 시스템에게 축소를 위해 준비하도록 통지할 때, 예컨대, 단계 502를 통하여 결정되는 바와 같이, 엔진이 축소시키려고 시도할 사이즈를 넘겨주어, ShrinkPrepare 요구에 의해 FSTCL_SHRINK_VOLUME에 호출이 행해진다.
단계 508 및 510은 현재 감소되고 있는 파일 시스템 파티션 영역(402B)의 경계 외부에 있는 파일 범위들을 경계 내에 있도록 이동시키는 것을 나타낸다. 한번에 단일 범위가 이동될 수도 있고, 또는 하나 이상의 범위들이 세트로서 이동될 수도 있다.
축소 영역의 경계 외부에 있는 파일 범위들을 감소된 파일 시스템 축소 영역 내에 있도록 이동시키기 위해, 업데이트된 축소 경계를 넘겨주어, ShrinkPrepare 요구에 의해 FSTCL_SHRINK_VOLUME이 반복적으로 호출될 수 있다. 이것은 알고리즘이 이동시킬 수 없는 축소 영역 내의 클러스터들과 마주칠 때 일어난다.
축소 알고리즘에는 다수의 단계들이 있을 수 있다. 예를 들면, 2개의 그러한 단계들은 연속 파일 범위들을 전방으로 이동시키는 제1 단계와, 그 다음에 오는 무차별 공격 단계(brute force phase)를 포함한다. 제1 단계는 축소 영역 내의 연속 파일 범위들을 범위 사이즈의 내림차순으로 새로운 볼륨 영역 내의 공간 내로 이동시키려고 시도한다. 이 단계는 현재 조각화(fragment)되고 있지 않은 파일 범위들을 조각화하지 않음으로써 조각화(fragmentation)의 현 상태를 보전하려고 시도한다. 무차별 공격 단계는 임의의 할당된 클러스터들을 볼륨의 전방(front)에 합체(consolidate)하려고 시도한다. 무차별 공격 단계에서는, 파일들을 조각 모음(defragment)하거나 또는 연속 파일 범위들을 연속으로 유지하려는 어떤 시도도 없을 수 있다.
새로운 할당 요구들이 파일 시스템 내로 들어오고 있을 수 있기 때문에, 지정된 감소된 파일 시스템 파티션(402B)는 범위 이동을 위한 (및/또는 후술되는 볼륨 스냅숏 데이터를 위한) 충분한 공간을 갖고 있지 않을 수 있다는 것에 유의한다. 그러한 경우에는 축소가 실패하겠지만, 다시, 사용자는 동작이 실패로 간주되지 않고 원하는 새로운 파티션 사이즈가 축소될 수 있는 조정된 경계에 대응하는 최소 볼륨 등을 제공할 수 있다.
범위들을 이동시킨 이후에, 단계 512를 통하여 나타내어진 바와 같이, 볼륨 스냅숏 메커니즘은 축소 영역 내의 삭제된 파일들을 보전하도록 통지받는다. 다시, 축소는 사이즈 변경으로 인해 실패할 수 있지만, 단계 502의 평가에서 볼륨 스냅숏 메커니즘으로부터 사이즈 정보를 포함시킴으로써 실패의 가능성이 감소될 수 있다. 예시적인 구현에서는, 볼륨 스냅숏 메커니즘은 알려진 축소 경계를 가지고 I0CTL_VOLSNAP_PRESERVE_SNAPSHOT_SHRINK_REGION에 호출함으로써 축소 영역 내의 삭제된 파일들을 보전하도록 통지받는다. 후술되는 바와 같이, 이 경계는 원하는 축소 경계 또는 최대 LCN(logical cluster number)를 갖는 할당된 클러스터의 LCN 중 보다 큰 것이다.
상기 동작들은 먼저 큰 파일들을 이동시킴으로써 조각 모음을 보전하거나 개선하려고 시도한다는 것에 유의한다. 그러나, 예컨대 연속 자유 공간을 볼륨 스냅숏 데이터에 관하여 그것을 사용하는 것을 예상하여 남겨둠으로써, 볼륨 스냅숏들에 대한 조각 모음을 용이하게 하는 것이 가능하다. 사용자는 또한 축소 후에 조각 모음을 할 수도 있고, 조각 모음은 축소 이후에 자동화될 수 있다.
단계 512에서 상기 달리 삭제된/덮어쓰여진 파일들의 보전에 이어서, 단계 514는 파일 시스템(318)에게 파일 시스템의 축소를 완료하도록 통지하도록 동작한다. 예시적인 NTFS 구현에서는, NTFS는 ShrinkCommit 요구에 의해 FSTCL_SHRINK_VOLUME에 호출함으로써 파일 시스템의 축소를 완료하도록 통지받는다. NTFS는 볼륨을 가장 최근의 ShrinkPrepare 요구에 의해 지정된 사이즈까지 축소시키려고 시도할 것이다.
그 후, 단계 516을 통하여 나타내어진 바와 같이, 저장(예컨대, 볼륨) 관리자(322)(도 3)에 호출함으로써 파일 시스템의 기초가 되는 물리적 볼륨이 축소된다.
도 3의 컴포넌트들을 통하여 요약하면, 축소는 VDS(312)를 이용하여 클라이언트(예컨대, UI(314))에 의해 개시된다. 축소가 개시되면, VDS(312)는 축소 엔진(316)에 호출하고 축소 엔진(316)은 파일 시스템(318)과 함께 작동하여 파일 시스템 볼륨을 축소시킨다. 파일 시스템이 축소된 후에, VDS(312)는 기초가 되는 볼륨을 축소시키기 위해 축소 관리자(322)를 호출한다. 쉽사리 이해될 수 있는 바와 같이, 단계 502-514는 볼륨 상의 파일 시스템과 관련하여 수행되고, 축소 엔진(316)으로부터의 요구들에 의해 코디네이트된다. 단계 516은 실제 볼륨을 취급하고, VDS(312) 및 그의 제공자들에 의해 처리된다. 원시 볼륨에 대해서는 단계(516)만이 수행될 필요가 있다는 것에 유의한다.
축소 동작 동안에, 언제든지 취소가 발생할 수 있다. 취소가 발생하는 경우, 볼륨 및 파일 시스템은 그들의 원래의 사이즈에 있을 필요가 있다. 따라서, 파일 시스템이 축소된 후에 취소가 발생하면, 취소 동작은 파일 시스템을 그의 원래의 사이즈로 도로 확장할 필요가 있다. 또한, 만일 파일 시스템이 축소를 준비하도록 이미 통지를 받은 경우에는, 파일 시스템(318)은 그것의 원래의 상태로 도로 되돌아갈 것이다. 파일들은 볼륨 상의 그들의 원래의 위치들로 도로 이동될 필요가 없다는 것에 유의한다. 이는 실제 물리적 위치들은 시스템에 의해 사용자에게 항상 숨겨진 어떤 것이기 때문이다.
더욱이, 커밋 전에 취소 또는 시스템 폭주(system crash) 등(예컨대, 정전)의 경우에는, 볼륨의 데이터 중 아무것도 소실되지 않는다. 이 때문에, 축소 동작에서 이용되는 데이터 구조들(후술됨)은 메모리 구조들에서와 같이 유지되고, 그에 의해, 예를 들어, 재부팅(reboot)이 요구되면 그 데이터 구조들은 사라진다. 그 결과, 볼륨은 아직 시도되지 않은 동작에 대해서는 불변 상태로 남는다. 실제 이동들은 트랜잭션으로서 수행되고, 따라서 한창 이동 중에 어떤 폭주든 전형적인 실행 취소(undo)/재실행(redo) 기법들을 이용하여 실행 취소될 수 있다. 임의의 성공적으로 이동된 데이터는 도로 이동될 필요가 없다는 것에 유의한다. 이는 파일 시스템은 이미 그 데이터를 상이한 클러스터 위치 또는 위치들의 세트에 재배치(remap)하였고, 데이터의 실제 위치는 사용자의 눈에는 보이지 않기 때문이다.
예시적인 메서드들 및 함수들
다음은 볼륨을 축소시키기 위해 사용자에게 공개되는 다양한 예시적인 메서드들을 설명한다. 이 예시적인 메서드들은, VDS 볼륨 개체(312)(도 3) 상에 구현되는, IVdsVolume 인터페이스의 일부이다.
QueryMaxReclaimableBytes:
이 메서드는 현 볼륨으로부터 구제(salvage)될 수 있는 최대 바이트 수를 반환한다. 볼륨으로부터 재사용될 수 있는 최대 바이트들은 다음에 기초할 수 있다:
Figure 112008042010650-pct00001
볼륨 상의 자유 공간의 양; 자유 공간만이 볼륨으로부터 제거될 수 있고, 따라서 볼륨으로부터 제거될 수 있는 최대 공간은 자유 공간의 양과 같다.
Figure 112008042010650-pct00002
파일 시스템 내의 알려진 이동 불가능한 파일들의 위치; 볼륨 내의 특정 파일들은 이동될 수 없고, (일 구현에서는) 볼륨이 연속일 필요가 있으므로, 볼륨은 최대 볼륨 오프셋을 갖는 알려진 이동 불가능한 파일의 끝까지만 축소될 수 있다.
Figure 112008042010650-pct00003
남아 있는 볼륨의 기본 비율(default percentage); 상기 단계들에 의해 결정된 재생 가능한 공간(reclaimable space)을 공제한 후에, 그 결과를 재생 가능한 공간으로부터 공제하여 최대 이용 가능한 공간을 얻는다. 이것은 사용자에게 원래의 볼륨으로부터의 모든 공간을 재사용하지 않고 이용 가능한 공간이 있다면 조금이라도 갖는 볼륨에서 끝내도록 충고하는 한 가지 방법이다.
예시적인 함수:
Figure 112008042010650-pct00004
매개 변수:
pMaxNumberOfReclaimableBytes - 볼륨으로부터 재사용될 수 있는 최대 바이트 수를 반환한다.
차등 영역은 계류 중인 기입시 복사들로 인해 성장할 수 있다는 것에 유의한다. 그러한 성장을 가능하게 하기 위해, 재생 가능한 바이트들을 결정할 때, 예컨대, 10 퍼센트 차등 영역 성장을 허용하기 위해 버퍼가 이용될 수 있다. 그러나, 대안적으로 볼륨 스냅숏 메커니즘에 의해 유지되는 데이터, 예컨대, 함수 IOCTL_VOLSNAP_QUERY_COPY_FREE_BITMAP을 호출함으로써 볼륨 스냅숏 메커니즘으로부터 검색될 수 있는 기입시 복사 비트맵(copy-on-write bitmap)에 기초하여 보다 정확한 추정치를 얻는 것이 가능하다. 볼륨 스냅숏 메커니즘에 의해 반환된 기입시 복사 비트맵은 현재 볼륨 상에 있는 기입시 복사 클러스터들을 보여준다. 주어진 축소 경계에 기초하여 차등 영역 성장은 다음의 수학식에 의해 추정될 수 있다.
최대 차등 영역 성장 = 축소 경계를 넘어선 기입시 복사 클러스터들의 사이즈 + Min(축소 경계를 넘어선 할당된 클러스터들의 사이즈, 축소 경계 전의 기입시 복사 클러스터들의 사이즈)
수학식의 전반부는 차등 영역이 적어도 축소 경계를 넘어선 기입시 복사 클러스터들의 사이즈만큼 성장할 것이라는 사실에 기인한다. 이는 동작이 이 공간을 재생하고 있고, 기입시 복사 영역은 더 이상 판독을 위해 이용 가능하지 않을 것이고, 따라서 기입시 복사 영역은 차등 영역에 복사될 필요가 있기 때문이다.
수학식의 후반부는 축소 경계를 넘어서 존재하는 할당된 클러스터들을 축소 경계 전의 기입시 복사 클러스터들로 이동시키는 결과이다. 이것이 초래할 수 있는 최대 차등 영역 성장은 축소 경계를 넘어선 할당된 클러스터들의 사이즈(예컨대, 모든 할당된 클러스터들은 기입시 복사 클러스터들로 이동된다) 또는 축소 경계 전의 기입시 복사 클러스터들의 사이즈(예컨대, 모든 기입시 복사 클러스터들은 그 안에 이동된 할당된 클러스트를 갖는다)이다.
성능을 위하여, 축소 엔진(316)은 일어나고 파일 이동의 결과로 생기는 차등 영역 성장의 양을 최소화하려고 한다. 축소 엔진(316)은 이동되고 있는 각 범위가 동일한 볼륨 스냅숏 클러스터 정렬을 갖는 주어진 자유 공간 내의 위치로 이동되도록 보장함으로써 이를 행한다. 이것은 잘 알려진 조각 모음 엔진이 이용하는 동일한 최적화라는 것에 유의한다.
일반적으로, 축소 엔진(316)은 이 정렬 최적화를, 전체 연속 범위들을 전방으로 이동시키려고 시도하고 있는, 축소 알고리즘의 전반부에서만 적용한다. 최적화는 상술한 바와 같이 동작의 무차별 공격 부분 동안에는 적용되지 않는다.
또한 상술한 바와 같이, 축소 메서드가 볼륨을 지정된 사이즈만큼 축소시키는 축소 동작을 시작할 때, 축소 동작은 파일 시스템을 축소시키고, 그 후, 파일 시스템이 성공적으로 축소된 후에, 축소 동작은 기초가 되는 볼륨을 축소시킨다. 축소 동작은 전형적으로 비동기 동작인데, 이는 완료하는 데 상당한 양의 시간이 걸릴 수 있기 때문이다. 동작은 언제든지 취소될 수 있다. 취소가 일어나면, 볼륨 및 파일 시스템은 그들의 원래의 사이즈, 즉 축소 메서드가 호출되기 전의 사이즈를 유지한다.
예시적인 함수:
Figure 112008042010650-pct00005
매개 변수:
DesiredNumberOfReclaimableBytes - 볼륨으로부터 제거할 최대 바이트 량을지정한다. 축소 엔진은 볼륨을 이 양만큼 축소하려고 시도한다.
MinNumberOfReclaimableBytes - 볼륨으로부터 제거하기 위해 수용 가능할 수 있는 최소 바이트 량을 지정한다. 만일 최종 축소 사이즈가 이것보다 작으면, 축소를 위한 호출은 실패할 것이다. 이것은 항상 DesiredNumberOfReclaimableBytes 이하이어야 한다.
ppAsync - 사용자들이 취소 동작의 상태를 쿼리하거나, 취소 동작을 기다리거나 또는 취소할 수 있게 하는 IVdsAsync 인터페이스 포인터에의 포인터를 반환한다.
출력:
Async 개체는 볼륨으로부터 제거된 최종 바이트 수를 반환한다. 이 값은 IVdsAsync::Wait() 메서드에 의해 반환되는 VDS_ASYNC_OUTPUT 구조로 반환될 수 있다.
Figure 112008042010650-pct00006
예시적인 인터페이스 정의:
Figure 112008042010650-pct00007
Figure 112008042010650-pct00008
축소 엔진(316)은 또한 예시적인 VDS(312)에서 선언된 인터페이스들을 이용할 수도 있다. IVdsAsync 인터페이스는 비동기 축소 동작을 지원한다.
Figure 112008042010650-pct00009
축소 엔진(316)은 축소 진행에 관한 통지들을 VDS(312)에 보내기 위하여 IVdsAdviseSink 인터페이스에 호출할 수 있다:
Figure 112008042010650-pct00010
Figure 112008042010650-pct00011
사용자에 의해 지정된 축소 사이즈는 볼륨으로부터 제거할 바이트 수이다. NTFS에서는, 이 값은 NTFS 파일 시스템에서 행해지는 동작들이 클러스터 기반이므로 클러스터들의 수로 변환될 필요가 있고, 다른 파일 시스템들은 상이한 할당단위들을 가질 수 있다. 제거할 클러스터들의 수는 축소 사이즈를 파일 시스템 클러스터 사이즈로 나누고 반올림함으로써 결정된다. 이것은 클라이언트에게 볼륨으로부터 제거되는 양이 적어도 지정된 양일 수 있다는 것을 보증한다. 축소 볼륨 경계는 제거할 클러스터들의 수만큼 공제된 볼륨 내의 클러스터들의 총수와 같다.
QueryMaxReclaimableBytes 메서드는 이 특정 시점에서 볼륨이 축소될 수 있는 최대량을 반환한다. 이 값은 이 값이 반환된 후 임의의 시점에서 변화할 수 있다. 이는 볼륨은 온라인이고 따라서 그의 상태는 변화할 수 있기 때문이다. 최대 재생 가능한 바이트 수는 볼륨 상의 자유 공간의 양 및 볼륨 상의 이동 불가능한 파일 클러스터들의 위치에 의해 결정될 수 있다.
볼륨 상의 자유 공간의 양은 FileFsSizeInformation 클래스를 이용하여 구해질 수 있다. 이것은 볼륨 상의 미할당 클러스터들의 총수를 반환할 것이다. 이 값은 이상적으로는 볼륨이 축소될 수 있는 최대량, 예컨대, 모든 미할당 클러스터들이 볼륨의 끝에 이동될 수 있는 경우의 양이다. 관심 있는 이동 불가능한 파일들은 페이지 파일들 및 차등 영역 파일들을 포함하고; 파일 시스템의 메타데이터와 같은 다른 파일들도 이동 불가능하다. 이동 불가능한 파일은 그것을 이동시키려고 시도하여 이동이 실패하는지를 확인하는 것에 의해 발견될 수 있지만, 그러한 파일들을 찾아내는 다른 방법들도(예컨대, 파일 레코드를 통하여) 가능하다. 알려진 이동 불가능한 파일들에 대하여 파일 이름 비교가 수행될 수 있고; 페이지 파일들은 파일 레코드 이름을 PagingFiles 레지스트리 키 내의 이름 등과, 예컨대, Windows® 기반 운영 체제에서의 SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PagingFiles와 비교함으로써 발견될 수 있다. 볼륨 스냅숏 메커니즘은 최대 오프셋을 갖는 차등 영역 범위를 찾아내는 데 이용될 수 있다.
이들 파일들에 대한 범위들을 비교하여 최대 LCN(logical cluster number)을 갖는 클러스터를 차지하는 범위를 구할 수 있다. 이 LCN을 볼륨 내의 클러스터의 총수로부터 공제하면 이동 불가능한 범위들에 기초하여 볼륨으로부터 제거될 수 있는 최대 클러스터 수로 귀결된다. 최대 LCN을 갖는 클러스터를 차지하는 차등 영역 범위를 구하기 위해, IOCTL_VOLSNAP_QUERY_MINIMUM_SHRINK_SIZE가 이용될 수 있다.
그 후, 위에서 구해진 2개의 값들 중 최소값은, 어쩌면 이 값으로부터 볼륨의 나머지 사이즈의 일부(백분율, 예컨대, 10 퍼센트)를 공제하는 것과 함께 이용될 수 있다. 그 값은 다시 바이트로 변환되어 사용자에게 반환된다. 상술한 바와 같이, 하나의 대안 구현에서는, 반환된 값의 공제를 계산하여 축소의 결과로 생기는 잠재적인 차등 영역 파일 성장에 대한 어떤 대략의 공간을 남긴다는 것에 유의한다.
예시적인 함수
Figure 112008042010650-pct00012
Figure 112008042010650-pct00013
매개 변수
pwszVolumeName - 그 위의 최대 축소 사이즈를 쿼리할 볼륨의 이름을 지정한다.
pMaxNumberOfReclaimableBytes - 최대 재생 가능한 바이트 수를 반환한다.
축소 메서드는 축소 영역 내의 파일 범위들을 남아 있는 볼륨 내로 이동시키려고 시도한다. 잘 알려진 조각 모음 엔진은 파일 시스템 내의 모든 파일들을 디스크의 전방을 향하여 이동시키려고 한다는 점에서 어느 정도 유사하게 작용하지만, 축소 엔진과 달리, 조각 모음 엔진에게는 파일들을 그 안으로 이동시킬 경계가 주어지지 않는다는 것에 유의한다. 축소 엔진(316)에게는 그러한 경계(사용자가 지정한 축소 사이즈)가 주어지기 때문에, 조각 모음 엔진의 메서드들이 바로 이용될 수는 없다.
예시적인 함수
Figure 112008042010650-pct00014
매개 변수
pwszVolumeName - 축소할 볼륨을 지정한다.
volumeId - 축소될 볼륨의 VDS 볼륨 ID를 지정한다. 이것은 축소 엔진이 볼륨의 축소 진행에 관한 VDS 통지들을 반송할 때 축소 엔진에 의해 이용될 수 있다.
DesiredNumberOfReclaimableBytes - 볼륨으로부터 제거하여 재사용할 원하는 바이트 수를 지정한다. 축소 엔진은 이 양만큼 축소하려고 할 것이다.
MinNumberOfReclaimableBytes - 볼륨으로부터 제거하여 재사용하기 위해 허용 가능할 수 있는 최소 바이트 량을 지정한다. 만일 축소 사이즈가 이것보다 작다면, 축소를 위한 호출은 실패할 것이다.
ppAsync - 축소 동작이 비동기적으로 실행하는 동안 축소 동작을 관리하는 데 이용될 수 있는 IVdsAsync 인터페이스 포인터의 주소를 반환한다.
도 5를 참조하여 상술한 바와 같이, 축소 동작은 일반적으로 공간에 대하여 체크하고, 새로운 할당들을 제한하고, 범위들을 이동시키고 스냅숏 메커니즘과 통신하여 삭제된 데이터를 보전하고, 그 후 파일 사이즈 및 기초가 되는 볼륨 사이즈를 감소시킨다. 이 시점에서 파일 시스템은 사용자에 의해 지정된 축소량 범위 내의 어떤 양만큼 축소되었거나, 또는 사용자가 지정한 범위 내로 축소될 수 없었기 때문에 축소되지 않았거나 둘 중 어느 한쪽이다. 그 후 축소 엔진(316)은 비동기 인터페이스에게 축소 동작이 완료된 것을 통지하고 파일 시스템으로부터 제거된 실제 바이트 수를 반환할 것이다.
끝에 있는 자유 공간으로 전방으로 이동(move-to-front) 예에서, 축소 동작의 목적은 원하는 축소 영역 경계 LCN보다 큰 LCN을 갖는 임의의 할당된 클러스트들을 원하는 축소 영역 경계보다 작은 LCN을 갖는 어떤 클러스터로 이동시키는 것이다. 또한 볼륨을 축소시키는 경우에, 어떤 추가 파일도 조각화하려고 하지 않는 시도가 행해진다. 축소 영역 경계는 축소 엔진(316)이 볼륨이 지정된 사이즈만큼 축소될 수 있는지를 알기 위해 체크할 때 결정되었다는 것에 유의한다.
하나의 예시적인 구현에서는, 축소 알고리즘들은 이동될 필요가 있는 것을 계속 추적하기 위해 파일 범위 목록(file extent list)의 생성에 의지한다. 범위 목록들은 목록이 지정된 인덱스에 기초하여 용이하게 정렬(sort)될 수 있게 하는 AVL 트리로서 구현될 수 있다. 목록은 축소 경계보다 큰 시작 LCN을 갖는 각 파일 범위에 대한 항목을 포함할 수 있다.
아래는 파일 범위 항목에 대한 예시적인 구조이다:
Figure 112008042010650-pct00015
목록은 FSCTL_ENUM_USN_DATA 등을 이용하여 작성될 수 있다. 각 파일에 대하여, FSCTL_GET_RETRIEVAL_POINTERS를 이용하여 파일의 범위들이 획득된다. 각 범위에 대하여, 그것의 시작 LCN이 축소 경계보다 크거나 또는 그와 같은지를 알기 위한 체크가 행해진다. 만일 그렇다면, 그 범위에 대하여 파일 범위 항목이 생성되어 목록에 추가된다.
축소 알고리즘들은 또한 볼륨 상의 자유 공간 영역들의 목록을 구성 및 이용할 수 있다. 자유 공간 목록은 볼륨 비트맵을 이용하여 작성될 수 있고, 또한 AVL 트리로서 구현될 수 있다. 일반적으로, 목록은 볼륨 상에서 발견되는 각 자유 공간 영역에 대한 항목을 포함한다.
아래는 자유 공간 항목에 대한 구조이다:
Figure 112008042010650-pct00016
목록은 FSCTL_GET_VOLUME_BITMAP를 이용하여 비트맵을 획득함으로써 작성될 수 있다. 볼륨 비트맵을 획득할 때, 호출은 얼마나 많은 양의 볼륨 비트맵을 검색할지를 지정할 수 있다. 예를 들면, 호출은 축소 영역이 아니라, 남아 있는 볼륨 영역에 대한 비트맵만 요구된다는 것을 지정할 수 있다. 비트맵을 이용하여, 프로세스는 미할당 클러스터들의 영역들을 찾아서 비트맵을 스캔한다. 발견된 각 영역에 대하여 자유 공간 항목이 생성되어, 목록에 추가된다.
제1 단계에서 연속 할당들을 전방으로 이동시킴으로써 축소 절차를 수행하기 위하여, 파일 범위 목록이 생성되고 파일 범위 항목들은 범위 사이즈에 의해 가장 큰 것으로부터 가장 작은 것으로 정렬된다. 만일 이 단계가 실패하면, 축소 동작은 실패된다. 자유 공간 목록이 생성되고, 자유 공간 영역 항목들은 영역 사이즈에 의해 가장 작은 것으로부터 가장 큰 것으로 정렬된다. 자유 공간 목록을 생성할 때, 프로세스는 볼륨의 시작으로부터 축소 경계까지 자유 공간만을 검색할 것이다. 만일 이 단계가 실패하면, 축소 동작은 실패된다.
그 후 프로세스는 현 목록 인덱스로부터 시작하여 파일 범위 목록에 대하여 반복하고 자유 공간 목록에 대하여 반복한다. 만일 인덱스가 설정되어 있지 않다면, 프로세스는 목록의 처음으로부터 시작하고, 전체 연속 범위를 보유하기에 충분한 자유 공간 영역을 발견할 때, 또는 더 이상의 자유 공간 영역이 없을 때 중지한다.
만일 파일 범위에 대하여 충분히 큰 영역이 발견되면, 파일 범위는 그 발견된 영역 내로 이동된다. 예를 들면, 파일 범위는 파일 범위의 시작 VCN 및 자유 공간 영역의 시작 LCN를 넘겨주어, FSCTL_MOVE_FILE을 통하여 이동될 수 있다. 만일 공간이 충분하지 않은 때문에 이것이 실패하면, 프로세스는 다음 이용 가능한 자유 공간 영역을 찾기 위해 되돌아간다. 또한 공간이 충분하지 않은 때문에 파일 이동이 몇 회(예컨대, 5회) 실패하면, 프로세스는 자유 공간 영역 목록을 재생성하기 위해 되돌아간다. 이는 볼륨 자유 공간 상태가 변화하였을 수 있기 때문이다.
만일 MOVE_FILE 호출이 실패하면, 이것은 파일이 이동 불가능한 것으로 마킹되었음을 의미한다. 이 경우, 해당 파일은 스킵되고, 프로세스는 목록 내의 다음 파일로 나아간다.
파일 범위 항목이 파일 범위 목록으로부터 제거되고, 자유 공간 영역 항목이 제거된다. 항목은 새로운 사이즈 및 시작 LCN 정보로 업데이트되고, 업데이트된 항목은 자유 공간 영역 목록에 재삽입된다. 만일 더 이상의 파일 범위 항목이 없다면, 프로세스는 무차별 공격 접근법을 스킵한다.
상술한 바와 같이, 범위들을 이동시키는 제2 단계는 무차별 공격 단계이다. 이 단계에서는, 새로운 자유 공간 목록이 생성되고 LCN에 의해 가장 낮은 것으로부터 가장 높은 것으로 정렬된다. 자유 공간 목록은 축소 영역을 포함하는 전체 볼륨을 커버한다. 파일 범위 목록 상의 인덱스는 목록의 처음으로 리셋된다.
파일 범위 목록에 대하여 반복하기 위해, 자유 공간 목록으로부터 다음 자유 공간 영역이 획득된다. 만일 자유 공간 영역 LCN이 해당 범위의 LCN보다 크다면, 목록으로부터 해당 범위 항목이 제거되고, 다음 범위가 선택된다. 이는 이 범위는 볼륨의 전방에 더 가까이 이동될 수 없기 때문이다. 그렇지 않다면, 가능한 한 많은 양의 범위가 자유 공간 영역 내로 이동된다. 얼마나 많은 양의 범위가 자유 공간 영역 내로 이동될 수 있는지를 결정하고, 예컨대, (= Min(범위 사이즈, 자유 공간 영역 사이즈), 결정된 범위의 양은 FSCTL_MOVE_FILE을 이용하여 자유 공간 영역으로 이동된다. 만일 공간이 충분하지 않은 때문에 이것이 실패하면, 프로세스는 다음 이용 가능한 자유 공간 영역을 찾기 위해 되돌아간다. 또한 공간이 충분하지 않은 때문에 파일 이동이 몇 회(예전대, 5회) 실패하면, 프로세스는 자유 공간 영역 목록을 재생성하기 위해 되돌아간다. 이는 볼륨 자유 공간 상태가 변화하였을 수 있기 때문이다.
만일 파일이 이동 불가능한 것으로 마킹된 때문에 이동이 실패하면, 현 파일은 스캡되고 목록 내의 다음 파일이 선택된다. 자유 공간 영역 목록을 업데이트하기 위해, 만일 항목 영역이 이용되었다면, 항목으로부터 자유 공간 영역 항목이 제거되고, 그렇지 않다면 해당 영역 항목의 시작 LCN 및 클러스터 카운트가 업데이트된다. 만일 전체 범위가 이동되었다면, 이 범위 항목은 목록으로부터 제거되고, 다음 범위가 선택된다. 그렇지 않다면, 범위 정보는 새로운 시작 LCN 및 범위 길이로 업데이트된다. 그 후 프로세스는 다음 자유 영역을 획득하여 범위의 나머지를 그것에 이동시킨다.
이 시점에서, 축소 영역 내에 있었던 볼륨 내의 이동 가능한 클러스터들은 가능한 한 볼륨의 전방에 가까이 이동되었다.
이동될 큰 파일들은 보다 작은 이동 파일들로 분해될 수 있다는 것에 유의한다. 이는 이동의 완료를 기다릴 필요없이 볼륨 내에서 큰 파일들이 이동되고 있는 동안에 취소가 일어나는 것을 허용한다.
스냅숏 성능에 관하여, 축소 엔진(316)은 일어나고 있는 이동 파일들로부터 생기는 차등 영역 성장의 양을 최소화하려고 한다. 축소 엔진(316)은 이동되고 있는 범위가 동일한 스냅숏 클러스터 정렬을 갖는 주어진 자유 공간 내의 위치로 이동되도록 함으로써 이를 행한다(예컨대, 조각 모음이 수행하는 최적화와 유사함). 축소 엔진(316)은 이 정렬 최적화를, 전체 연속 범위들을 전방으로 이동시키려고 시도하고 있는, 축소 알고리즘의 전반부에서만 적용한다. 최적화는 알고리즘의 무차별 공격 부분 동안에는 적용되지 않는다.
상술한 바와 같이, 사용자 인터페이스 목적을 포함한 이유들 때문에, 축소 메서드는 비동기 구현으로서 구현될 수 있고, 호출될 경우 IVdsAsync 인터페이스에의 포인터를 넘겨줄 것이다. 이것은 VDS(312)가 현재 이용하는 동일한 인터페이스이다. 이 인터페이스는 클라이언트가 현 축소 동작을 취소하고, 기다리고 진행하는 것을 가능케 한다.
취소를 위해, MOVE_FILE에의 각 호출 전에, 축소 엔진(316)은 취소 요구가 행해졌는지를 확인하기 위해 체크한다. 만일 취소 요구가 있다면 축소 엔진(316)은 취소 요구에 의해 FSCTL_SHRINK_VOLUME을 호출하고, 통상의 내부 클린업(internal cleanup)(데이터 구조들을 깨끗이 정리(clean up)하고, 핸들들을 오픈시키는 등)을 수행하고, 비동기 개체에게 동작이 완료된 것을 신호한다. 본질적으로, 클린업 외에도, 중단(abort)이 할당 제한을 제거하고, 그에 의해 이전에 제한된 영역에 대해 장래의 할당들이 행해질 수 있다.
통지에 관해서는, 축소 엔진(316)은 진행중인 축소 동작들에 관한 통지들을 송신할 수 있다. 통지 송신 메커니즘은 VDS(312)가 현재 이용하고 있는 동일한 콜백 인터페이스(callback interface), 예컨대, IVdsAdvise 인터페이스일 수 있다. VDS(312)는 IShrinkEngine::Advise() 메서드를 이용하여 그 통지들에 대하여 등록한다. 축소 엔진(316)은 VDS(312)에게 축소 진행에 대하여 통지하기 위해 VDS_VOLUME_NOTIFICATION 구조들을 송신할 것이다:
Figure 112008042010650-pct00017
Figure 112008042010650-pct00018
새로운 값이 통지 이벤트 열거(notification event enumeration)에 추가될 수 있다:
Figure 112008042010650-pct00019
volumeID는 축소를 겪고 있는 볼륨에 대한 VDS 볼륨 ID로 설정될 수 있다. VDS(312)는 축소 엔진의 축소 메서드에 호출할 때 이 ID를 넘겨준다.
진행(progress)은 축소 영역에 범위들을 갖고 있는 피작용 파일들(files acted on)의 수에 의해 측정될 수 있다. 이 때문에, 원래의 파일 목록이 생성될 때, 목록 내의 파일들의 수가 저장될 수 있다. 목록 내의 각 파일이 축소 알고리즘을 통하여 작용을 받을 때, 진행은 업데이트될 수 있다. 이것은 이동되는 파일들의 수에 기초하지 않는다는 것에 유의한다. 대안적으로, 클러스터 카운트들은 파일 사이즈에 관계없다는 점에서, 보다 현실적인 지시를 제공하기 위하여, 파일 카운트 대신 클러스터 카운트 등에 의해 진행이 측정될 수도 있다. 이동될 필요가 있는 모든 파일들을 이동시키는 것이 가능하지 않을 수도 있지만, 그럼에도 축소는 완료에 도달할 필요가 있다. 통지의 수를 감소시키기 위하여, 어떤 임계량의 진행이 요구될 수도 있다. 예컨대, 추가 X 퍼센트(예컨대, 1 퍼센트)의 파일들이 작용을 받은 때마다 통지가 송신될 수 있다.
여기 예들에서는, 축소/조각 모음의 단 하나의 인스턴스만이 주어진 시간에 볼륨 상에서 실행되는 것으로 설명되어 있다. 그러나, 이것은, 후술되는 바와 같이, 다수의 프로세스들이 동시에 볼륨을 축소시킬 수 있기 때문에, 단지 단순화를 위한 것일 뿐이고, 이것은 아마도 전형적인 사용 패턴이 아닐 것이라는 점에 유의한다. 사용자가 이미 축소되고 있는(또는 다르게는 조각 모음과 같은 제한된 동작을 받고 있는) 불륨 상에서 축소를 호출하려고 할 때, 그러한 다중 동시 축소 작용을 방지하고자 한다면, 축소를 위한 호출은 우아하게 실패된다. 예컨대, 사용자에게 이 시간에 볼륨 상에서 축소가 실행될 수 없다는 것을 통지하는 오류 코드와 함께 실패된다.
예시적인 NTFS 구현에서는, 축소 동작을 지원하기 위해 다음의 FSCTL이 구현될 수 있다:
Figure 112008042010650-pct00020
이 FSCTL은 축소를 위해 볼륨 상의 NTFS 파일 시스템에게 준비시키고, 또한 파일 시스템의 실제 사이즈를 변경한다. 볼륨 상에서 단번에 하나의 축소 동작만이 행해질 수 있는 경우, 볼륨을 축소시키기 위한 후속 요구들은 실패할 것이다. 그러한 상황에서, 파일 시스템은 핸들에 의해 축소 동작 요구들을 추적한다. 주어진 축소 동작을 준비하고, 커밋하고, 중단하는 호출들은 동일 볼륨 핸들 상에서 행해질 수 있다. 그럼에도 불구하고, 대안 구현에서는, 예컨대, 상이한 프로세스들/핸들들을 통하여, 다수의 축소 동작들이 동시에 발생할 수 있다. 하나의 프로세스의 자유 공간이 실제로는 다른 프로세스에 의해 자유롭게 되는 공간인 경우와 같은 충돌형 상황을 피하기 위해, 또는 과도한 탐색(seeks)을 피하기 위해, 파일 시스템은 그러한 다중 축소 동작들을 코디네이트하는 데 연루될 수 있다.
준비 요구는 섹터 단위로 새로운 볼륨의 원하는 사이즈를 입력받는다. NTFS는 새로운 볼륨 경계 외부의 추가 할당들을 차단한다. 준비 요구는 볼륨이 실제로 지정된 양만큼 축소될 수 있는지를 확인하지는 않는다. 그러나, 준비 요구는 입력 인수들(arguments)에 대한 어떤 간단한 확인을 행할 수 있다. 예를 들면, 원하는 축소량이 볼륨 내의 클러스터들의 총수보다 크다면 요구는 준비 중에 실패할 것이다. 준비는 또한 볼륨 상에서 행해지는 다른 축소 요구가 이미 있는 경우에도 실패할 것이다.
준비 요구가 행해진 후, 축소를 요구한 애플리케이션이 커밋 또는 중단을 송신하기 전에 예상외로 닫힐 가능성이 있다. 파일 시스템은 축소 볼륨 요구를 애플리케이션의 핸들과 결합한다. 만일 핸들이 떠나버리면, 파일 시스템은 그러한 상태를 중단으로 취급할 것이다.
준비는 재생할 클러스터들의 수에 대한 상이한 값들을 가지고 동일한 핸들 상에서 여러 번 호출될 수 있다. 준비하는 요구는 어떤 출력도 반환하지 않을 수 있다.
커밋에 관해서는, 커밋 요구는 어떤 입력도 받지 않는다. 파일 시스템은 가장 최근의 준비 요구에 의해 지정된 수의 클러스트들을 제거하려고 하고, 파일 시스템을 축소시키기 전에 축소 영역 내에 할당된 클러스터들이 없는 것을 확인할 것이다. 만일 축소 영역 내에 할당된 클러스터들이 있다면, 커밋 요구는 실패할 것이다. 실패한 커밋은 볼륨을 준비된 상태로 되돌린다. 즉 그것은 경계를 적소에 남겨 둠으로써 호출자가 조정하여 다시 시도할 수 있도록 한다. 커밋하는 요구는 어떤 출력도 반환하지 않을 수 있다.
중단(Abort) 요구는 준비 요구에 의해 인스턴스화된 볼륨 할당 잠금을 제거한다. 중단하는 요구는 어떤 출력도 반환하지 않을 수 있다.
액세스 권리:
SE_MANAGE_VOLUME_PRIVILEGE는 호출자에 의해 유지되어야 한다.
볼스냅( Volsnap )
축소 동작을 지원하기 위해 볼스냅에서 다음 2개의 IOCTL들이 구현될 수 있다.
Figure 112008042010650-pct00021
설명
이 IOCTL은 상이한 영역 파일이 차지하는 가장 큰 LCN을 갖는 클러스터의 LCN을 반환한다.
액세스 권리
판독 액세스. 관리자들만 이 IOCTL을 이용할 수 있다.
Figure 112008042010650-pct00022
이 I0CTL_VOLSNAP_PREPARE_FOR_SHRINK IOCTL은 삭제된 파일들을 포함하는 축소 영역 내의 자유 클러스터들을 스냅숏을 위한 차등 영역 파일 내로 강제로 복사한다. 축소 영역은 입력된 축소 경계 LCN보다 큰 LCN을 갖는 모든 클러스터들에 의해 결정될 수 있다.
볼스냅은 삭제된 클러스터들을 차등 영역에 복사하기 전에 입력된 LCN보다 큰 차동 영역 파일들에 할당된 클러스터들이 없는 것을 확인한다. 이 IOCTL은 만일 축소 영역 내의 모든 삭제된 파일들을 차등 영역 내로 복사하기 위해 남아 있는 볼륨 내에 충분한 자유 공간이 남겨져 있지 않다면 실패할 수 있다. 이 경우, 프로세스는 사용자가 예컨대 루프에서 재시도하는 대신, 성공할 축소 경계를 가지고 IOCTL을 재시도할 수 있도록 호출이 성공하기 위해 필요한 공간의 양을 반환하려는 시도를 고려할 수 있다.
이 IOCTL은 잠재적으로 긴 동작일 수 있고 따라서 취소 가능할 수 있다.
액세스 권리
판독 및 기입 액세스. 관리자들만 이 IOCTL을 이용할 수 있다.
VDS 제공자들에 관해서는, 일단 커밋이 성공하면, VDS(312)는 볼륨을 축소시키기 위해 제공자에 호출한다. 기본 볼륨에 대하여, 기본 제공자는 IOCTL_DISK_GROW_PARTITION을 볼륨 관리자에게 발행할 것이다(볼륨 관리자는 그것을 파티션 관리자에게 전송한다). 그것은 다음의 매개 변수(들)를 받아들인다:
Figure 112008042010650-pct00023
BytesToGrow는 음(negative)일 수 있다 - 즉, 제공자는 (-NumberOfClustersRemoved*ClusterSize)를 공급한다.
파티션 관리자는 이 값이 음일 때 파티션을 축소시킨다.
동적인 볼륨들에 대해서는, 동적인 제공자는 IOCTL_VOLMGR_SHRINK_VOLUME을 해당 볼륨에 발행한다. 이것은 다음의 매개 변수(들)를 받아들인다:
Figure 112008042010650-pct00024
Figure 112008042010650-pct00025
DISKPART.EXE는 SHRINK라고 하는 새로운 명령을 지원한다. 작용 받을 볼륨은 전형적인 방식으로 선택된다. 예컨대:
Figure 112008042010650-pct00026
만일 DESIRED/MINIMUM이 공급되지 않으면, 명령의 결과로, 코드는 가장 가능한 사이즈(예컨대, QueryMaxReclaimableBytes를 통하여 얻어진 것)로 축소시키려고 시도하게 된다. 만일 하나의 값은 공급되고 다른 하나의 값은 공급되지 않으면, 코드는 다른 하나의 값은 동일한 값이라고 추정한다.
디폴트로, 축소를 위한 호출은 동기적일 수 있고 전체 축소 동작이 완료될 때까지 반환하지 않는다. 만일 축소가 완료하는 것을 기다라는 것이 바람직하지 않다면, NOWAIT 매개 변수가 지정될 수 있고, 그에 의해 호출은 비동기적으로 반환하고 축소는 실행을 계속한다. 만일 QUERYMAX가 지정되면, DiskPart는 볼륨으로부터 재생될 수 있는 추정 최대 사이즈를 디스플레이한다.
본 발명은 다양한 변형들 및 대안적인 구성들이 가능하지만, 본 발명의 특정 예시된 실시예들이 도면들에서 도시되어 있고 위에서 상세히 설명되었다. 그러나, 본 발명을 개시된 특정 형태들로 제한하려는 의도는 없고, 오히려, 의도하는 바는 모든 변형들, 대안적인 구성들, 및 본 발명의 정신 및 범위 내에 드는 균등물들을 포함하는 것이라는 것을 이해해야 할 것이다.

Claims (19)

  1. 온라인 볼륨 축소(online shrinking of a volume)를 위한 방법을 구현하기 위한 컴퓨터 판독가능한 저장 매체로서,
    상기 컴퓨터 판독가능한 저장 매체는, 프로세서에서 실행될 때 상기 방법을 수행하고 상기 컴퓨터 판독가능한 저장 매체에 저장되는 컴퓨터 실행가능 명령어들을 포함하며,
    상기 방법은,
    볼륨에 대한 볼륨 정보를 액세스하는 단계 - 상기 볼륨 정보는 상기 볼륨이 상기 컴퓨터 판독가능한 저장 매체 상의 제1 경계와 제2 경계 사이에 있다는 것을 나타내고, 상기 제1 경계와 상기 제2 경계는 상기 볼륨의 사이즈를 정의함 - ;
    상기 볼륨을 축소하기 위한 요청(request)을 수신하는 단계 - 상기 요청은 상기 컴퓨터 판독가능한 저장 매체 상의 상기 제1 경계와 상기 제2 경계 사이에 배치될 축소 경계(shrink boundary)를 포함함 - ;
    임의의 새로운 할당(allocation)이 상기 볼륨의 제1 영역 내에 존재하도록 할당을 제한하는 단계 - 상기 제1 영역은 상기 제1 경계와 상기 축소 경계 사이의 영역임 - ;
    상기 축소 경계와 상기 제2 경계 사이에 축소 구역(shrink region)을 생성하도록 상기 축소 경계와 상기 제2 경계 사이의 영역에 있는 제2 영역으로부터 상기 제1 영역으로 볼륨 데이터의 이동을 개시하는 단계 - 상기 축소 구역은 상기 컴퓨터 판독가능한 저장 매체 상의 새로운 볼륨을 위해 사용될 수 있는 자유로워진 공간(freed up space)을 나타냄 - ;
    상기 제2 영역으로부터 상기 제1 영역으로의 상기 볼륨 데이터의 이동 개시에 뒤이어 그리고 이동 중에 새로운 할당을 위한 요청을 수신하는 단계;
    상기 제2 영역으로부터 상기 제1 영역으로의 상기 볼륨 데이터의 이동 중에 그리고 이와 병행하여 상기 제1 영역 내의 위치(location)로만 새로운 할당 요청을 허용하는 단계; 및
    볼륨 데이터가 상기 제2 영역 내에 남아 있지 않은 경우에 상기 축소를 커밋(commit)하는 단계를 포함하는
    컴퓨터 판독가능한 저장 매체.
  2. 제1항에 있어서,
    상기 방법은, 상기 경계 내에 상기 데이터를 이동시킬 충분한 공간이 존재하는지를 추정하는 단계를 더 포함하는
    컴퓨터 판독가능한 저장 매체.
  3. 제2항에 있어서,
    충분한 공간이 존재하는지를 추정하는 단계는 임의의 알려진 이동 불가능한 파일들(unmovable files)을 찾아내는(locate) 단계를 포함하는
    컴퓨터 판독가능한 저장 매체.
  4. 제2항에 있어서,
    충분한 공간이 존재하는지를 추정하는 단계는 현재 차등 영역(differential area) 내에 있지 않은 스냅숏 데이터(snap data)가 상기 차등 영역과 연관되는 것을 요구하는 단계를 포함하는
    컴퓨터 판독가능한 저장 매체.
  5. 제4항에 있어서,
    충분한 공간이 존재하는지를 추정하는 단계는 차등 영역 성장을 제공하기 위한 버퍼를 고려하는(factoring in) 단계를 포함하는
    컴퓨터 판독가능한 저장 매체.
  6. 제4항에 있어서,
    충분한 공간이 존재하는지를 추정하는 단계는 차등 영역 사이즈 데이터에 대응하는 정보를 볼륨 스냅숏 메커니즘(volume snapshot mechanism)으로부터 획득하는 단계를 포함하는
    컴퓨터 판독가능한 저장 매체.
  7. 제1항에 있어서,
    상기 볼륨 데이터를 이동시키는 단계는 비동기적으로 수행되는
    컴퓨터 판독가능한 저장 매체.
  8. 제1항에 있어서,
    상기 새로운 할당들을 상기 축소 경계 앞에 있도록 제한하고 상기 볼륨 데이터를 상기 축소 경계 외부로부터 상기 축소 경계 앞으로 이동시킴으로써, 상기 볼륨이 상기 컴퓨터 판독가능한 저장 매체의 전방에 있도록 축소되는
    컴퓨터 판독가능한 저장 매체.
  9. 제1항에 있어서,
    상기 방법은, 상기 축소 구역 내에 적어도 하나의 새로운 볼륨 또는 파티션 또는 이들 모두를 생성하는 단계를 더 포함하는
    컴퓨터 판독가능한 저장 매체.
  10. 제9항에 있어서,
    하나의 볼륨 또는 파티션 또는 이들 모두가 상기 컴퓨터 판독가능한 저장 매체의 말단(end)에 생성되는
    컴퓨터 판독가능한 저장 매체.
  11. 적어도 하나의 컴퓨팅 장치를 갖는 컴퓨팅 환경 내의 시스템으로서,
    프로세서;
    시스템 메모리; 및
    축소 엔진 및 파일 시스템 컴포넌트를 저장하는 적어도 하나의 컴퓨터 판독가능한 저장 매체 - 상기 축소 엔진 및 상기 파일 시스템 컴포넌트는 상기 프로세서에 의해 실행됨 - 를 포함하되,
    상기 축소 엔진은,
    볼륨에 관한 볼륨 정보 - 상기 볼륨 정보는 상기 볼륨이 상기 컴퓨터 판독가능한 저장 매체 상의 제1 경계와 제2 경계 사이에 있다는 것을 나타내고, 상기 제1 경계와 상기 제2 경계는 상기 볼륨의 사이즈를 정의함 - 를 액세스를 하고,
    볼륨들을 축소하기 위한 요청(request) - 상기 요청은 상기 컴퓨터 판독가능한 저장 매체 상의 상기 제1 경계와 상기 제2 경계 사이에 배치될 축소 경계(shrink boundary)를 포함하고, 상기 축소 경계의 배치는 상기 제1 경계와 상기 축소 경계 사이의 영역에 있는 제1 영역 및 상기 축소 경계와 상기 제2 경계 사이에 영역에 있는 제2 영역을 형성함 - 을 수신하며,
    상기 축소 경계와 상기 제2 경계 사이에 축소 구역(shrink region) - 상기 축소 구역은 상기 컴퓨터 판독가능한 저장 매체 상의 새로운 볼륨을 위해 사용될 수 있는 자유로워진 공간(freed up space)을 나타냄 - 을 생성하기 위해 상기 제2 영역으로부터 상기 제1 영역으로 볼륨 데이터의 이동을 개시하도록 구성되고,
    상기 파일 시스템 컴포넌트는 상기 축소 엔진과 통신하며,
    상기 파일 시스템 컴포넌트는,
    상기 볼륨 및 파티션 중 하나 이상의 임의의 위치로부터 판독 동작을 허용하면서 상기 제1 영역에서만 할당을 허용하고,
    상기 제2 영역으로부터 상기 제1 영역으로 볼륨 데이터를 이동시키며,
    상기 제2 영역으로부터 상기 제1 영역으로의 볼륨 데이터의 이동 개시에 뒤이어 그리고 이동 중에 새로운 할당을 위한 요청을 수신하고,
    상기 제2 영역으로부터 상기 제1 영역으로의 볼륨 데이터의 이동 중에 그리고 이와 병행하여 상기 제1 영역 내의 위치로의 새로운 할당 요청을 허용하도록 구성되며,
    상기 축소 엔진은 볼륨 데이터가 상기 제2 영역 내에 남아 있지 않은 경우에 축소를 커밋(commit)하도록 추가로 구성되는
    시스템.
  12. 제11항에 있어서,
    스냅숏 관련 데이터를 보전하도록 상기 축소 엔진 및 파일 시스템 중 하나 이상과 통신하는 볼륨 스냅숏 메커니즘을 더 포함하는
    시스템.
  13. 제11항에 있어서,
    상기 축소 엔진은 축소 동작을 취소하도록 추가로 구성되는
    시스템.
  14. 제11항에 있어서,
    상기 축소 엔진은 상기 제2 영역으로부터 상기 제1 영역으로의 볼륨 데이터의 이동 진행에 대응하는 정보를 제공하도록 추가로 구성되는
    시스템.
  15. 삭제
  16. 삭제
  17. 삭제
  18. 삭제
  19. 삭제
KR1020087014150A 2005-12-16 2008-06-12 온라인 저장 볼륨 축소를 위한 컴퓨터 판독가능 매체,시스템, 및 방법 KR101343212B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/303,419 2005-12-16
US11/303,419 US7409523B2 (en) 2005-12-16 2005-12-16 Online storage volume shrink
PCT/US2006/046818 WO2007078576A2 (en) 2005-12-16 2006-12-06 Online storage volume shrink

Publications (2)

Publication Number Publication Date
KR20080075873A KR20080075873A (ko) 2008-08-19
KR101343212B1 true KR101343212B1 (ko) 2013-12-20

Family

ID=38162180

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020087014150A KR101343212B1 (ko) 2005-12-16 2008-06-12 온라인 저장 볼륨 축소를 위한 컴퓨터 판독가능 매체,시스템, 및 방법

Country Status (4)

Country Link
US (1) US7409523B2 (ko)
KR (1) KR101343212B1 (ko)
CN (1) CN101331444A (ko)
WO (1) WO2007078576A2 (ko)

Families Citing this family (57)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1816563B1 (en) * 2006-01-26 2016-04-27 Infortrend Technology, Inc. Method of managing data snapshot images in a storage system
US8990153B2 (en) * 2006-02-07 2015-03-24 Dot Hill Systems Corporation Pull data replication model
US7685459B1 (en) 2006-04-13 2010-03-23 Symantec Operating Corporation Parallel backup
US20070300033A1 (en) * 2006-06-21 2007-12-27 Hitachi, Ltd. System and method for reconfiguring continuous data protection system upon volume size change
US8751467B2 (en) * 2007-01-18 2014-06-10 Dot Hill Systems Corporation Method and apparatus for quickly accessing backing store metadata
US7827146B1 (en) 2007-03-30 2010-11-02 Symantec Operating Corporation Storage system
US7716183B2 (en) * 2007-04-11 2010-05-11 Dot Hill Systems Corporation Snapshot preserved data cloning
US7975115B2 (en) * 2007-04-11 2011-07-05 Dot Hill Systems Corporation Method and apparatus for separating snapshot preserved and write data
US7769725B2 (en) * 2007-04-23 2010-08-03 International Business Machines Corporation File profiling to minimize fragmentation
US8001345B2 (en) * 2007-05-10 2011-08-16 Dot Hill Systems Corporation Automatic triggering of backing store re-initialization
US8204858B2 (en) * 2007-06-25 2012-06-19 Dot Hill Systems Corporation Snapshot reset method and apparatus
EP2176766A2 (en) * 2007-08-01 2010-04-21 Nxp B.V. Mobile communication device and method for defragging mifare memory
US8886909B1 (en) 2008-03-31 2014-11-11 Emc Corporation Methods, systems, and computer readable medium for allocating portions of physical storage in a storage array based on current or anticipated utilization of storage array resources
US8443369B1 (en) 2008-06-30 2013-05-14 Emc Corporation Method and system for dynamically selecting a best resource from each resource collection based on resources dependencies, prior selections and statistics to implement an allocation policy
US8234316B2 (en) * 2008-09-30 2012-07-31 Microsoft Corporation Nested file system support
US8311964B1 (en) 2009-11-12 2012-11-13 Symantec Corporation Progressive sampling for deduplication indexing
US8156304B2 (en) * 2009-12-04 2012-04-10 Oracle International Corporation Dynamic data storage repartitioning
US8473463B1 (en) 2010-03-02 2013-06-25 Symantec Corporation Method of avoiding duplicate backups in a computing system
US8407445B1 (en) * 2010-03-31 2013-03-26 Emc Corporation Systems, methods, and computer readable media for triggering and coordinating pool storage reclamation
US8924681B1 (en) 2010-03-31 2014-12-30 Emc Corporation Systems, methods, and computer readable media for an adaptative block allocation mechanism
US8370315B1 (en) 2010-05-28 2013-02-05 Symantec Corporation System and method for high performance deduplication indexing
US8443163B1 (en) 2010-06-28 2013-05-14 Emc Corporation Methods, systems, and computer readable medium for tier-based data storage resource allocation and data relocation in a data storage array
US9311002B1 (en) 2010-06-29 2016-04-12 Emc Corporation Systems, methods, and computer readable media for compressing data at a virtually provisioned storage entity
US8983952B1 (en) 2010-07-29 2015-03-17 Symantec Corporation System and method for partitioning backup data streams in a deduplication based storage system
US8756197B1 (en) 2010-08-13 2014-06-17 Symantec Corporation Generating data set views for backup restoration
US8291170B1 (en) 2010-08-19 2012-10-16 Symantec Corporation System and method for event driven backup data storage
CN101938516B (zh) * 2010-09-02 2012-11-14 华中科技大学 一种面向用户的动态分配存储资源的方法
US8392376B2 (en) 2010-09-03 2013-03-05 Symantec Corporation System and method for scalable reference management in a deduplication based storage system
US8396841B1 (en) 2010-11-30 2013-03-12 Symantec Corporation Method and system of multi-level and multi-mode cloud-based deduplication
US8392384B1 (en) 2010-12-10 2013-03-05 Symantec Corporation Method and system of deduplication-based fingerprint index caching
US20120284474A1 (en) * 2011-05-06 2012-11-08 International Business Machines Corporation Enabling recovery during data defragmentation
US8745327B1 (en) 2011-06-24 2014-06-03 Emc Corporation Methods, systems, and computer readable medium for controlling prioritization of tiering and spin down features in a data storage system
CN102929884B (zh) * 2011-08-10 2016-05-04 阿里巴巴集团控股有限公司 一种收缩虚拟磁盘镜像文件的方法及装置
US8589640B2 (en) 2011-10-14 2013-11-19 Pure Storage, Inc. Method for maintaining multiple fingerprint tables in a deduplicating storage system
US8886963B2 (en) * 2011-09-15 2014-11-11 Apple Inc. Secure relocation of encrypted files
CN102411524A (zh) * 2011-12-30 2012-04-11 云海创想信息技术(天津)有限公司 一种快照卷数据拷贝方法
US9372910B2 (en) * 2012-01-04 2016-06-21 International Business Machines Corporation Managing remote data replication
CN102693325B (zh) * 2012-06-12 2014-06-11 腾讯科技(深圳)有限公司 一种文件存储方法和装置
US10275397B2 (en) 2013-02-22 2019-04-30 Veritas Technologies Llc Deduplication storage system with efficient reference updating and space reclamation
US10013217B1 (en) * 2013-06-28 2018-07-03 EMC IP Holding Company LLC Upper deck file system shrink for directly and thinly provisioned lower deck file system in which upper deck file system is stored in a volume file within lower deck file system where both upper deck file system and lower deck file system resides in storage processor memory
US9424137B1 (en) * 2013-09-27 2016-08-23 Emc Corporation Block-level backup of selected files
US10922183B2 (en) * 2014-02-11 2021-02-16 Microsoft Technology Licensing, Llc In-place disk unformatting
US9575680B1 (en) 2014-08-22 2017-02-21 Veritas Technologies Llc Deduplication rehydration
US10423495B1 (en) 2014-09-08 2019-09-24 Veritas Technologies Llc Deduplication grouping
US9628350B2 (en) * 2014-11-05 2017-04-18 Amazon Technologies, Inc. Dynamic scaling of storage volumes for storage client file systems
US10067945B2 (en) * 2015-02-24 2018-09-04 Quest Software Inc. File and move data to shrink datafiles
CN104866237A (zh) * 2015-05-08 2015-08-26 深圳市金立通信设备有限公司 一种终端
US10831706B2 (en) * 2016-02-16 2020-11-10 International Business Machines Corporation Database maintenance using backup and restore technology
US10635344B2 (en) * 2016-04-27 2020-04-28 International Business Machines Corporation Dynamic spare storage allocation by creating logical volumes from unused space allocated for user data of a raid storage
US9934163B1 (en) * 2016-09-30 2018-04-03 EMC IP Holding Company LLC Selectively delaying cache flushing to promote write efficiency
US9933945B1 (en) * 2016-09-30 2018-04-03 EMC IP Holding Company LLC Efficiently shrinking a dynamically-sized volume
US10671525B2 (en) * 2017-06-21 2020-06-02 International Business Machines Corporation Space reclamation in data deduplication storage systems
US11860834B1 (en) * 2017-11-01 2024-01-02 EMC IP Holding Company LLC Reporting of space savings due to pattern matching in storage systems
US10929342B2 (en) * 2018-07-30 2021-02-23 EMC IP Holding Company LLC Techniques for limiting the maximum storage consumed by a file system without shrinking an underlying volume
CN109358806A (zh) * 2018-09-25 2019-02-19 郑州云海信息技术有限公司 卷远程容量收缩方法、装置、设备及可读存储介质
CN114253460A (zh) * 2020-09-23 2022-03-29 伊姆西Ip控股有限责任公司 管理存储池的方法、设备和计算机程序产品
US20220244869A1 (en) * 2021-02-02 2022-08-04 Micron Technology, Inc. File system storage allocation based on zones of a memory device

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6249792B1 (en) 1998-12-16 2001-06-19 Microsoft Corporation On-line dynamic file shrink facility

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5109485A (en) * 1988-08-30 1992-04-28 Ncr Corporation Method for transferring data between memories
US5706472A (en) * 1995-02-23 1998-01-06 Powerquest Corporation Method for manipulating disk partitions
US6002866A (en) 1995-09-01 1999-12-14 Sun Microsystems, Inc. Partitioning within a partition in a disk file storage system
US6023744A (en) 1997-03-07 2000-02-08 Microsoft Corporation Method and mechanism for freeing disk space in a file system
US6012130A (en) 1997-09-04 2000-01-04 Siemens Information And Communication Networks, Inc. Method and apparatus for automated disk drive upgrades
US6526493B1 (en) 1999-03-30 2003-02-25 Adaptec, Inc. Method and apparatus for partitioning and formatting a storage media without rebooting by creating a logical device control block (DCB) on-the-fly
US6850959B1 (en) 2000-10-26 2005-02-01 Microsoft Corporation Method and system for transparently extending non-volatile storage
WO2002058124A1 (fr) * 2001-01-18 2002-07-25 Tokyo Electron Limited Générateur de plasma et procédé correspondant
JP4141665B2 (ja) 2001-07-10 2008-08-27 株式会社日立製作所 ストレージの運用方法およびこれに用いるストレージおよび遠隔ストレージ
EP1490771A4 (en) 2002-04-03 2007-11-21 Powerquest Corp USING DISSOCIATED PICTURES TO THE COMPUTER? AND MEMORY MANAGEMENT
US7249152B2 (en) 2002-05-24 2007-07-24 Oracle International Corporation Dynamic disk space management by multiple database server instances in a cluster configuration
US6996695B2 (en) 2002-07-17 2006-02-07 Masse Wayne P Method, system, and storage medium for optimizing disk space and information access
US7107385B2 (en) * 2002-08-09 2006-09-12 Network Appliance, Inc. Storage virtualization by layering virtual disk objects on a file system
US7146389B2 (en) 2002-08-30 2006-12-05 Hitachi, Ltd. Method for rebalancing free disk space among network storages virtualized into a single file system view
WO2005062303A1 (en) * 2003-12-19 2005-07-07 Koninklijke Philips Electronics N.V. Optical disc for storing both data requiring defect management and real-time av data
TW200636457A (en) * 2005-04-14 2006-10-16 Farstone Tech Inc Method for modifying hard disk partition

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6249792B1 (en) 1998-12-16 2001-06-19 Microsoft Corporation On-line dynamic file shrink facility

Also Published As

Publication number Publication date
KR20080075873A (ko) 2008-08-19
WO2007078576A2 (en) 2007-07-12
US7409523B2 (en) 2008-08-05
WO2007078576A3 (en) 2007-09-20
CN101331444A (zh) 2008-12-24
US20070143563A1 (en) 2007-06-21

Similar Documents

Publication Publication Date Title
KR101343212B1 (ko) 온라인 저장 볼륨 축소를 위한 컴퓨터 판독가능 매체,시스템, 및 방법
US8074035B1 (en) System and method for using multivolume snapshots for online data backup
US7827375B2 (en) Defensive heap memory management
US9665304B2 (en) Storage system with fast snapshot tree search
US8051044B1 (en) Method and system for continuous data protection
US9430331B1 (en) Rapid incremental backup of changed files in a file system
US7181585B2 (en) Defensive heap memory management
US6651075B1 (en) Support for multiple temporal snapshots of same volume
US7363540B2 (en) Transaction-safe FAT file system improvements
US8700585B2 (en) Optimistic locking method and system for committing transactions on a file system
US10599337B2 (en) Method and device for writing data and acquiring data in a distributed storage system
US8799333B2 (en) Delayed deletion of extended attributes
US20040030951A1 (en) Instantaneous restoration of a production copy from a snapshot copy in a data storage system
US20080098156A1 (en) Operating system and data protection
US20070011418A1 (en) Snapshot creating method and apparatus
EP0566967A2 (en) Method and system for time zero backup session security
US20210109900A1 (en) Inline and post-process data deduplication for a file system
US8655847B2 (en) Mirroring data changes in a database system
US20130232379A1 (en) Restoring distributed shared memory data consistency within a recovery process from a cluster node failure
EP1636690B1 (en) Managing a relationship between one target volume and one source volume
US20240126706A1 (en) Local page writes via pre-staging buffers for resilient buffer pool extensions
JP2002532778A (ja) ディスクスペース割当て量枠の見込み実働化のためのページ可能フィルタドライバ
US7877424B2 (en) Quota enforcement with transacted file systems
US20060069888A1 (en) Method, system and program for managing asynchronous cache scans
US7996370B2 (en) System restoration apparatus and method for management of dependencies, ordering sensitivities, and database index rebuilds

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20161123

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20171117

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20181115

Year of fee payment: 6