[Linux] du 명령어로 디렉토리(폴더)별 디스크 사용량 확인하기

2025. 6. 3. 22:33·깐돌의 클라우드 도구함
728x90

리눅스 서버의 복잡한 세계를 탐색하는 엔지니어로서 우리가 흔히 직면하는 과제 중 하나는 디스크 공간 관리 및 모니터링입니다. 넘쳐나는 로그, 급증하는 데이터베이스, 또는 단순히 소중한 기가바이트가 어디로 사라지고 있는지 파악하려 할 때, 디렉토리별 디스크 사용량을 신속하게 식별하는 능력은 매우 중요합니다. 이 포괄적인 가이드는 강력한 du 명령어를 중심으로 리눅스 시스템에서 디스크 사용량을 효과적으로 분석하는 데 필요한 지식과 실용적인 명령어를 제공할 것입니다.

이 글은 서울에서 실리콘밸리, 베를린에서 벵갈루루까지 전 세계의 엔지니어들을 위해 작성되었습니다. 여기서 논의되는 원칙과 명령어는 보편적이며, 역할이나 산업에 관계없이 리눅스 서버를 다루는 모든 사람에게 필수적입니다.


목차

  1. 디스크 사용량 분석이 중요한 이유
  2. 'du' 명령어 소개: 당신의 디스크 사용량 탐정
    1. 기본 구문
  3. 실용적인 응용: 대용량 디렉토리 찾기
    1. 시나리오 1: 최상위 디렉토리 사용량
    2. 시나리오 2: 특정 디렉토리 심층 분석
  4. 모든 엔지니어를 위한 필수 'du' 옵션
  5. 고급 분석을 위한 'du'와 다른 리눅스 명령의 조합
    1. 가장 큰 N개의 디렉토리 찾기
    2. 특정 파일 시스템 또는 마운트 지점 제외
  6. 디스크 사용량 대 보이는 크기(Apparent Size) 이해: 심층 분석
  7. 'du' 외에 유용한 디스크 분석 명령어
    1. df: 파일 시스템 여유 공간
    2. ncdu: 대화형 디스크 사용량 분석기
    3. find: 대용량 파일 찾기
  8. 디스크 사용량 관리 모범 사례
  9. 마무리하며

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 명령어는 리눅스 시스템에서 디스크 공간을 효율적으로 관리하고 문제를 해결하는 데 있어 강력하고 필수적인 도구입니다. 이 가이드에서 설명한 옵션과 다른 리눅스 명령과의 조합을 마스터함으로써, 여러분은 디스크 사용량을 정밀하게 분석하고, 병목 현상을 식별하며, 서버가 최적의 성능으로 작동하도록 보장할 수 있을 것입니다.

정기적인 디스크 모니터링 및 선제적인 관리 관행을 통해 디스크 공간 관련 문제를 효과적으로 예방하고, 모든 리눅스 기반 인프라의 안정성과 효율성을 유지할 수 있습니다.

728x90
반응형

'깐돌의 클라우드 도구함' 카테고리의 다른 글

[컨테이너] 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
'깐돌의 클라우드 도구함' 카테고리의 다른 글
  • [컨테이너] Harbor 컨테이너 레지스트리: 프로젝트 생성부터 이미지 푸시까지 완벽 가이드
  • [컨테이너] RHEL 8.4에 Harbor 컨테이너 레지스트리 설치하기
  • [가상화] virsh 명령어 사용 가이드
  • [Linux] Cobbler 설치 및 기본 구성 가이드
깐돌씨
깐돌씨
하루하루를 기록하는 공간. 일상에서 얻은 영감, 좋아하는 취미, 그리고 클라우드 업무 팁까지 함께 나눕니다.
  • 깐돌씨
    조용한 깐돌이네
    깐돌씨
  • 전체
    오늘
    어제
    • 분류 전체보기 (74) N
      • 깐돌일기 (7) N
      • 취미탐험대 (13)
      • 깐돌의 클라우드 도구함 (54)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    rhel
    kickstart
    컨테이너
    RHEL8
    private registry
    KVM
    리눅스
    Docker
    rhocp
    카카오톡 스포일러 방지
    리눅스 가상화
    오픈소스
    카카오톡 스포일러
    서버 관리
    리눅스 서버
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.3
깐돌씨
[Linux] du 명령어로 디렉토리(폴더)별 디스크 사용량 확인하기
상단으로

티스토리툴바