다음을 통해 공유


스파스 파일 작업

파일 시스템에서 스파스 파일을 지원하는지 여부를 확인하려면 GetVolumeInformation 함수를 호출하고 lpFileSystemFlags 매개 변수를 통해 반환된 FILE_SUPPORTS_SPARSE_FILES 비트 플래그를 검사합니다.

대부분의 애플리케이션은 스파스 파일을 인식하지 못하며 스파스 파일을 만들지 않습니다. 애플리케이션이 스파스 파일을 읽고 있다는 사실은 애플리케이션에 투명합니다. 스파스 파일을 인식하는 애플리케이션은 해당 데이터 세트가 스파스 파일에 보관하기에 적합한지 여부를 결정해야 합니다. 이 결정을 내린 후 애플리케이션은 FSCTL_SET_SPARSE 제어 코드를 사용하여 파일을 스파스로 명시적으로 선언해야 합니다.

애플리케이션이 파일을 스파스로 설정한 후 애플리케이션은 FSCTL_SET_ZERO_DATA 제어 코드를 사용하여 파일의 영역을 0으로 설정할 수 있습니다. 또한 애플리케이션은 FSCTL_QUERY_ALLOCATED_RANGES 제어 코드를 사용하여 스파스 파일에서 0이 아닌 데이터를 빠르게 검색할 수 있습니다.

데이터가 0이 아닌 값으로 구성된 쓰기 작업(FSCTL_SET_ZERO_DATA 이외의 함수 또는 연산 포함)을 수행하면 쓰기의 전체 길이 동안 0이 디스크에 기록됩니다. 파일 범위를 0으로 지정하고 스파스를 유지하려면 FSCTL_SET_ZERO_DATA를 사용합니다.

스파스 인식 애플리케이션은 기존 파일을 스파스로 설정할 수도 있습니다. 애플리케이션이 기존 파일을 스파스로 설정하는 경우 파일에 0이 포함된 지역이 있는지 검색하고 FSCTL_SET_ZERO_DATA를 사용하여 해당 지역을 다시 설정하여 일부 실제 디스크 스토리지의 할당을 취소할 수 있습니다. 스파스 파일 인식으로 업그레이드된 애플리케이션은 이 변환을 수행해야 합니다.

스파스 파일의 비워진 부분에서 읽기 작업을 수행하면 운영 체제가 하드 디스크 드라이브에서 읽지 못할 수 있습니다. 대신, 시스템은 읽을 파일의 부분에 0이 포함되어 있음을 인식하고 실제로 디스크에서 읽지 않고 0으로 가득 찬 버퍼를 반환합니다.

다른 파일과 마찬가지로 시스템은 스파스 파일의 모든 위치에서 데이터를 쓰거나 읽을 수 있습니다. 0이 아닌 데이터가 이전에 0인 파일 부분에 기록되면 디스크 공간이 할당될 수 있습니다. 0이 아닌 데이터에 0을 쓰면(FSCTL_SET_ZERO_DATA만 사용) 디스크 공간의 할당이 취소될 수 있습니다.

참고

FSCTL_SET_ZERO_DATA로 0을 작성하여 스파스를 유지하는 것은 애플리케이션에 달려 있습니다.

 

NTFS 파일 시스템에서 압축된 파일을 처리하는 조각 모음 도구는 NTFS 파일 시스템 볼륨에서 스파스 파일을 올바르게 처리합니다. 크고 조각화된 스파스 파일은 사용 가능한 공간이 사용되기 전에 디스크 익스텐트의 NTFS 제한을 초과할 수 있습니다.