디스크 용량이 꽉 찼을 때 원인 찾는 법

디스크 용량이 꽉 찼을 때 원인 찾는 법을 Linux 명령어로 정리했습니다. 파일시스템, 디렉터리, 대용량 파일, 삭제된 열린 파일을 단계별로 확인해 보세요. df는 파일시스템 단위의 사용량을 보여주므로, 특정 폴더만 살펴보기 전에 실행하는 것이 좋습니다.

디스크가 가득 찼다는 경고가 보이면 무작정 파일을 삭제하기보다 파일시스템, 디렉터리, 대용량 파일, 삭제된 열린 파일 순서로 확인해야 합니다. 이 글의 명령 예시는 Linux 기준이며, BSD 계열이나 BusyBox 기반 NAS에서는 du -d와 find -printf 옵션이 다를 수 있습니다. Linux 서버나 NAS에서 셸 명령을 실행할 수 있고, 기본적인 터미널 사용이 가능하다고 가정합니다.

목차

파일시스템 사용량 확인

디스크 용량 원인을 df, du, find, lsof 순서로 확인하는 흐름도

먼저 전체 디스크가 정말 부족한지 확인합니다. df는 파일시스템 단위의 사용량을 보여주므로, 특정 폴더만 살펴보기 전에 실행하는 것이 좋습니다.

df -hT

Use%가 높은 파일시스템의 마운트 경로를 확인하세요. 용량이 남아 있어도 inode(파일을 관리하는 메타데이터)가 부족하면 새 파일을 만들 수 없으므로 다음 명령도 함께 봅니다.

df -ih

디렉터리별 용량 분석

문제가 된 마운트 경로를 기준으로 어느 디렉터리가 큰지 확인합니다. / 전체를 검사하는 예시는 다음과 같습니다.

sudo du -xhd 1 / 2>/dev/null | sort -h

-x는 다른 파일시스템으로 넘어가지 않게 하는 옵션입니다. 이 옵션을 빼면 외부 디스크나 가상 파일시스템까지 합쳐져 실제 원인과 다른 결과가 보일 수 있습니다. 큰 경로를 찾았다면 같은 명령을 해당 경로에 다시 실행해 범위를 좁힙니다.

대용량 파일 검색

로그, 임시 파일, 백업 파일처럼 디렉터리 안에 숨어 있는 큰 파일은 find로 찾을 수 있습니다.

sudo find / -xdev -type f -size +1G -printf '%s %p\n' 2>/dev/null | sort -nr | head

출력된 파일을 바로 삭제하지 말고 소유 서비스와 마지막 수정 시각을 먼저 확인하세요. 운영 중인 로그를 임의로 지우면 서비스 오류나 추적 정보 손실이 생길 수 있으므로, 서비스의 로그 순환 설정이나 보관 정책을 확인한 뒤 정리하는 편이 안전합니다.

삭제된 열린 파일 확인

du에서 보이는 파일을 정리했는데도 df 사용량이 줄지 않는다면, 삭제됐지만 프로세스가 계속 열고 있는 파일일 수 있습니다. Linux에서는 파일 이름이 사라져도 프로세스가 파일을 닫기 전까지 공간이 반환되지 않습니다.

sudo lsof +L1

목록에서 큰 파일을 잡고 있는 프로세스와 PID를 확인한 뒤 해당 서비스의 정상 재시작 절차를 사용하세요. 이 경우 du에는 파일이 나타나지 않지만 df에는 사용량이 남는 현상이 보입니다. 프로세스를 강제 종료하기 전에는 서비스 영향과 재시작 가능 여부를 먼저 판단해야 합니다.

격리된 파일시스템에서 직접 확인한 예

2026년 10월 18일 Docker Engine 29.6.2의 네트워크 없는 임시 컨테이너에서 16 MiB tmpfs에 1,048,576바이트 파일을 만들고 df -k /work, du -k /work/sample.bin, wc -c /work/sample.bin을 실행했습니다. df는 전체 16,384 KiB 중 사용 1,024 KiB, 여유 15,360 KiB와 7%를 표시했고, du는 파일의 할당량 1,024 KiB, wc는 내용 길이 1,048,576바이트를 출력했습니다.

이 예에서 df는 파일시스템 전체, du는 해당 파일, wc는 실제 바이트 길이를 봅니다. 컨테이너의 임시 메모리 파일시스템에서 얻은 결과이며 NAS 실디스크의 여유 공간을 측정한 값은 아닙니다.

같은 날 별도의 네트워크 없는 16 MiB tmpfs에서 1 MiB 파일을 연 채 삭제하는 실험도 했습니다. 사용 가능 공간은 생성 전 16,777,216바이트, 쓰기 후 15,728,640바이트였고, 파일 경로를 삭제한 뒤에도 열린 동안에는 15,728,640바이트였습니다. 파일을 닫자 16,777,216바이트로 돌아왔습니다. 이 결과는 해당 임시 파일시스템에서 열린 파일이 공간을 유지하는 예이며 NAS의 실제 사용량이나 특정 서비스 상태를 뜻하지 않습니다.

또 다른 차이는 희소 파일에서 나타납니다. 임시 디렉터리에서 마지막 바이트에만 기록한 파일은 stat 기준 논리 크기 1,048,576바이트에 실제 할당 블록은 4,096바이트였습니다. 빈 영역을 물리적으로 모두 할당하지 않는 파일의 예이므로 이 결과를 NAS 실측값으로 해석하면 안 됩니다. 파일시스템과 할당 방식에 따라 수치는 달라지며, 파일의 논리 크기와 실제 할당량을 비교할 때 이 차이를 확인하세요.

하드링크와 삭제 공간 확인

네트워크 없는 임시 컨테이너의 16 MiB tmpfs에서 1 MiB 파일에 하드링크를 하나 만들었습니다. 두 이름은 같은 inode를 가리켰고 링크 수는 2였습니다. 첫 이름을 지운 뒤에도 1,048,576바이트가 할당된 채 링크 수가 1로 남았고, 마지막 이름까지 지우자 할당량이 0으로 돌아왔습니다. 이는 임시 파일시스템에서의 예시이며 NAS 디스크를 측정한 결과가 아닙니다.

파일 이름 하나를 지워도 같은 파일의 다른 하드링크가 남아 있으면 공간이 반환되지 않을 수 있습니다. GNU du 문서는 기본적으로 같은 하드링크의 사용량을 한 번만 계산한다고 설명합니다. 파일 목록과 링크 수를 확인하고 운영 서비스에 필요한 파일은 임의로 지우지 마세요.

정리 순서와 결론

df -hT로 가득 찬 파일시스템을 찾고, du로 큰 디렉터리를 좁힌 다음, find로 파일을 확인합니다. 그래도 차이가 남으면 lsof +L1로 삭제된 열린 파일을 점검하면 됩니다.

무작정 삭제하지 말고 원인과 소유 서비스를 확인하는 것이 핵심입니다. 파일을 지운 뒤에도 용량이 그대로라면 열린 파일부터 의심해 보세요.

관련 글