Profile picture

스토리지 서버(NFS) 트러블슈팅 - Disk full 관련 이슈

JaehyoJJAng2023년 02월 26일

◾️ 시나리오

스토리지 서버의 디스크가 full


▪️ 자주 사용할 명령어

  • find 옵션 찾기시작할경로 {Expression}

파일찾기 예시

# 7일 이내에 Modify 된 파일 찾기
find / -mtime -7 -type f -perm /o+r -iname "test_?.txt" -exec stat {} \;

# 응용
find / -type f -perm /u+x -iname "*.log" -exec file {} \;

◾️ 장애원인 파악하기

  • 스토리지 서버 접속
    • 디스크 파티션 통계확인 (df)
    • 디렉토리 별 사이즈확인 (du)

▪️ 장애원인

백업 파일이 주기적으로 삭제되지 않고 계속해서 축적되고 있었음!
: 백업 파일의 용량이 낮은 편이 아니기에 계속해서 쌓이며 디스크 용량도 점점 차오름. 그러다 결국 백업 파일로 인해 디스크가 ful 되버린 상황


◾️ 작업 흐름 변경

  • 백업 파일 관리
    • 어떻게 ?
      • 일주일치 백업 파일만 보관하도록 셸 스크립트 수정. (이전 파일 삭제)

◾️ nfs 서버 상태 체크

1. 로드에버리지 확인

uptime

image
서버 로드에버리지는 현재 이상 없음.


2. 메모리

free -m

image
서버 메모리 공간 또한 여유 있음.


3. 디스크

df -k | grep '/dev/sda*'

image
현재 /nfs 디렉토리의 용량이 매우 높은 상태.


4. 최종 리포트

ls -lh /mnt/backup

image
스토리지의 공유 디렉토리(/mnt/backup)에 이전 백업 파일들이 삭제되지 않고 계속 쌓이다보니 디스크가 full이 되어버림.


가장 최근의 백업본(1주일치)만 남기고 모두 삭제.

find /mnt/backup -mtime +7 -exec sh -c "ls -l {}; rm -rf {}" \;

그러나 위 처럼 매번 disk가 full된 상황일 때 마다 서버에 들어가서 직접 위 명령을 쳐주어야 할까? 매우 번거롭지 않을까?


5. 문제해결

web,db,nfs 백업 스크립트 전면 수정

아래코드를 추가만 해주면 더 이상 disk가 full 되어 서버가 먹통될 걱정은 안해도 된다!

# ... 백업 코드들  ...
# 이전 백업파일 삭제
/bin/echo "=== 이전 백업파일 삭제"
/bin/echo
/usr/bin/find "${BACK_PATH}" -mtime +7 -exec sh -c "ls -1 {}; rm -f {}" \; # 여러개의 명령 실행 시 sh -c 옵션 사용, 뒤에 옵션은 쿼팅처리
/usr/bin/echo

Loading script...