디스크 공간은 어디로 갔나: 분석과 정리
“디스크가 거의 꽉 찼습니다”는 언젠가 모든 Ubuntu 사용자에게 찾아옵니다. 짜증나는 부분은 df가 가득 찼다는 사실은 알려주지만 무엇이 채웠는지는 알려주지 않는다는 점입니다. 다음은 재현 가능한 순서입니다. 먼저 찾고, 그다음 정리하세요.
1단계: 실제로 얼마나 찼을까
df -hUse% 열을 보세요. 주로 /(루트 파일시스템)와, 별도 파티션이라면 /home을 확인합니다.
그래픽으로 확인하는 방법은 디스크(Disks)에서 파티션을 선택한 뒤 나오는 사용량 막대, 또는 파일 관리자 사이드바 하단의 용량 막대입니다.
2단계: 큰 디렉터리 찾기
du로도 계산할 수 있지만, 결국 한 단계씩 추측하게 됩니다:
# Size of each subdirectory here, largest first
du -h --max-depth=1 . | sort -hr | head디스크 사용량 분석기(baobab)는 전체 트리를 한 번에 스캔하며 훨씬 읽기 쉽습니다:
sudo apt install baobab
baobab /home/$USER지정한 경로를 스캔하기 시작하고, 완료되면 다음과 같은 화면이 나옵니다:

읽는 방법:
- 왼쪽 목록은 크기순으로 정렬되어 있으며, 화살표를 눌러 행을 펼치면 정확한 경로를 알 수 있어 링을 클릭하는 것보다 낫습니다
- 오른쪽 아래의 **트리맵 차트(Treemap Chart)**는 비율을 면적으로 바꿔주므로 가장 큰 블록이 한눈에 보입니다
- 이 스크린샷은 갓 설치한 VM으로, **
snap만으로 87%**를 차지합니다. 버그가 아니라 모든 Snap 앱이 여러 리비전을 보관하기 때문입니다
~ 스캔은 몇 초면 끝나지만 / 스캔은 전체 시스템을 순회하므로 몇 분이 걸립니다. ~부터 시작하고, 그것으로 사용량이 설명되지 않을 때만 /를 스캔하세요.
3단계: 흔한 원인 정리
오래된 Snap 리비전
Snap은 롤백할 수 있도록 최근 리비전을 몇 개 보관하며, 각각은 프로그램의 완전한 복사본입니다. 위의 87%가 바로 그것입니다.
# Keep 2 revisions instead of the default 3
sudo snap set system refresh.retain=2
# Remove every disabled revision
sudo snap list --all | awk '/disabled/{print $1, $3}' | while read name rev; do
sudo snap remove "$name" --revision="$rev"
done내려받은 패키지
# Empty /var/cache/apt/archives
sudo apt clean
# Drop dependencies nothing needs any more
sudo apt autoremove --purgesystemd 저널
journalctl 로그는 수 GB까지 커질 수 있습니다:
# Keep at most 200 MB
sudo journalctl --vacuum-size=200M
# Or keep only 7 days
sudo journalctl --vacuum-time=7d사용자 캐시
브라우저, 썸네일, 앱 캐시는 모두 ~/.cache에 있습니다:
du -h --max-depth=1 ~/.cache | sort -hr | head삭제하기 전에 생각해 보세요. 브라우저 캐시는 필요할 때 다시 채워지고 보통 로그인 상태를 유지해 주지만, ~/.cache/thumbnails는 언제 지워도 안전합니다.
4단계: 정리만으로 부족할 때
정리는 시간을 벌어줄 뿐이고, 진짜 공간은 확장하거나 옮겨서 만듭니다:
- 가상 머신: VM 설정에서 가상 디스크를 키운 다음 파티션을 확장합니다(
growpart와resize2fs) - 물리 머신: 디스크를 추가하고 포맷·마운트합니다 — 디스크, 마운팅 및 fstab 참고
- 데이터 이동:
~/Downloads나 Docker 데이터 루트 같은 큰 디렉터리를 새 디스크로 옮기고fstab으로 마운트합니다
FAQ
df는 가득 찼다는데 du를 더하면 훨씬 적습니다
전형적인 경우입니다. 파일은 삭제되었지만 어떤 프로세스가 여전히 열고 있어서, 그 프로세스가 종료될 때만 공간이 해제됩니다.
# Find deleted files that are still open
sudo lsof +L1 2>/dev/null | head보통의 원인은 아직 실행 중인 로그 기록 프로세스입니다. 해당 프로세스를 소유한 서비스를 재시작하세요(sudo systemctl restart <service>).
“No space left on device”인데 df는 여유 공간을 보여줍니다
아마도 inode 고갈일 것입니다. 작은 파일이 대량으로 있는 경우(메일 스풀, 컨테이너 레이어) 흔합니다.
# Check inode usage
df -iIUse%가 100%라면 이것이 문제입니다. 해결 방법은 같은 종류의 정리이지만, 지워야 하는 것이 큰 파일이 아니라 작은 파일 여러 개라는 점만 다릅니다.
정리 자동화
systemd-tmpfiles가 이미 /tmp와 일부 캐시를 정리합니다. apt 캐시 정리를 예약하려면 cron 항목을 추가하세요:
# Clean the apt cache every Sunday at 03:00
0 3 * * 0 root /usr/bin/apt clean/etc/cron.d/apt-clean으로 저장하세요.
관련 문서
- 디스크, 마운팅 및 fstab — 파티션, 포맷, 부팅 시 마운트
- 성능 모니터링 — htop과 시스템 모니터
- journalctl — 로그 크기와 로테이션