서버 & 리눅스 실무팁

리눅스 쉘 스크립트 실전 예제 Part 5: 디스크 용량과 감시 자동화

smartbay 2025. 6. 14. 15:41

리눅스 쉘 스크립트 실전 예제 Part 5: 디스크 용량과 감시 자동화

디스크 용량 부족, 그때 알았더라면... 미리 감시하고 경고하는 자동화 스크립트로 대응하세요.


1. 디스크 사용량 초과 시 관리자에게 경고 메일 발송

용도: 특정 파티션의 사용량이 90%를 넘는 경우 메일 알림을 전송하는 자동 감시 스크립트입니다.


#!/bin/bash
THRESHOLD=90
USAGE=$(df / | grep / | awk '{print $5}' | sed 's/%//g')

if [ "$USAGE" -ge "$THRESHOLD" ]; then
  echo "디스크 사용량 경고: 현재 / 파티션 사용률 ${USAGE}%" | mail -s "디스크 경고" admin@example.com
fi

설명:
- df /: 루트 파티션의 디스크 사용량 확인
- awk + sed: 퍼센트 제거 후 정수값으로 추출
- mail: 관리자에게 메일 전송 (메일 설정 필요)


2. 사용자별 디스크 사용량 분석

용도: 홈 디렉토리 기준으로 사용자별 사용량을 분석할 수 있는 스크립트입니다.


du -sh /home/* | sort -hr

설명:
- 각 사용자의 홈 디렉토리 크기를 계산하고, 사용량 순으로 정렬합니다.
- 파일 서버, 다중 사용자 시스템에서 권장됩니다.


3. 디렉토리별 용량 리포트 생성

용도: 지정한 경로의 하위 디렉토리들을 대상으로 용량 정보를 파일로 저장합니다.


du -sh /var/log/* | sort -hr > disk_usage_report.txt

설명:
- /var/log/* 디렉토리 내부 용량을 확인하고
- 내림차순 정렬 후 disk_usage_report.txt로 저장합니다.


4. 파일 크기 통계 수집 (최소, 최대, 평균)

용도: 특정 디렉토리 내 파일들의 크기 통계를 계산하여 정리 기준을 만들거나 백업 전략을 세울 수 있습니다.


find /path/to/dir -type f -exec du -b {} + | awk '
{ sum += $1; count += 1;
  if ($1 > max) max = $1;
  if (min == 0 || $1 < min) min = $1;
}
END {
  print "총 파일 수:", count;
  print "총 용량(Byte):", sum;
  print "평균 크기(Byte):", int(sum/count);
  print "최대 크기(Byte):", max;
  print "최소 크기(Byte):", min;
}'

설명:
- 모든 파일의 크기를 모은 후 awk로 평균, 최대, 최소를 계산합니다.


5. 디스크 상태 자동 점검 및 로그 저장

용도: 정기적으로 디스크 상태를 확인하고 로그에 저장하여 감시 및 이상 발생 시 참고할 수 있도록 합니다.


#!/bin/bash
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
USAGE=$(df -h)
echo -e "\n==== $TIMESTAMP ====" >> /var/log/disk_check.log
echo "$USAGE" >> /var/log/disk_check.log

설명:
- df -h: 모든 파일시스템 사용량을 인간 친화적으로 표시
- 로그에 날짜와 함께 누적 저장됩니다.
- cron에 등록하여 주기적으로 실행 가능합니다.


마무리

디스크는 시스템 성능과 직결되는 핵심 자원이므로, 사전 모니터링과 자동화가 중요합니다. 위 스크립트들은 크론(cron)과 연계하거나 이메일, 슬랙 알림 등과 조합하여 실무 환경에 맞게 확장 가능합니다.


실무에 바로 적용할 수 있는 리눅스 쉘 스크립트 예제, 스마트베이에서 함께합니다.


스마트베이 | IT 자동화 혁신 파트너
비즈니스 효율을 높이는 스마트한 IT 솔루션을 제공합니다.

웹사이트 : www.esmartbay.co.kr
E-mail : smartbay.svc@gmail.com
카카오톡 : 바로 상담하기