Sparse File: 파일 크기와 디스크 사용량이 다른 이유

Kaite.Kang·2025년 3월 23일

개요

파일의 크기와 디스크에서 차지하는 공간은 항상 일치하지 않을 수 있다. 이는 파일이 0바이트 시퀀스를 포함하고 있을 경우, 파일 시스템이 디스크 공간을 절약하기 위해 이를 실제로 기록하지 않기 때문이다. 이러한 파일을 Sparse file이라고 한다.

Sparse File이란?

Sparse file은 파일 내에 0바이트로 채워진 빈 데이터 블록이 많을 때, 해당 블록을 실제 디스크에 저장하지 않고 메타데이터를 통해 관리하는 파일이다. 파일 시스템이 Sparse file을 읽을 때는 빈 블록을 자동으로 0바이트 블록으로 변환하여 반환한다. 따라서 "파일 시스템이 인식하는 파일의 크기"와 "실제 파일이 차지하는 디스크 공간"이 다를 수 있다.

파일 크기와 디스크 사용량 확인 방법

파일의 크기를 확인하는 방법과 실제 디스크에서 차지하는 공간을 확인하는 방법은 다르다.

  • 파일 시스템이 인식하는 크기: ls -l, ll 명령어 사용
  • 디스크에서 차지하는 공간: du, df 명령어 사용

테스트

다음 예제를 통해 Sparse file이 어떻게 동작하는지 확인할 수 있다.

1. 200MB의 Sparse file 생성

[root@test ~]# dd if=/dev/zero of=sparse.img bs=1M count=1 seek=200
[root@test ~]# ll -lh sparse.img
-rw-r--r-- 1 root root 201M  728 15:33 sparse.img

2. 0바이트 시퀀스를 포함하지 않도록 파일 복사

[root@test ~]# cp --sparse=never sparse.img unsparse.img

3. 파일 시스템에서 인식하는 크기 확인

[root@test ~]# ll -lh *.img
-rw-r--r-- 1 root root 201M  728 15:33 sparse.img  # 원본 파일
-rw-r--r-- 1 root root 201M  728 15:35 unsparse.img  # sparse 제거 파일

파일 시스템에서는 두 파일의 크기를 동일하게 인식한다.

4. 디스크에서 차지하는 공간 확인

[root@test ~]# du -h *.img
1.0M sparse.img  # 원본 파일
201M unsparse.img  # sparse 제거 파일

Sparse file은 1.0MB만 차지하지만, 일반 파일은 201MB를 차지한다.

5. ls -s 옵션으로 크기 비교

[root@test ~]# ls -lhs *.img
1.0M -rw-r--r-- 1 root root 201M  728 15:33 sparse.img
201M -rw-r--r-- 1 root root 201M  728 15:35 unsparse.img

위 결과에서 좌측 숫자는 디스크에서 차지하는 공간, 우측 숫자는 파일의 크기이다.

정리

Sparse file은 파일 크기를 줄이는 유용한 기능이지만, 일부 백업 소프트웨어나 파일 시스템이 이를 제대로 지원하지 않을 수 있다. 따라서 Sparse file을 다룰 때는 cp --sparse 옵션을 사용하여 복사 방법을 조정하고, du, ls -s 명령어를 활용하여 디스크 사용량을 확인하는 것이 중요하다.

0개의 댓글