# Linux 서버 디스크 가득 참: 공간을 차지하는 항목 찾기

디스크가 가득 찬 원인은 보통 한두 가지로 분명합니다. 위에서부터 차례로 확인하고, 삭제하기 전에 먼저 살펴보세요. 어떤 서비스가 소유한 파일인지 모르면 /var/lib 아래 파일은 직접 삭제하지 마세요.

## 1. 어느 파일 시스템이 가득 찼는지 확인하기

df -h를 실행하세요. Use% 열과 Mounted on 열을 살펴보세요. 가득 찬 파일 시스템은 /일 수도 있고 별도로 마운트된 /var, /home, /data일 수도 있으며, 엉뚱한 곳을 정리하면 아무 변화가 없습니다.
df -i도 실행하세요. 파일 시스템에 여유 공간은 있어도 여유 inode가 없을 수 있습니다. 세션, 메일 큐, 캐시 파일 같은 작은 파일이 수백만 개 쌓이면 이런 일이 생깁니다. IUse%가 100%에 가깝다면 큰 파일 몇 개가 아니라 작은 파일 여러 개를 찾아야 합니다.

## 2. 가장 큰 디렉터리 찾기

sudo du -xh --max-depth=1 / | sort -h를 실행하고 마지막 줄들을 읽어 보세요. -x 옵션은 하나의 파일 시스템 안에서만 검사하므로 마운트된 디스크나 가상 파일 시스템이 결과를 왜곡하지 않습니다. 가장 큰 디렉터리 안에서도 같은 방식으로 반복하세요. 예: sudo du -xh --max-depth=1 /var | sort -h.
ncdu가 설치되어 있다면(Debian과 Ubuntu에서는 sudo apt install ncdu), sudo ncdu -x /로 같은 데이터를 대화형으로 둘러볼 수 있습니다.

## 3. 삭제됐지만 아직 열려 있는 파일 확인하기

du 결과가 df보다 훨씬 적게 나온다면, 삭제된 파일(대개 용량이 큰 로그)을 프로세스가 아직 열어 두고 있을 수 있습니다. sudo lsof +L1은 링크 수가 0인 열린 파일을 보여 줍니다. 해당 프로세스가 파일을 닫으면 공간이 돌아오며, 보통은 그 파일을 소유한 서비스를 다시 시작해야 합니다. 요청이 몰리는 시간대가 아니라 한가한 시간에 진행하세요.

## 4. 흔한 원인 살펴보기

로그: /var/log를 살펴보고 journalctl --disk-usage로 저널을 확인하세요. 용량이 크다면 journald 크기 제한 가이드를 참고하세요.
패키지: sudo apt clean은 내려받은 패키지 파일을 삭제합니다. sudo apt autoremove는 더 이상 필요 없는 패키지와 이전 커널을 보여 주며, 확인하기 전에 삭제될 항목을 먼저 표시합니다. 현재 실행 중인 커널과 이전 버전 하나는 남겨 두세요.
Docker: docker system df는 이미지, 컨테이너, 볼륨, 빌드 캐시를 보여 줍니다. docker system prune은 중지된 컨테이너, 사용하지 않는 네트워크, 댕글링 이미지를 삭제합니다. --volumes를 추가하지 않으면 볼륨은 삭제하지 않으므로, 응답하기 전에 안내 메시지를 읽어 보세요.
Snap: snap list --all은 비활성화된 snap의 이전 리비전을 보여 주며, snap remove NAME --revision=NUMBER로 하나씩 삭제할 수 있습니다.

## 5. 공간을 확보한 후

df -h를 다시 실행하고, 디스크가 가득 차서 중지된 서비스가 실행 중인지 확인하세요(systemctl --failed). 디스크가 가득 찬 상태를 겪은 데이터베이스는 신뢰하기 전에 다시 시작하거나 점검해야 할 수 있습니다.
그런 다음 같은 일이 반복되지 않도록 제한을 설정하세요. 로그 순환, journald 제한, 디스크가 90%에 도달하기 전에 울리는 알림이 있습니다.

## FAQ

**/var/log의 파일을 삭제해도 안전한가요?**

순환되어 압축된 로그(예: syslog.1 또는 .gz 파일)는 더 이상 필요하지 않으면 대개 삭제해도 됩니다. 실행 중인 서비스의 현재 로그 파일은 삭제하지 마세요. 조심해서 내용을 비우거나 logrotate에 맡기고, 먼저 서비스가 해당 파일을 어떻게 사용하는지 확인하세요.

**df는 디스크가 가득 찼다고 나오는데 du 합계는 왜 맞지 않나요?**

대개 삭제된 파일을 실행 중인 프로세스가 아직 열어 두고 있거나(lsof +L1 참고), 서로 다른 파일 시스템의 수치를 비교하고 있기 때문입니다. 같은 마운트 지점에 대해 du -x와 df를 비교하세요.

**프로덕션 서버에서 docker system prune을 실행해도 되나요?**

docker system df로 확인하고 사용하지 않는 항목을 살펴본 후에만 실행하세요. 앞으로 시작하려던 이미지가 삭제될 수 있습니다. 볼륨은 기본적으로 유지되지만, 중요한 데이터는 반드시 백업해 두세요.

Source: https://raincleaner.eu/ko/guides/linux-server-disk-full-find-what-is-using-space