CentOS 7에서 디스크 용량을 많이 사용하는 디렉터리를 찾는 방법

안녕하세요. VISION IDC 기술팀입니다.

CentOS 7 서버의 디스크 사용률이 높아졌다면 먼저 어떤 파일시스템이 가득 찼는지 확인한 다음, 해당 파일시스템 안에서 용량을 많이 사용하는 디렉터리와 파일을 단계적으로 좁혀야 합니다. 이 과정에는 주로 df, du, find 명령어를 사용합니다.

이번 문서에서는 루트 파일시스템을 기준으로 상위 디렉터리의 용량을 비교하고, 대용량 파일과 삭제됐지만 프로세스가 계속 열고 있는 파일까지 확인하는 방법을 설명합니다. 파일을 바로 삭제하기보다 사용처와 서비스 영향을 먼저 확인하는 것이 중요합니다.

적용 환경

운영체제 CentOS Linux 7
주요 명령어 df, du, find, sort, lsof
필요 권한 전체 디렉터리를 확인하려면 root 또는 sudo 권한 필요

점검 순서

  1. df로 사용률이 높은 파일시스템과 마운트 지점을 확인합니다.
  2. du로 해당 마운트 지점의 1단계 하위 디렉터리를 비교합니다.
  3. 용량이 큰 디렉터리 안으로 이동하면서 같은 명령을 반복합니다.
  4. find로 일정 크기보다 큰 개별 파일을 찾습니다.
  5. dfdu 결과가 크게 다르면 삭제된 열린 파일과 마운트 상태를 확인합니다.

1. 파일시스템 사용률 확인

먼저 df 명령으로 어떤 파일시스템의 사용률이 높은지 확인합니다. -h는 용량을 읽기 쉬운 단위로 표시하고, -T는 파일시스템 유형을 함께 표시합니다.

df -hT

출력에서 Use%가 높은 행과 Mounted on 값을 확인합니다. 예를 들어 루트 파일시스템의 마운트 지점이 /이고 사용률이 높다면 이후 명령의 검사 경로를 /로 지정합니다. /home, /var, 데이터 볼륨 등이 별도 파일시스템이라면 각각 따로 확인해야 합니다.

2. 용량을 많이 사용하는 디렉터리 찾기

루트 디렉터리의 1단계 하위 항목 비교

다음 명령은 루트 파일시스템 안에서 1단계 하위 디렉터리의 사용량을 계산하고, 큰 항목부터 정렬합니다.

sudo du -x -h --max-depth=1 / 2>/dev/null | sort -hr
  • -x: 다른 파일시스템으로 넘어가지 않고 현재 파일시스템만 검사합니다.
  • -h: KiB, MiB, GiB와 같이 읽기 쉬운 단위로 표시합니다.
  • --max-depth=1: 지정 경로 바로 아래 단계까지만 합계를 표시합니다.
  • sort -hr: 사람이 읽는 용량 단위를 인식해 큰 값부터 정렬합니다.
  • 2>/dev/null: 접근할 수 없는 특수 경로 등의 오류 메시지를 숨깁니다.

결과에서 /var가 가장 크다면 검사 경로를 /var로 바꿔 한 단계 더 좁힙니다.

sudo du -x -h --max-depth=1 /var 2>/dev/null | sort -hr

예를 들어 /var/log가 크다면 다음과 같이 다시 확인합니다. 이 방법을 반복하면 실제로 용량을 차지하는 하위 경로를 빠르게 찾을 수 있습니다.

sudo du -x -h --max-depth=1 /var/log 2>/dev/null | sort -hr

특정 디렉터리 안의 모든 항목 중 상위 30개 확인

특정 경로 안에서 디렉터리와 파일을 함께 비교하려면 -a 옵션을 추가할 수 있습니다. 전체 루트 경로에서 실행하면 시간이 오래 걸리고 입출력 부하가 커질 수 있으므로, 먼저 좁힌 경로에서 사용하는 것이 좋습니다.

sudo du -a -x -h /var 2>/dev/null | sort -hr | head -n 30

3. 일정 크기보다 큰 파일 찾기

다음 명령은 루트 파일시스템에서 1GiB보다 큰 일반 파일을 찾고, 실제 디스크 사용량이 큰 순서로 상위 30개를 표시합니다. -xdev는 다른 파일시스템으로 이동하지 않도록 제한합니다.

sudo find / -xdev -type f -size +1G -exec du -h -- {} + 2>/dev/null | sort -hr | head -n 30

별도 마운트된 /home이나 데이터 디스크를 확인하려면 시작 경로를 해당 마운트 지점으로 변경합니다.

sudo find /home -xdev -type f -size +1G -exec du -h -- {} + 2>/dev/null | sort -hr | head -n 30

기준을 500MiB로 낮추려면 -size +500M으로 변경할 수 있습니다. 검색 대상이 많을수록 디스크 부하와 실행 시간이 증가하므로 운영 중인 서버에서는 범위를 가능한 한 좁혀 실행하십시오.

4. 삭제됐지만 프로세스가 열고 있는 파일 확인

df에서는 디스크가 가득 찬 것으로 나오지만 du로 큰 파일을 찾을 수 없다면, 프로세스가 삭제된 파일을 계속 열고 있을 수 있습니다. 이런 파일은 디렉터리 목록에서는 사라졌지만 프로세스가 파일 설명자를 닫을 때까지 디스크 공간을 계속 사용합니다.

lsof가 설치되어 있지 않다면 저장소가 정상인 환경에서 설치합니다.

sudo yum install -y lsof

링크 수가 0인 열린 파일만 확인합니다.

sudo lsof +L1

출력의 COMMAND, PID, SIZE/OFF, NAME을 확인해 어떤 프로세스가 파일을 열고 있는지 파악합니다. 공간을 회수하려면 해당 애플리케이션의 정상적인 로그 재열기, 로그 로테이션 또는 서비스 재시작 절차를 사용해야 합니다.

5. 용량이 남아 있는데 파일을 만들 수 없을 때 inode 확인

디스크 용량은 남아 있는데 No space left on device 오류가 발생한다면 inode가 모두 사용되었을 수 있습니다. inode 사용률은 다음 명령으로 확인합니다.

df -i -h

IUse%가 100%에 가깝다면 작은 파일이 매우 많이 생성된 디렉터리를 찾아야 합니다. 캐시, 세션 파일, 메일 큐, 임시 파일, 애플리케이션 로그 조각 등이 원인일 수 있으며, 삭제 전 해당 서비스의 보존 정책과 안전한 정리 방법을 확인하십시오.

자주 발생하는 문제와 해결 방법

디스크 사용량 점검 중 자주 발생하는 문제
증상 가능한 원인 확인 및 해결 방법
Permission denied가 반복됨 현재 계정이 일부 경로를 읽을 권한이 없음 sudo로 실행합니다. 오류만 숨기려면 2>/dev/null을 사용할 수 있지만, 결과에서 제외되는 경로가 생길 수 있음을 고려합니다.
du 실행이 매우 느림 파일 수가 많거나 네트워크·외부 파일시스템까지 탐색함 -x를 사용하고, 루트 전체보다 /var, /home 등 범위를 좁혀 검사합니다.
df 사용량이 du 합계보다 훨씬 큼 삭제된 열린 파일, 마운트 지점 아래 숨겨진 파일, 파일시스템 예약 공간 등 sudo lsof +L1로 열린 삭제 파일을 확인하고, 현재 마운트 상태와 검사한 파일시스템이 같은지 확인합니다.
루트 검사에서 /home 용량이 작게 표시됨 /home이 별도 파일시스템이고 -x가 다른 파일시스템 탐색을 차단함 df -hT로 별도 마운트 여부를 확인하고 sudo du -x -h --max-depth=1 /home을 따로 실행합니다.
용량이 남아 있지만 새 파일 생성 실패 inode 소진 가능성 df -i -h로 inode 사용률을 확인하고, 작은 파일이 과도하게 누적된 경로를 점검합니다.

파일을 정리하기 전 확인할 사항

  • 파일의 소유자, 수정 시간, 실제 사용 중인 서비스와 백업 여부를 확인합니다.
  • 로그 파일은 직접 삭제하기보다 애플리케이션의 로그 로테이션 정책을 먼저 확인합니다.
  • 데이터베이스 데이터 디렉터리와 트랜잭션 로그는 데이터베이스의 공식 정리 절차를 사용합니다.
  • 캐시와 임시 파일도 실행 중인 서비스가 사용하는 경로인지 확인합니다.
  • 삭제가 필요한 경우 먼저 백업하거나 다른 파일시스템으로 이동한 뒤 서비스 정상 여부를 검증합니다.

정리 후 디스크 공간 확인

안전한 방법으로 파일을 정리하거나 서비스를 정상적으로 재시작한 뒤 파일시스템 사용률을 다시 확인합니다.

df -hT

Use%가 감소했는지 확인하고, 정리 대상과 관련된 서비스의 상태 및 로그도 함께 점검합니다. 삭제된 열린 파일을 처리했다면 sudo lsof +L1을 다시 실행해 해당 항목이 사라졌는지 확인합니다.

자주 묻는 질문

du 명령에 -x 옵션을 사용하나요?

루트 경로 아래에는 별도 디스크, 네트워크 파일시스템, 가상 파일시스템이 마운트될 수 있습니다. -x를 사용하면 시작 경로와 같은 파일시스템만 검사하므로 결과를 파일시스템 단위로 비교하기 쉽고 불필요한 탐색을 줄일 수 있습니다.

가장 큰 파일만 바로 확인할 수 있나요?

find-size 조건과 du, sort를 조합하면 일정 크기보다 큰 파일을 용량순으로 확인할 수 있습니다. 다만 전체 서버를 검사하면 부하가 발생할 수 있으므로 먼저 문제가 있는 마운트 지점과 디렉터리를 좁히는 것이 좋습니다.

로그 파일을 삭제했는데 디스크 공간이 줄지 않는 이유는 무엇인가요?

실행 중인 프로세스가 삭제된 로그 파일을 계속 열고 있으면 파일의 공간은 즉시 반환되지 않습니다. sudo lsof +L1으로 해당 프로세스를 확인하고, 서비스별 정상적인 로그 재열기 또는 재시작 절차를 적용해야 합니다.

디스크 사용률이 몇 퍼센트일 때 정리해야 하나요?

일률적인 기준보다 증가 속도와 서비스 특성이 중요합니다. 로그, 데이터베이스, 패키지 업데이트 등으로 공간이 계속 증가하는 서버는 여유 공간이 완전히 소진되기 전에 원인을 파악하고 알림 기준과 보존 정책을 설정해야 합니다.

공식 참고자료

마무리

CentOS 7에서 디스크 용량을 많이 사용하는 디렉터리를 찾을 때는 df로 대상 파일시스템을 정하고, du로 상위 경로부터 단계적으로 좁히는 방법이 가장 안전합니다. 개별 대용량 파일은 find로 확인하고, dfdu의 차이가 크다면 lsof +L1과 inode 사용률도 함께 점검하십시오.

파일 삭제는 마지막 단계로 진행하고, 반드시 서비스 영향과 백업 여부를 확인하시기 바랍니다. CentOS 7은 지원이 종료된 운영체제이므로 점검과 함께 지원되는 운영체제로의 이전 계획도 준비하는 것이 좋습니다.

  • 0 사용자에게 유용한 정보 제공
이 답변이 도움이 되었나요?
« Back