리눅스 디스크가 꽉 찼을 때 원인 찾고 해결하기
df, du로 범인을 찾는 순서와 파일을 지워도 용량이 안 줄어드는 경우를 정리했습니다.
No space left on device가 나오면 서비스가 로그를 못 쓰고 DB가 멈출 수 있습니다. 먼저 무엇이 찼는지 확인하고, 지우기 전에 어떤 파일인지 확인합니다.
1단계: 어느 파일시스템이 찼는지 확인
df -h
df -idf -h는 용량, df -i는 아이노드 사용량입니다. 용량이 남았는데도 쓸 수 없다면 작은 파일이 너무 많아 아이노드가 소진된 경우입니다.
2단계: 큰 디렉터리 찾기
sudo du -xh --max-depth=1 / 2>/dev/null | sort -h | tail -15-x는 다른 파일시스템으로 넘어가지 않게 합니다. 큰 곳으로 내려가며 반복합니다. 대표적인 범인은 /var/log, Docker 데이터, 패키지 캐시, 빌드 산출물입니다.
3단계: 흔한 원인별 정리
# systemd 저널을 500MB로 제한
sudo journalctl --vacuum-size=500M
# 패키지 캐시 (Debian, Ubuntu)
sudo apt clean
# Docker 사용량 확인 후 미사용 이미지 정리
docker system df
docker image prunedocker system prune -a --volumes는 데이터 볼륨까지 지울 수 있으므로 내용을 확인하지 않고 쓰면 안 됩니다.
파일을 지웠는데 용량이 그대로일 때
프로세스가 파일을 열고 있으면 삭제해도 공간이 반환되지 않습니다. 아래 명령으로 찾은 뒤 해당 서비스를 재시작하거나 로그를 다시 열게 합니다.
sudo lsof +L1실행 중인 서비스의 로그는 rm보다 비우는 쪽이 안전합니다.
sudo truncate -s 0 /var/log/app.log재발 막기
- logrotate로 로그를 회전합니다.
- Docker 로그 크기를 max-size로 제한합니다.
- 사용률 80%에서 알림을 받습니다.