DOCS/troubleshooting/250716_SSD_용량_부족_및_Docker_정리.md
happybell80 725ad0876c fix: 문서 파일 실행 권한 제거
- 모든 .md, .html 파일 권한을 644로 정상화
- .gitignore 파일 권한도 644로 수정
- 문서 파일에 실행 권한은 불필요하고 보안상 바람직하지 않음
- deprecated 아이디어 폴더 생성 및 레벨별 UI 변경 아이디어 이동
2025-08-18 00:37:51 +09:00

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

후속 조치

  1. maintenance-scheduler.sh 스크립트 개선

    • Docker 정리 로직 추가
    • 용량 임계치 모니터링 기능 추가
  2. 모니터링 대시보드 구축

    • SSD/HDD 용량 실시간 모니터링
    • Docker 용량 추적
  3. 백업 전략 개선

    • 중요 데이터는 SSD에 유지
    • 로그 및 아카이브는 HDD로 이동