리눅스 서버의 복잡한 세계를 탐색하는 엔지니어로서 우리가 흔히 직면하는 과제 중 하나는 디스크 공간 관리 및 모니터링입니다. 넘쳐나는 로그, 급증하는 데이터베이스, 또는 단순히 소중한 기가바이트가 어디로 사라지고 있는지 파악하려 할 때, 디렉토리별 디스크 사용량을 신속하게 식별하는 능력은 매우 중요합니다. 이 포괄적인 가이드는 강력한 du
명령어를 중심으로 리눅스 시스템에서 디스크 사용량을 효과적으로 분석하는 데 필요한 지식과 실용적인 명령어를 제공할 것입니다.
이 글은 서울에서 실리콘밸리, 베를린에서 벵갈루루까지 전 세계의 엔지니어들을 위해 작성되었습니다. 여기서 논의되는 원칙과 명령어는 보편적이며, 역할이나 산업에 관계없이 리눅스 서버를 다루는 모든 사람에게 필수적입니다.
목차
- 디스크 사용량 분석이 중요한 이유
- 'du' 명령어 소개: 당신의 디스크 사용량 탐정
- 실용적인 응용: 대용량 디렉토리 찾기
- 모든 엔지니어를 위한 필수 'du' 옵션
- 고급 분석을 위한 'du'와 다른 리눅스 명령의 조합
- 디스크 사용량 대 보이는 크기(Apparent Size) 이해: 심층 분석
- 'du' 외에 유용한 디스크 분석 명령어
- 디스크 사용량 관리 모범 사례
- 마무리하며
1. 디스크 사용량 분석이 중요한 이유
디스크가 가득 차면 I/O 작업 속도가 느려져 애플리케이션 응답 시간과 전반적인 시스템 응답성에 영향을 미칩니다. 통제되지 않는 디스크 증가는 **성능 저하**, **애플리케이션 충돌**, **데이터 손실 위험**, **보안 취약점**, **비용 비효율성**과 같은 문제로 이어질 수 있습니다. 따라서 디스크 사용량 분석 기술을 마스터하는 것은 모든 책임감 있는 엔지니어에게 기본적인 기술입니다.
2. 'du' 명령어 소개: 당신의 디스크 사용량 탐정
du
명령어는 "disk usage"의 약자로, 파일 공간 사용량을 확인하기 위한 주요 도구입니다. 이 명령은 파일 공간 사용량을 추정하며, 매우 다재다능합니다. 기본적인 구문을 살펴본 다음, 가장 유용한 옵션 중 일부를 자세히 알아보겠습니다.
2.1. 기본 구문:
du [OPTION]... [FILE]...
옵션이나 인자 없이 실행하면 du
는 현재 디렉토리와 모든 하위 디렉토리의 디스크 사용량을 재귀적으로 나열하는데, 이는 대규모 파일 시스템에서는 감당하기 어려울 수 있습니다.
3. 실용적인 응용: 대용량 디렉토리 찾기
디스크 사용량을 조사할 때 가장 큰 공간을 차지하는 디렉토리를 식별하는 것이 주된 목표입니다. du
는 특히 특정 옵션과 함께 사용할 때 이러한 목적에 탁월합니다.
3.1. 시나리오 1: 최상위 디렉토리 사용량
서버에 root
로 로그인하여 루트 파일 시스템(/
) 내의 즉각적인 하위 디렉토리의 디스크 사용량을 확인하고 싶다고 가정해 봅시다. 이는 디스크 공간의 대부분이 어디에 사용되고 있는지에 대한 개요를 제공합니다. 핵심 옵션은 재귀 깊이를 한 수준으로 제한하는 **-d 1
** (또는 --max-depth=1
)과 사람이 읽기 쉬운 형식(예: K, M, G)으로 크기를 표시하는 **-h
** (또는 --human-readable
)입니다.
[root@hk-tb-kvmhost /]# du -d 1 -h
160M ./boot
0 ./dev
0 ./proc
4.1G ./run
0 ./sys
25M ./etc
16G ./root
750G ./var
2.1G ./usr
12K ./home
0 ./media
0 ./mnt
0 ./opt
0 ./srv
0 ./tmp
771G .
이 출력에서 /var
가 상당한 디스크 공간(750G)을 소비하고 있으며, 그 다음으로 /root
(16G)와 /usr
(2.1G)가 뒤를 잇는 것을 즉시 알 수 있습니다. 마지막 줄인 771G .
는 현재 디렉토리(/
) 및 지정된 깊이에서의 내용의 총 디스크 사용량을 나타냅니다. 이 빠른 스캔을 통해 세부 사항에 얽매이지 않고 잠재적인 문제 영역을 정확히 찾아낼 수 있습니다.
3.2. 시나리오 2: 특정 디렉토리 심층 분석
대용량 디렉토리를 식별했다면, 다음 논리적인 단계는 해당 디렉토리 내에서 어떤 하위 디렉토리가 문제의 원인인지 알아내기 위해 "심층 분석"하는 것입니다. 우리의 예시를 계속하여 750G로 나타났던 /var
디렉토리를 조사해 봅시다.
[root@hk-tb-kvmhost /]# cd /var/
이제 /var
디렉토리 안에 있으므로, 동일한 명령어를 다시 실행하여 즉각적인 하위 디렉토리의 사용량을 확인할 수 있습니다:
[root@hk-tb-kvmhost var]# du -d 1 -h
749G ./lib
719M ./log
0 ./adm
321M ./cache
0 ./db
0 ./empty
0 ./ftp
0 ./games
0 ./gopher
0 ./local
0 ./nis
0 ./opt
0 ./preserve
12K ./spool
0 ./tmp
0 ./yp
0 ./kerberos
0 ./crash
750G .
여기서 /var
내에서 /var/lib
가 749G를 차지하며 공간을 가장 많이 소비하고 있다는 것이 즉시 명확해집니다. 이 반복적인 접근 방식은 시스템에서 디스크 공간을 가장 많이 소비하는 부분을 신속하게 좁힐 수 있도록 해줍니다.
4. 모든 엔지니어를 위한 필수 'du' 옵션
-d
와 -h
가 매우 유용하지만, du
는 디스크 사용량 분석을 훨씬 더 강력하게 만들 수 있는 풍부한 옵션 세트를 제공합니다. 그 중 일부를 살펴보겠습니다:
-s
또는--summarize
: 각 인자의 총합만 표시.- 특정 디렉토리의 전체 합계만 필요하고 그 내용물은 필요하지 않을 때 유용합니다. 예시:
du -sh /var/log
-c
또는--total
: 전체 총합 생성.- 지정된 각 인자의 디스크 사용량을 표시한 다음, 마지막에 전체 총합을 제공합니다. 예시:
du -ch /var/log /home/user/data
-a
또는--all
: 디렉토리뿐만 아니라 모든 파일의 사용량도 표시.- 기본적으로
du
는 디렉토리의 디스크 사용량만 요약합니다. 개별 파일의 크기도 보려면-a
를 사용하십시오. 예시:du -ah /var/log
--exclude=PATTERN
: PATTERN과 일치하는 파일 제외.- 특정 파일 형식이나 디렉토리를 무시하려 할 때 매우 유용합니다. 예를 들어, 모든
.log
파일을 제외하려면:du -sh --exclude='*.log' /var/
--apparent-size
: 디스크 사용량 대신 보이는 크기(apparent size)를 인쇄.du
는 실제 디스크 공간 사용량을 보고하지만,--apparent-size
는 실제 파일 크기를 바이트 단위로 보고합니다. 예시:du -sh --apparent-size /path/to/large_file
-B SIZE
또는--block-size=SIZE
: 인쇄하기 전에 크기를 SIZE로 스케일링.- 출력에 대한 블록 크기를 지정할 수 있습니다(예: 메가바이트의 경우
-B M
, 기가바이트의 경우-B G
). 예시:du -B M -d 1 /
5. 고급 분석을 위한 'du'와 다른 리눅스 명령의 조합
리눅스의 진정한 힘은 명령어를 함께 파이프할 수 있는 능력에 있습니다. du
를 sort
, head
, awk
와 같은 다른 명령어와 결합하여 더 정교한 분석을 수행할 수 있습니다.
5.1. 가장 큰 N개의 디렉토리 찾기:
종종 모든 디렉토리를 볼 필요 없이 가장 큰 5개 또는 10개만 필요할 때가 있습니다. du
의 출력을 sort
로 파이프하고 head
로 파이프하여 이를 달성할 수 있습니다:
du -h /path/to/directory | sort -rh | head -n 10
du -h /path/to/directory
: 모든 하위 디렉토리와 그 크기를 사람이 읽기 쉬운 형식으로 나열합니다.sort -rh
:-r
(역순 정렬),-h
(사람이 읽기 쉬운 숫자 정렬) 옵션.head -n 10
: 상위 10줄(즉, 가장 큰 10개의 디렉토리)을 가져옵니다.
이 명령은 디스크 공간의 대부분이 어디에 할당되었는지 한눈에 빠르게 식별하는 데 매우 중요합니다.
5.2. 특정 파일 시스템 또는 마운트 지점 제외:
때때로 /proc
또는 /sys
와 같은 특정 마운트 지점을 제외하고 싶을 수 있습니다. 이들은 가상 파일 시스템이기 때문에 종종 0 디스크 사용량을 보여줍니다. --exclude
를 사용하거나 grep -v
와 결합하여 제외할 수 있습니다:
du -d 1 -h / | grep -v 'proc\|sys\|dev'
이렇게 하면 출력에서 'proc', 'sys', 'dev'를 포함하는 줄을 제외하여 실제 파일 시스템의 실제 디스크 사용량을 더 깨끗하게 볼 수 있습니다.
6. 디스크 사용량 대 보이는 크기(Apparent Size) 이해: 심층 분석
엔지니어는 du
가 보고하는 "디스크 사용량"과 파일의 "보이는 크기(apparent size)" 간의 미묘하지만 중요한 차이를 이해하는 것이 중요합니다. 이 차이는 종종 혼란을 야기합니다:
- 디스크 사용량 (
du
의 기본값): 파일 또는 디렉토리가 실제로 차지하는 디스크 공간의 양을 의미합니다. 이는 **블록 할당**, **스파스 파일**, **하드 링크** 등으로 인해 보이는 크기보다 클 수 있습니다. - 보이는 크기 (
--apparent-size
): 이것은 모든 데이터가 연속적으로 저장된 것처럼 보이는 파일의 논리적 크기(바이트 단위)입니다. 일반적으로ls -l
을 실행할 때 보이는 크기입니다. 스파스 파일의 경우 보이는 크기가 디스크 사용량보다 훨씬 클 수 있습니다.
대부분의 일상적인 디스크 공간 문제 해결에서는 du
의 기본 동작(디스크 사용량)을 원할 것입니다. 이는 저장 장치에서 실제로 얼마만큼의 물리적 공간이 소비되고 있는지 알려주기 때문입니다.
7. 'du' 외에 유용한 디스크 분석 명령어
du
는 디렉토리 수준 분석에 강력하지만, 디스크 사용량에 대한 다른 관점을 제공하는 다른 명령어들도 equally 유용할 수 있습니다.
7.1. df
: 파일 시스템 여유 공간
df
명령어(disk free)는 파일 시스템 디스크 공간 사용량을 보고합니다. 마운트된 파일 시스템의 전반적인 상태를 확인하고 용량에 거의 도달한 파일 시스템을 식별하는 데 탁월합니다. df -h
를 실행하여 총 크기, 사용된 공간, 사용 가능한 공간 및 사용률을 사람이 읽기 쉬운 형식으로 확인하세요. "디스크 가득 참" 경고를 받으면 가장 먼저 확인해야 할 명령입니다.
7.2. ncdu
: 대화형 디스크 사용량 분석기
디스크 사용량을 탐색하는 대화형 및 시각적인 방법을 원한다면 ncdu
(NCurses Disk Usage)는 훌륭한 도구입니다. ncdu
를 설치하고 분석하려는 디렉토리에서 ncdu /
를 실행하면, 디렉토리를 스캔한 다음 화살표 키를 사용하여 탐색하고 d
를 눌러 파일/디렉토리를 삭제할 수 있는 대화형 브라우저를 제공합니다(극도로 주의하여 사용하십시오!).
7.3. find
: 대용량 파일 찾기
때로는 문제는 디렉토리가 아니라 단일의 거대한 파일일 수 있습니다. find
명령어는 이러한 대용량 파일을 직접 찾는 데 도움이 될 수 있습니다. 예를 들어, /var
디렉토리에서 1G보다 큰 파일을 찾으려면: find /var -type f -size +1G -print0 | xargs -0 du -h
8. 디스크 사용량 관리 모범 사례
디스크 사용량을 확인하는 방법을 아는 것은 전투의 절반에 불과합니다. 장기적인 서버 상태를 위해 디스크 관리를 위한 사전 예방적 전략을 구현하는 것이 필수적입니다.
- 정기적인 모니터링: 서버 모니터링 솔루션(예: Prometheus, Nagios, Zabbix)에 디스크 사용량 모니터링을 통합하십시오.
- 로그 관리:
logrotate
와 같은 도구를 사용하여 로그 파일을 주기적으로 순환, 압축 및 제거하는 정책을 구현하십시오. - 오래된 파일 정리: 정기적으로 오래된 백업, 임시 파일, 사용하지 않는 데이터 및 개발 아티팩트를 정리하십시오.
- 파일 시스템 분할: 중요한 서비스(예: 데이터베이스, 웹 서버)를 전용 파일 시스템에 두는 것을 고려하십시오.
- 볼륨 확장 계획: 가상 환경이나 클라우드 환경에서는 필요에 따라 디스크 볼륨을 확장하는 방법을 미리 파악하십시오.
- 데이터 중복 제거 및 압축: 특정 시나리오에서는 파일 시스템 수준에서 데이터 중복 제거 또는 압축을 활용하여 디스크 공간을 절약할 수 있습니다.
9. 마무리하며
du
명령어는 리눅스 시스템에서 디스크 공간을 효율적으로 관리하고 문제를 해결하는 데 있어 강력하고 필수적인 도구입니다. 이 가이드에서 설명한 옵션과 다른 리눅스 명령과의 조합을 마스터함으로써, 여러분은 디스크 사용량을 정밀하게 분석하고, 병목 현상을 식별하며, 서버가 최적의 성능으로 작동하도록 보장할 수 있을 것입니다.
정기적인 디스크 모니터링 및 선제적인 관리 관행을 통해 디스크 공간 관련 문제를 효과적으로 예방하고, 모든 리눅스 기반 인프라의 안정성과 효율성을 유지할 수 있습니다.
'깐돌의 클라우드 도구함' 카테고리의 다른 글
[컨테이너] Harbor 컨테이너 레지스트리: 프로젝트 생성부터 이미지 푸시까지 완벽 가이드 (0) | 2025.06.04 |
---|---|
[컨테이너] RHEL 8.4에 Harbor 컨테이너 레지스트리 설치하기 (1) | 2025.06.03 |
[가상화] virsh 명령어 사용 가이드 (0) | 2025.05.30 |
[Linux] Cobbler 설치 및 기본 구성 가이드 (0) | 2025.05.29 |
[Linux] PXE 서버 구축 및 자동 OS 설치 가이드 (0) | 2025.05.29 |