# 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단계: 불필요한 디렉토리 정리 ```bash # 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 시스템 정리 ```bash # 미사용 이미지 정리 (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단계: 자동화 스크립트 개선 ```bash # 백업 스크립트 이름 변경 및 기능 확장 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 공간 절약 ## 관련 명령어 ### 용량 확인 ```bash # 디스크 사용량 확인 df -h # Docker 용량 확인 docker system df # 디렉토리별 용량 확인 du -sh /var/lib/docker/* ``` ### 정기 정리 명령어 ```bash # 전체 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로 이동