/엔지니어/트러블슈팅/리눅스 디스크 꽉 찼을 때 — No space le
트러블슈팅초급UbuntuDebianCentOSRHEL디스크No space leftdf

리눅스 디스크 꽉 찼을 때 — No space left on device 10분 해결

No space left on device 오류가 떴을 때 df·du·find 명령어로 주범을 10분 안에 찾고, 로그·Docker·패키지 캐시·대용량 파일을 안전하게 정리하는 가이드.

No space left on device 에러는 디스크 100% 상태에서 파일 쓰기가 실패할 때 나타납니다. 서버가 멈추기 전에 10분 안에 공간을 확보해야 합니다.


Step 1 — 상황 파악 (1분)

Bash
# 전체 디스크 사용률
df -h

# 출력 예
# Filesystem      Size  Used Avail Use% Mounted on
# /dev/sda1        50G   50G     0 100% /        ← 문제
Bash
# inode 사용률도 확인 (파일 수 초과도 같은 에러 발생)
df -i

# inode 100%면 파일 수가 너무 많은 것 → 아래 inode 섹션 참고

Step 2 — 주범 디렉터리 찾기 (2분)

Bash
# 루트 기준 1단계 디렉터리 용량 정렬
sudo du -sh /* 2>/dev/null | sort -rh | head -15

# 용량 큰 디렉터리 안으로 좁혀 들어가기
sudo du -sh /var/* 2>/dev/null | sort -rh | head -10
sudo du -sh /var/log/* 2>/dev/null | sort -rh | head -10

주로 큰 디렉터리:

위치원인
/var/log로그 파일 과다 축적
/var/lib/dockerDocker 이미지·컨테이너
/tmp임시 파일 미정리
/home사용자 파일
/var/cache/apt패키지 캐시

Step 3 — 빠른 정리 (5분)

로그 파일 정리

Bash
# journald 로그 (가장 효과 큼)
sudo journalctl --disk-usage
sudo journalctl --vacuum-size=200M    # 200MB만 남기기
sudo journalctl --vacuum-time=7d      # 7일치만 남기기

# 오래된 로그 파일 찾기
sudo find /var/log -name "*.log" -mtime +30 -size +10M

# 압축 로그(rotated) 삭제
sudo find /var/log -name "*.gz" -delete
sudo find /var/log -name "*.1" -delete

패키지 캐시 정리

Bash
# Ubuntu/Debian
sudo apt autoremove -y
sudo apt autoclean
sudo apt clean    # /var/cache/apt/archives 전부 삭제

# CentOS/RHEL
sudo yum clean all
sudo dnf clean all

Docker 정리

Bash
# 사용하지 않는 컨테이너·이미지·볼륨·네트워크 일괄 삭제
docker system prune -f

# 볼륨까지 삭제 (데이터 손실 주의!)
docker system prune -f --volumes

# 이미지만 정리
docker image prune -a -f

# 사용량 확인
docker system df

대용량 파일 찾기

Bash
# 1GB 이상 파일 전체 탐색
sudo find / -xdev -size +1G -printf "%s	%p
" 2>/dev/null | sort -rn | head -10

# 500MB 이상
sudo find / -xdev -size +500M -printf "%s	%p
" 2>/dev/null | sort -rn | head -20

/tmp 정리

Bash
# 오래된 임시 파일 삭제 (7일 이상)
sudo find /tmp -mtime +7 -delete
sudo find /var/tmp -mtime +30 -delete

Step 4 — inode 부족 해결

디스크 공간은 있는데 같은 에러가 난다면 inode 부족입니다.

Bash
df -i    # IUse% 확인

# 파일 수가 많은 디렉터리 찾기
sudo find / -xdev -printf "%h
" 2>/dev/null | sort | uniq -c | sort -rn | head -10

주범은 보통:

  • PHP 세션 파일: /var/lib/php/sessions/
  • 썸네일 캐시: /var/cache/
  • 메일 큐: /var/spool/mail/
  • Node.js node_modules 내 소규모 파일 수천 개
Bash
# PHP 세션 정리 예시
sudo find /var/lib/php/sessions -mtime +1 -delete

재발 방지

Bash
# logrotate 설정 확인
cat /etc/logrotate.conf
ls /etc/logrotate.d/

# 디스크 사용률 모니터링 (cron으로 알림)
# /etc/cron.daily/disk-alert 파일 생성
cat > /tmp/disk-alert.sh << 'SCRIPT'
#!/bin/bash
THRESHOLD=85
USAGE=$(df / | awk 'NR==2 {print $5}' | tr -d '%')
if [ "$USAGE" -gt "$THRESHOLD" ]; then
  echo "디스크 사용률 ${USAGE}%" | mail -s "[경고] 디스크 부족" [email protected]
fi
SCRIPT
sudo mv /tmp/disk-alert.sh /etc/cron.daily/disk-alert
sudo chmod +x /etc/cron.daily/disk-alert
#디스크#No space left#df#du#트러블슈팅#Docker#로그 정리
편집 안내 · Editorial Note

이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.

질문 & 답변 (Q&A)

이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.