디스크가 꽉 차면 서버는 갑자기 다운될 수 있습니다. 로그 파일이나 임시 파일이 쌓여 발생하는 디스크 부족 문제를 예방하고 대응하는 방법을 알아봅니다.
현재 디스크 상황 파악
# 전체 디스크 사용량 (사람이 읽기 쉬운 형식)
df -h
# 출력 예시:
# Filesystem Size Used Avail Use% Mounted on
# /dev/sda1 50G 38G 9.5G 80% /
# /dev/sdb1 500G 230G 245G 49% /data
# inode 사용량 확인 (파일 수가 많을 때 inode 부족 발생 가능)
df -i
du로 디렉터리별 사용량 분석
# 특정 디렉터리의 사용량
du -sh /var/log
# 현재 디렉터리의 하위 항목별 사용량 (1단계)
du -h --max-depth=1 /var | sort -rh
# 상위 10개 대용량 디렉터리 찾기
du -h /var | sort -rh | head -10
# /var/log 하위 정리
du -sh /var/log/*
대용량 파일 찾기
# 100MB 이상 파일 찾기
find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null
# 1GB 이상 파일 (사람이 읽기 쉬운 정렬)
find / -type f -size +1G 2>/dev/null | xargs ls -lh | sort -k5 -rh
# 특정 디렉터리에서 최근 수정된 대용량 파일
find /var -type f -size +50M -mtime -7 -ls
로그 파일 정리
# Nginx 로그 수동 압축
gzip /var/log/nginx/access.log.1
# journald 로그 정리 (systemd)
sudo journalctl --disk-usage
sudo journalctl --vacuum-time=7d # 7일 이상된 로그 삭제
sudo journalctl --vacuum-size=500M # 500MB 초과분 삭제
# 오래된 로그 삭제
find /var/log -name "*.log" -mtime +30 -delete
find /var/log -name "*.gz" -mtime +60 -delete
임시 파일 정리
# /tmp 정리 (오래된 파일)
find /tmp -type f -atime +7 -delete
# apt 캐시 정리
sudo apt clean
sudo apt autoremove -y
# Docker 미사용 리소스 정리
docker system prune -a
# pip 캐시 정리
pip cache purge
# npm 캐시 정리
npm cache clean --force
디스크 사용량 모니터링 스크립트
#!/bin/bash
# /opt/disk-alert.sh
# 디스크 사용량이 임계값 초과 시 알림
THRESHOLD=80
ALERT_LOG="/var/log/disk-alert.log"
df -h | grep -vE '^Filesystem|tmpfs|cdrom' | while read line; do
USAGE=$(echo $line | awk '{print $5}' | sed 's/%//')
MOUNT=$(echo $line | awk '{print $6}')
if [ "$USAGE" -gt "$THRESHOLD" ]; then
MSG="[ALERT] $(date '+%Y-%m-%d %H:%M') - $MOUNT: ${USAGE}% 사용 중"
echo "$MSG" >> $ALERT_LOG
echo "$MSG"
# 텔레그램 알림 (선택)
# curl -s "https://api.telegram.org/bot토큰/sendMessage" \
# -d "chat_id=채팅ID&text=$MSG"
fi
done
# 실행 권한 부여 및 cron 등록 (1시간마다 실행)
chmod +x /opt/disk-alert.sh
echo "0 * * * * root /opt/disk-alert.sh" | sudo tee /etc/cron.d/disk-alert
디스크 사용량 정기 리포트
#!/bin/bash
# /opt/disk-report.sh
# 매주 디스크 현황 리포트
REPORT=$(df -h | grep -v tmpfs)
echo "=== 서버 디스크 현황 $(date '+%Y년 %m월 %d일') ==="
echo "$REPORT"
echo ""
echo "=== 대용량 파일 TOP 10 ==="
find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null | sort -k5 -rh | head -10
디스크가 꽉 찬 경우 긴급 조치
# 1. 현황 파악
df -h && du -sh /* 2>/dev/null | sort -rh | head -20
# 2. 대용량 파일 즉시 삭제
find /var/log -name "*.log" -size +100M -delete
# 3. 오래된 백업 파일 삭제
find /backup -mtime +30 -delete
# 4. 패키지 캐시 정리
sudo apt clean
# 5. journald 로그 축소
sudo journalctl --vacuum-size=100M
# 6. 임시 파일 정리
sudo rm -rf /tmp/* /var/tmp/*
파티션 별 모니터링
# 디스크 I/O 통계
iostat -x 1 5
# 특정 프로세스의 디스크 사용량
sudo iotop
# 디스크 상태 확인 (SMART)
sudo apt install -y smartmontools
sudo smartctl -a /dev/sda
디스크 부족은 서버 장애의 흔한 원인입니다. logrotate 설정(별도 포스팅 참조)과 함께 주기적인 정리 스크립트를 운영하면 디스크 부족으로 인한 장애를 예방할 수 있습니다.