Linux 시스템, 특히 Red Hat Enterprise Linux (RHEL)에서 작업할 때, du
명령어가 디렉터리의 개별 파일 용량 합보다 더 큰 크기를 표시하는 상황을 마주할 수 있습니다. 이 차이는 혼란스러울 수 있지만, 쉽게 설명할 수 있습니다.
du 명령어가 디렉터리 내 파일들의 총합보다 큰 용량을 표시하는 이유 설명
예시:
# du -sh dir1
48M dir1
# du -sh dir1/*
4.0K /dir1/file1
4.0K /dir1/file2
4.0K /dir1/file3
이 경우, du
명령어가 dir1
디렉터리의 총 용량을 48M로 보고하는 반면, 개별 파일은 12K밖에 차지하지 않습니다. 그럼 이 추가적인 용량은 어디서 오는 걸까요?
원인
이 차이는 du
가 디스크 사용량을 계산하는 방식에서 비롯됩니다. du
는 파일 자체의 크기뿐만 아니라, 할당된 모든 블록을 계산합니다. Linux에서 디렉터리는 파일 시스템을 관리하는 데 추가적인 공간을 사용하며, 파일 이름과 inode 포인터 같은 정보를 저장합니다. 파일이나 디렉터리가 삭제되었더라도, 일부 블록은 즉시 해제되지 않을 수 있습니다.
디렉터리 블록 크기
이 경우 다음과 같은 상황이 발생합니다:
# stat dir1/
File: `/dir1'
Size: 262144 Blocks: 97928 IO Block: 4096 directory
디렉터리는 97928 블록을 차지하며, 각 블록은 512 바이트입니다. 이는 총 47.8MB로, 크기 차이를 설명합니다.
결론
디렉터리의 크기가 그 안의 파일 크기와 일치하지 않는 경우가 발생한다면, 디렉터리 자체가 파일 시스템 내에서 공간을 소비하고 있다는 점을 기억해야 합니다. 이는 메타데이터의 축적이나 삭제된 파일들로 인해 공간이 즉시 해제되지 않는 경우 자주 발생합니다.
du
가 블록을 어떻게 계산하는지 이해함으로써, Linux 시스템에서 디스크 사용량 문제를 더 효과적으로 해결할 수 있습니다.
이 블로그는 du
명령어가 예상치 못한 크기를 보고하는 일반적인 원인과 그에 대한 해결책을 설명합니다.