◾️ 시나리오
스토리지 서버의 디스크가 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
서버 로드에버리지는 현재 이상 없음.
2. 메모리
free -m
서버 메모리 공간 또한 여유 있음.
3. 디스크
df -k | grep '/dev/sda*'
현재 /nfs 디렉토리의 용량이 매우 높은 상태.
4. 최종 리포트
ls -lh /mnt/backup
스토리지의 공유 디렉토리(/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