← 전체 글로 돌아가기

서버 운영

서버 운영: 리눅스에서 디스크가 찼을 때 보는 명령어 순서

서버 디스크가 가득 차면 서비스가 멈춘다. 원인을 빠르게 찾기 위한 명령어 순서를 알아두자.

리눅스 서버를 운영하다 보면 갑자기 "디스크 부족" 경고가 온다. 이럴 때 어디부터 봐야 하는지 알면 빠르게 대응할 수 있다.

1단계: 전체 디스크 사용률 확인

가장 먼저 각 파티션의 사용률을 본다.

df -h

출력 예:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       100G   95G  5.0G  95% /
/dev/sda2       50G    10G   40G  20% /home
tmpfs            16G    0    16G   0% /dev/shm

/ (루트)가 95%라면 시스템이 거의 찬 상태다.

2단계: 어떤 디렉토리가 용량을 많이 차지하는가

du -sh /*

가장 큰 디렉토리부터 보여준다.

# 더 자세하게 보고 싶으면
du -sh /var/*
du -sh /home/*
du -sh /usr/local/*

보통 범인은 이 중 하나다:

  • /var/log - 로그 파일
  • /var/lib/docker - Docker 이미지와 컨테이너
  • /home - 사용자 홈 디렉토리
  • /tmp - 임시 파일

3단계: 로그 파일 확인

운영 중에는 로그가 가장 자주 용량을 차지한다.

du -sh /var/log
ls -lhS /var/log

특정 로그 파일이 비정상적으로 크다면 그것이 범인이다.

# 로그 파일 크기순 정렬
find /var/log -type f -exec ls -lh {} + | sort -k5 -hr | head

4단계: 로그 정리하기

즉각적인 대응:

# 오래된 로그 파일 제거 (안전한 방법)
find /var/log -name "*.log" -type f -mtime +7 -delete  # 7일 이상

# 현재 로그 파일 비우기 (서비스는 계속 작동)
> /var/log/application.log  # 파일 크기를 0으로

# 또는
truncate -s 0 /var/log/application.log

5단계: Docker 정리 (도커를 쓴다면)

Docker는 이미지, 컨테이너, 볼륨 등으로 용량을 많이 차지한다.

# 사용 중이지 않은 이미지 제거
docker image prune -a

# 사용 중이지 않은 컨테이너 제거
docker container prune

# 사용 중이지 않은 볼륨 제거
docker volume prune

# 한 번에 정리
docker system prune -a

6단계: 임시 파일 정리

du -sh /tmp
find /tmp -type f -mtime +7 -delete  # 7일 이상된 파일

7단계: 로그 로테이션 설정 (다시 차지 않기 위해)

# /etc/logrotate.d/에서 설정 확인
ls -la /etc/logrotate.d/

# 애플리케이션 로그 로테이션 추가
cat > /etc/logrotate.d/myapp << 'EOF'
/var/log/myapp/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    create 0640 myapp myapp
    sharedscripts
    postrotate
        systemctl reload myapp > /dev/null 2>&1 || true
    endscript
}
EOF

위험한 명령어 주의

# 위험: 아무것도 확인 안 하고 대량 삭제
rm -rf /var/log/*  # 절대 금지!

# 안전: 특정 파일만 확인하고 삭제
find /var/log -name "*.gz" -type f -mtime +30 -delete

디스크 부족은 서비스 중단으로 이어지기 쉽다. 정기적으로 확인하고 로그 로테이션을 설정해두면 대부분 예방할 수 있다.