본문 바로가기

OS/Linux

Sparse file (du보다 ls로 조회한 파일 사이즈가 클때)

반응형

 

du로 조회한 파일 사이즈 보다 ls로 조회한 파일 사이즈가 큰 경우가 있다.

du로 조회한 test.file 의 사이즈는 47G이다.

> du -ch test.file
47G	test.file

ls로 조회한 test.file의 사이즈는 97G 로 du로 조회한 사이즈 보다 약 2배 가량 높다.

> ls -alh
-rw-r--r--  1 root root 97G 2021-10-20 22:17 test.file

 

 

이러한 파일을 "Sparse file"이라고 한다.

Spare file은 실제 빈공간에 대한 metadata을 가지고있으며 생성된 전체 크기의 영역을 할당하지 않고 요청이 있을 때만 블럭을 할당하는 방식이므로 공간 활용이 효율적이다.

 

따라서 Physical File Size, 즉 실제 디스크 사용량을 계산하는 "du" 와 Logical File Size를 계산하는 "ls" 와의 사이즈 크기가 상이한 것이다.

 

 

"Sparse file"를 찾는 방법은 "test.file" 처럼 du보다 ls로 조회했을 때 사이즈가 큰 파일로 유추 할 수 있지만 find의 "%S" 옵션으로 실제 "Spares file"을 찾을 수 있다.

> find . -type f -printf "%S\t%p\n" | gawk '$1 < 1.0 {print}'
0.477555	./test.file
  • "%S" 옵션은 "BLOCK-SIZE*st_blocks / st_size" 로 할당된 Spares file 전체 크기에 실제 Physical File Size를 백분률로 표기 했다고 보면 이해가 쉽다.
  • "%p" 옵션은 파일 이름 출력이다.

 

일반 파일의 경우 Physical File Size와 Logical File Size 가 같아 수치가 1인 반면 Spares file의 경우 1 이하의 값을 갖는다.

또한 ls에 "s" 옵션을 주면 Physical File Size가 같이 출력 되어 확인이 가능하다.

> ls -slh
...
 47G -rw-r--r-- 1 root root  97G 2021-10-20 22:17 test.file

 

참고

df 와 du로 디스크 사용량에 차이가 나는 경우가 있는데 df는 Physical File Size와 더불어 파일 시스템의 정보를 기반으로 하기때문에 일반적으로 du보다 출력하는 사용량 크기가 크다.(여기 참조)

반응형