맨위로가기

스파스 파일

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

스파스 파일은 실제 데이터가 있는 부분만 저장하고 빈 공간은 메타데이터로 관리하여 디스크 공간을 절약하는 파일 형식이다. 스파스 파일은 가상 머신 이미지 파일과 같이 큰 파일 크기를 필요로 하지만 실제 데이터는 적은 경우에 유용하며, 저장 공간 절약, 쓰기 시간 단축 등의 장점이 있다. 그러나 단편화, 파일 시스템 용량 보고 오류, 호환성 문제 등의 단점도 존재한다. 유닉스 계열 시스템에서는 `dd`, `truncate`, `fallocate` 등의 명령어를 사용하여 스파스 파일을 생성하고, `ls`, `du`, `filefrag` 등의 명령어를 통해 스파스 파일의 정보를 확인할 수 있다.

더 읽어볼만한 페이지

  • 컴퓨터 파일 - 전자 문서
    전자 문서는 19세기 전신 기술에서 시작되어 컴퓨터 기술 발전과 함께 발전해 온, 정보를 전자적인 형태로 기록한 문서를 의미하며, 파일 포맷 비호환성 등의 과제 해결 노력과 함께 대한민국에서는 법적 효력을 인정받고 신뢰성을 높이는 제도들이 시행되고 있다.
  • 컴퓨터 파일 - 긴 파일 이름
    긴 파일 이름은 FAT 파일 시스템에서 긴 파일 이름을 지원하기 위해 사용되는 기술이며, 마이크로소프트는 VFAT 규칙을 통해 호환성을 확보하고 윈도우 95에서 처음 LFN을 도입했다.
스파스 파일
파일 형식 정보
종류컴퓨터 파일

2. 장점

스파스 파일은 실제로 데이터가 기록된 부분만 디스크에 저장하고, 빈 공간은 메타데이터로만 관리하여 저장 용량을 크게 절약할 수 있다. 또한, 빈 영역에 NULL 바이트를 대량으로 기록할 필요가 없으므로 쓰기 시간을 단축할 수 있다.[1]

2. 1. 저장 공간 절약

스파스 파일은 실제로 데이터가 기록된 부분만 디스크에 저장하고, 빈 공간은 메타데이터로만 관리하여 저장 용량을 크게 절약할 수 있다. 원본 파일에 대한 여유 공간이 저장 매체에 충분하지 않더라도 큰 파일을 생성할 수 있다. 또한, 시스템이 "건너뛴" 공간에 대한 블록을 할당할 필요가 없으므로 첫 번째 쓰기 시간이 단축된다. 초기 할당에 공간에 모든 0을 써야 하는 경우 시스템이 "건너뛴" 공간을 두 번 덮어쓰는 것을 막을 수도 있다.[1]

예를 들어, 최대 크기가 100GB인 가상 머신 이미지가 실제로 2GB의 파일이 쓰여졌다면 사전 할당된 저장 공간에서는 100GB가 필요하지만 스파스 파일에서는 2GB만 필요하다. 파일 시스템이 홀 펀칭을 지원하고 게스트 운영 체제가 TRIM 명령을 발행하는 경우 게스트에서 파일을 삭제하면 그에 따라 필요한 공간이 줄어든다.[1]

2. 2. 쓰기 시간 단축

시스템이 "건너뛴" 공간에 대한 블록을 할당할 필요가 없으므로, 첫 번째 쓰기 시간이 단축된다. 초기 할당 시 공간에 모든 0을 써야 하는 경우, 시스템이 "건너뛴" 공간을 두 번 덮어쓰는 것을 막을 수 있다.[1]

2. 3. 예시

예를 들어, 최대 100GB의 가상 머신 이미지가 실제로 2GB의 파일만 쓰여졌다면 사전 할당된 저장 공간에서는 100GB가 필요하지만 스파스 파일에서는 2GB만 필요하다.[1] 파일 시스템이 홀 펀칭을 지원하고 게스트 운영 체제가 TRIM 명령을 발행하는 경우, 게스트에서 파일을 삭제하면 그에 따라 필요한 공간이 줄어든다.[1]

3. 단점

스파스 파일은 몇 가지 단점을 가지고 있다.[1]


  • 단편화되기 쉽다.
  • 파일 시스템의 사용 가능한 공간 보고가 잘못될 수 있다.
  • 예상치 못한 오류를 발생시킬 수 있다.
  • 일부 프로그램이나 백업 소프트웨어와의 호환성 문제가 있을 수 있다.
  • NTFS 스파스 파일은 압축이 불가능하다.


VFS 구현은 이러한 단점 중 일부를 해결한다.[1]

3. 1. 단편화

스파스 파일은 단편화되기 쉬우며, 파일 시스템의 사용 가능한 공간 보고가 잘못될 수 있다. 스파스 파일을 포함하는 파일 시스템을 채우면 예상치 못한 결과(예: 스파스였던 파일의 기존 부분을 덮어쓰는 경우 디스크 부족 또는 할당량 초과 오류 발생)를 초래할 수 있다.[1] 또한, 스파스 파일을 명시적으로 지원하지 않는 프로그램으로 스파스 파일을 복사하면, 저장 매체에 할당되지 않은 0 섹션을 포함하여 파일의 전체 압축되지 않은 크기가 복사되어 파일의 스파스 속성에 따른 이점을 잃을 수 있다.[1] 모든 백업 소프트웨어 또는 애플리케이션에서 스파스 파일이 완전히 지원되지 않을 수도 있다.[1]

스파스 파일은 조각화를 일으키기 쉽다.[1] 파일 시스템 상의 여유 공간 정보는 오해를 불러일으키기 쉬우며, 파일 시스템에 스파스 파일이 많이 존재하면, 스파스 파일의 여유 공간에 덮어쓰기가 발생했을 때 디스크 부족이나 할당량 초과 오류가 발생하는 등 예측하기 어려운 오류가 발생하기 쉽다.[1]

3. 2. 파일 시스템 용량 보고 문제

파일 시스템의 사용 가능한 공간 보고는 잘못될 수 있다. 스파스 파일은 실제 사용량보다 큰 용량을 차지하는 것처럼 보일 수 있다. 스파스 파일을 포함하는 파일 시스템을 채우면 예상치 못한 결과가 발생할 수 있는데, 예를 들어 스파스였던 파일의 기존 부분을 덮어쓸 때 디스크 부족 또는 할당량 초과 오류가 발생할 수 있다. 또한, 스파스 파일을 명시적으로 지원하지 않는 컴퓨터 프로그램으로 스파스 파일을 복사하면, 저장 매체에 할당되지 않은 0 섹션을 포함하여 파일의 전체 압축되지 않은 크기가 복사되어 파일의 스파스 속성에 따른 이점을 잃을 수 있다.

3. 3. 예상치 못한 오류 발생 가능성

단편화될 수 있으며, 파일 시스템의 사용 가능한 공간 보고가 잘못될 수 있고, 스파스 파일을 포함하는 파일 시스템을 채우는 것이 예상치 못한 결과를 초래할 수 있다. 예를 들어 스파스였던 파일의 기존 부분을 덮어쓰는 경우 디스크 부족 또는 할당량 초과 오류가 발생할 수 있다. 또한, 스파스 파일을 명시적으로 지원하지 않는 프로그램으로 스파스 파일을 복사하면, 저장 매체에 할당되지 않은 0 섹션을 포함하여 파일의 전체 압축되지 않은 크기가 복사되어 파일의 스파스 속성에 따른 이점을 잃을 수 있다. 스파스 파일은 모든 백업 소프트웨어 또는 애플리케이션에서 완전히 지원되지 않을 수도 있다.

3. 4. 호환성 문제

스파스 파일을 명시적으로 지원하지 않는 프로그램으로 스파스 파일을 복사하면, 저장 매체에 할당되지 않은 0 섹션을 포함하여 파일의 전체 압축되지 않은 크기가 복사되어 파일의 스파스 속성에 따른 이점을 잃을 수 있다. 일부 백업 소프트웨어 또는 애플리케이션에서 스파스 파일이 완전히 지원되지 않을 수도 있다. 32비트 윈도우에서 스파스 파일인 실행 파일(.exe 또는 .dll)을 로드하는 데 시간이 오래 걸릴 수 있다.

3. 5. NTFS 스파스 파일 제한

NTFS 스파스 파일(정확히는 0이 아닌 영역)은 압축할 수 없다. NTFS는 스파스 속성을 일종의 특수한 압축으로 구현하므로, 파일은 스파스하거나 압축될 수 있다.

4. 유닉스 계열 시스템에서의 스파스 파일

유닉스 계열 운영체제(리눅스, macOS 등)에서는 스파스 파일이 널리 사용되며, 다양한 명령어를 통해 스파스 파일을 생성, 관리, 사용할 수 있다. 일반적으로 스파스 파일은 사용자에게 투명하게 처리되지만, 일반 파일과 스파스 파일의 차이점은 몇 가지 상황에서 명확해진다.[1]

4. 1. 스파스 파일 생성

유닉스 명령어

```bash

dd of=sparse-file bs=5M seek=1 count=0

```

은 5 메비바이트 크기의 파일을 생성하지만, 미디어에는 데이터가 저장되지 않는다.(단지 메타데이터만).[1] (GNU dd는 파일 크기를 설정하기 위해 `ftruncate`를 호출하므로 이러한 동작을 한다. 다른 구현은 단순히 빈 파일을 생성할 수 있다.)

마찬가지로, `truncate` 명령을 사용할 수 있다. (사용 가능한 경우)[1]

```bash

truncate -s 5M

```

리눅스에서 기존 파일은 다음과 같이 스파스 파일로 변환할 수 있다.[1]

```bash

fallocate -d

```

구멍을 뚫는 이식 가능한 시스템 호출은 없다.[1] 리눅스fallocate(FALLOC_FL_PUNCH_HOLE)을 제공하고, 솔라리스는 fcntl(F_FREESP)를 제공한다.[1]

일반적으로 스파스 파일은 사용자에게 투명하게 처리된다.[1] 하지만, 일반 파일과 스파스 파일의 차이점은 상황에 따라 명확해진다.[1]

4. 2. 스파스 파일 확인

`ls` 명령어의 `-s` 옵션을 사용하면 블록 단위로 사용된 공간을 확인할 수 있다.[3]

```bash

ls -ls sparse-file

```

`du` 명령어를 사용하여 사용된 공간을 출력하고, `ls` 명령어로 파일의 크기를 확인할 수 있다. 일부 비표준 버전의 `du`에서는 `--block-size=1` 옵션을 사용하여 블록 대신 바이트 단위로 사용된 공간을 출력하므로 `ls`의 출력과 비교할 수 있다.[3]

```bash

du --block-size=1 sparse-file

ls -l sparse-file

```

위의 `du` 사용법은 약식 옵션 구문 형식 "du -B 1 sf"를 사용하는데, 이는 `du` 매뉴얼에 명시된 최단 버전 "du -b sf"와 동일하다. bytes영어는 apparent-size --block-size=1영어와 같다.

`e2fsprogs` 패키지의 `filefrag` 도구를 사용하여 파일의 블록 할당 세부 정보를 표시할 수도 있다.[3]

```bash

filefrag -v sparse-file

```

일반적으로 스파스 파일은 사용자에게 투명하게 처리된다. 하지만 일반 파일과 스파스 파일의 차이점은 상황에 따라 명확해진다.

4. 3. 스파스 파일 복사

일반적으로 GNU 버전의 cp는 파일이 스파스 파일인지 자동으로 감지하므로, `cp sparse-file new-file` 명령을 실행하면 `new-file`이 스파스 파일로 생성된다. 하지만 GNU cp에는 `--sparse` 옵션이 있다.[4] 이는 긴 0 블록을 포함하는 파일이 스파스 방식이 아닌 방식으로 저장된 경우(즉, 0 블록이 저장 매체에 완전히 기록된 경우) 특히 유용하다. 다음과 같이 하여 저장 공간을 절약할 수 있다.

`cp --sparse=always file1 file1_sparsed`

FreeBSD의 cp와 같은 일부 cp 구현은 `--sparse` 옵션을 지원하지 않으며 항상 스파스 파일을 확장한다. 이러한 시스템에서는 cp 대신 자체 `--sparse` 옵션[5]을 사용하여 rsync를 사용하는 것이 부분적으로 가능하다.

표준 입력을 통한 스파스 파일 복사는 다음과 같이 수행된다.

`cp --sparse=always /dev/fd/0 new-sparse-file < somefile`

5. 기타

VFS(가상 파일 시스템) 구현은 위에서 언급된 단점 중 일부를 해결한다. macOS에서는 가상 파일 시스템을 통해 HFS+ 등의 파일 시스템에서도 스파스 파일을 사용할 수 있게 되었다. APFS에서도 스파스 파일을 지원한다.

참조

[1] 서적 Practical File System Design with the Be File System https://github.com/t[...] Morgan Kaufmann Publishers
[2] 웹사이트 Apple File System Guide https://developer.ap[...] Apple Inc. 2017-04-27
[3] 웹사이트 Du(1) – Linux manual page https://www.man7.org[...]
[4] 웹사이트 GNU coreutils/cp: Accept new option, --sparse={never,auto,always}, to control creation of sparse files. http://git.savannah.[...] 2016-06-17
[5] 웹사이트 rsync: hard links, better sparse handling, FERROR and FINFO https://git.samba.or[...] 2016-06-17
[6] 웹사이트 rsync manpage https://download.sam[...] 2017-01-19
[7] 웹사이트 rsync: Reject attempts to combine --sparse with --inplace. https://git.samba.or[...] 2017-01-19
[8] 웹사이트 Support --sparse combined with --preallocate or --inplace. https://github.com/t[...]
[9] 서적 Practical File System Design with the Be File System https://github.com/t[...] Morgan Kaufmann Publishers
[10] 웹인용 Apple File System Guide https://developer.ap[...] Apple Inc. 2017-04-27



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com