서버 운영
서버 운영: 리눅스에서 디스크가 찼을 때 보는 명령어 순서
서버 디스크가 가득 차면 서비스가 멈춘다. 원인을 빠르게 찾기 위한 명령어 순서를 알아두자.
리눅스 서버를 운영하다 보면 갑자기 "디스크 부족" 경고가 온다. 이럴 때 어디부터 봐야 하는지 알면 빠르게 대응할 수 있다.
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
디스크 부족은 서비스 중단으로 이어지기 쉽다. 정기적으로 확인하고 로그 로테이션을 설정해두면 대부분 예방할 수 있다.