# 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로 이동