- 7-8월 초기 구축 문서 12개를 _archive/troubleshooting/2025_07-08_initial_setup/로 이동 - book/300_architecture/390_human_in_the_loop_intent_learning.md를 journey/research/intent_classification/로 이동 (개발 여정 문서) - 빈 폴더 제거 (journey/assets/*)
4.1 KiB
4.1 KiB
SSD 용량 부족 및 Docker 정리
날짜: 2025-07-16
문제: Ubuntu 서버 SSD 용량 부족으로 인한 시스템 성능 저하
해결 시간: 약 2시간
담당자: admin
문제 상황
- Ubuntu 서버 SSD 용량 부족 (228GB 중 65GB 사용, 30%)
- Docker 이미지 및 캐시가 38.62GB 차지 (37.27GB 재사용 가능)
- 불필요한 파일들이 /home/admin/에 산재
원인 분석
1. Docker 관련 (58GB - 최대 원인)
/var/lib/docker/overlay2: 52GB (컨테이너 레이어)/var/lib/docker/volumes: 6.2GB- 미사용 이미지 43개, 빌드 캐시 218개
2. 불필요한 디렉토리 (57MB)
/home/admin/test_api/: 17M (rb10508 이전 버전)/home/admin/github-migration/: 21M (GitHub→Gitea 마이그레이션 도구)/home/admin/logs/: 13M (오래된 로그)/home/admin/robeing-nginx/: 36K
3. 중복 파일
- Docker 관련 파일들 (Dockerfile, requirements.txt, docker-compose.yml)
- Python 캐시 (.cache/uv/archive-v0/)
해결 과정
1단계: 불필요한 디렉토리 정리
# HDD dump 디렉토리 생성
mkdir -p /mnt/hdd/dump
# 불필요한 디렉토리들을 HDD로 이동
sudo cp -r /home/admin/test_api /mnt/hdd/dump/ && sudo rm -rf /home/admin/test_api
sudo cp -r /home/admin/github-migration /mnt/hdd/dump/ && sudo rm -rf /home/admin/github-migration
sudo cp -r /home/admin/robeing-nginx /mnt/hdd/dump/ && sudo rm -rf /home/admin/robeing-nginx
sudo cp -r /home/admin/logs /mnt/hdd/dump/ && sudo rm -rf /home/admin/logs
# 임시 파일 삭제
rm -rf /home/admin/temp/
2단계: Docker 시스템 정리
# 미사용 이미지 정리 (34개 삭제)
docker image prune -f
# 중단된 컨테이너 정리 (2개, 1.65MB)
docker container prune -f
# 미사용 네트워크 정리
docker network prune -f
# 미사용 볼륨 정리 (15개, 4.95GB)
docker volume prune -f
# 빌드 캐시 정리 (218개 → 47개, 30.12GB)
docker builder prune -f
3단계: 자동화 스크립트 개선
# 백업 스크립트 이름 변경 및 기능 확장
mv /home/admin/backup-to-nas.sh /home/admin/maintenance-scheduler.sh
# Docker 정리 섹션 추가 (일요일마다 실행)
# - 미사용 이미지/컨테이너/네트워크 정리
# - 1주일 이상된 빌드 캐시 정리
# crontab 업데이트
echo "0 2 * * * /home/admin/maintenance-scheduler.sh >> /var/log/maintenance/cron.log 2>&1" | sudo crontab -
결과
- SSD 사용률: 30% → 14% (35GB 절약)
- 여유 공간: 152GB → 187GB
- Docker 용량: 38.62GB → 8.46GB
- 정리된 항목: 이미지 34개, 볼륨 15개, 빌드 캐시 218개
예방 조치
1. 자동 정리 스케줄
- 매일 새벽 2시: 데이터 백업
- 매주 일요일: Docker 시스템 정리
- 매월 1일: 월간 아카이브 생성
2. 모니터링
- maintenance-scheduler.sh에서 정리 결과 로깅
- /var/log/maintenance/ 디렉토리에 작업 로그 저장
3. 구조 개선
- 로그 파일들을 HDD로 이동 (심링크 연결)
- 백업 파일들을 /mnt/hdd/frontend-backups/로 이동
교훈
- Docker는 정기적인 정리 없이는 지속적으로 용량을 차지함
- 빌드 캐시가 가장 큰 용량을 차지하므로 우선 정리 대상
- 자동화된 정리 스크립트가 필수적
- 로그와 백업은 HDD를 활용하여 SSD 공간 절약
관련 명령어
용량 확인
# 디스크 사용량 확인
df -h
# Docker 용량 확인
docker system df
# 디렉토리별 용량 확인
du -sh /var/lib/docker/*
정기 정리 명령어
# 전체 Docker 정리 (주의: 실행 중인 컨테이너 제외)
docker system prune -a -f
# 빌드 캐시만 정리
docker builder prune -f
# 1주일 이상된 빌드 캐시 정리
docker builder prune --filter until=168h -f
후속 조치
-
maintenance-scheduler.sh 스크립트 개선
- Docker 정리 로직 추가
- 용량 임계치 모니터링 기능 추가
-
모니터링 대시보드 구축
- SSD/HDD 용량 실시간 모니터링
- Docker 용량 추적
-
백업 전략 개선
- 중요 데이터는 SSD에 유지
- 로그 및 아카이브는 HDD로 이동