CentOS 7에서 No space left on device 오류가 발생할 때 원인을 확인하는 방법

안녕하세요. VISION IDC 기술팀입니다.

CentOS 7에서 파일 생성, 패키지 설치, 로그 기록 또는 애플리케이션 실행 중 No space left on device 오류가 발생하면 단순히 디스크 용량만 부족하다고 판단해서는 안 됩니다. Linux의 ENOSPC 오류는 해당 파일시스템에서 새 데이터를 할당할 공간이 없을 때 발생하며, 실제 원인은 디스크 블록 소진, inode 소진, 삭제됐지만 프로세스가 계속 열고 있는 파일 등으로 나뉠 수 있습니다.

이번 문서에서는 df, du, find, lsof를 이용해 어느 파일시스템에서 문제가 발생했는지 확인하고 원인을 단계적으로 좁히는 방법을 설명합니다. 파일을 바로 삭제하기보다 먼저 공간을 점유하는 원인을 확인하는 것이 중요합니다.

적용 환경

운영체제 CentOS Linux 7
주요 명령어 df, du, find, lsof, dmesg
필요 권한 전체 파일 및 프로세스를 확인하려면 root 또는 sudo 권한 필요

1. 가장 먼저 확인할 항목

오류가 발생한 경로가 어느 파일시스템에 속하는지 먼저 확인합니다. 예를 들어 /var 아래에서 파일 생성이 실패했다면 다음과 같이 확인합니다.

df -hT /var
df -i /var

df -hT에서는 Use%Avail을 확인하고, df -i에서는 IUse%IFree를 확인합니다. 오류가 다른 경로에서 발생했다면 /var 대신 해당 경로를 지정하십시오.

2. 디스크 블록 부족 확인

전체 파일시스템의 사용률을 확인합니다.

df -hT

Use%가 100%에 가깝고 Avail이 거의 없다면 실제 데이터 블록 부족이 우선 원인입니다. 문제가 발생한 마운트 지점을 확인한 뒤 그 파일시스템 안에서 용량을 많이 사용하는 디렉터리를 좁힙니다.

루트 파일시스템을 조사하는 예시는 다음과 같습니다. -x는 다른 파일시스템으로 넘어가지 않도록 제한합니다.

sudo du -x -h --max-depth=1 / 2>/dev/null | sort -hr

예를 들어 /var가 크다면 범위를 한 단계씩 좁힙니다.

sudo du -x -h --max-depth=1 /var 2>/dev/null | sort -hr
sudo du -x -h --max-depth=1 /var/log 2>/dev/null | sort -hr

특정 파일시스템에서 1GiB보다 큰 파일을 찾으려면 다음과 같이 시작 경로를 지정할 수 있습니다.

sudo find /var -xdev -type f -size +1G -exec du -h -- {} + 2>/dev/null | sort -hr | head -n 30

3. inode 부족 확인

디스크 용량이 남아 있는데도 새 파일이나 디렉터리를 만들 수 없다면 inode 사용률을 확인합니다.

df -i

IUse%가 100%에 가깝거나 IFree가 0에 가까우면 inode 부족이 원인일 수 있습니다. 이 경우 대용량 파일 하나보다 작은 파일이 매우 많이 누적된 경로를 찾아야 합니다.

예를 들어 /var에서 파일이 많이 생성되는 위치를 조사하려면 먼저 캐시, 세션, 메일 큐, 임시 파일, 애플리케이션 로그 디렉터리 등을 서비스별로 확인합니다. 전체 파일 개수 검색은 파일 수가 매우 많은 서버에서 I/O 부하를 발생시킬 수 있으므로 문제가 있는 마운트 지점과 하위 경로를 먼저 좁히는 것이 좋습니다.

4. 삭제됐지만 프로세스가 계속 열고 있는 파일 확인

df에서는 사용량이 매우 높은데 du로는 그만큼 큰 파일을 찾을 수 없다면, 실행 중인 프로세스가 삭제된 파일을 계속 열고 있을 가능성을 확인합니다.

먼저 lsof 설치 여부를 확인합니다.

command -v lsof

lsof가 설치되어 있다면 링크 수가 0인 열린 파일을 확인합니다.

sudo lsof +L1

출력에서 COMMAND, PID, SIZE/OFF, NAME을 확인합니다. 삭제된 파일이라도 프로세스가 파일 설명자를 닫지 않았다면 해당 공간은 즉시 반환되지 않습니다.

lsof가 설치되어 있지 않고 yum 저장소 오류로 설치할 수 없다면 아래 VISION IDC의 CentOS 7 Vault 저장소 문서를 먼저 참고할 수 있습니다.

5. 용량과 inode가 남아 있는데도 오류가 발생하는 경우

df -hdf -i 모두 충분한 여유를 표시한다면 오류가 발생한 경로가 실제로 어느 파일시스템에 있는지 다시 확인하고 커널 로그를 점검합니다.

df -hT /var
df -i /var
mount | grep ' /var '
sudo dmesg | egrep -i 'xfs|ext4|enospc|no space|I/O error' | tail -n 50

별도 마운트가 없는 경우 mount | grep ' /var ' 결과가 비어 있을 수 있습니다. 커널 로그에서 XFS 또는 ext4 관련 오류가 반복된다면 단순 파일 삭제보다 파일시스템 상태와 스토리지 장치를 먼저 점검해야 합니다.

6. 원인별 판단 방법

No space left on device 원인 구분
확인 결과 가능한 원인 다음 점검
df -h에서 Use%가 100%에 가까움 데이터 블록 부족 dufind로 큰 디렉터리·파일 확인
df -i에서 IUse%가 100%에 가까움 inode 소진 작은 파일이 대량 생성된 캐시·세션·큐·로그 경로 확인
df 사용량이 높은데 du 합계가 크게 작음 삭제된 열린 파일 또는 마운트 구조 차이 lsof +L1과 마운트 상태 확인
블록과 inode 모두 여유가 있음 다른 파일시스템을 확인했거나 파일시스템·스토리지 계층 문제 가능성 오류 경로 기준 df 재확인 및 dmesg 점검

7. 조치 후 확인

원인을 확인해 안전한 방법으로 공간을 확보하거나 해당 서비스를 정상적으로 재시작한 뒤 파일시스템 상태를 다시 확인합니다.

df -hT
df -i
sudo lsof +L1

df의 여유 공간 또는 inode가 회복되었는지 확인하고, 삭제된 열린 파일을 처리했다면 lsof +L1에서 해당 항목이 사라졌는지 확인합니다. 이후 오류가 발생했던 애플리케이션이나 작업을 다시 실행해 정상적으로 파일을 생성하거나 기록할 수 있는지 검증합니다.

자주 묻는 질문

디스크가 남아 있는데도 No space left on device가 나올 수 있나요?

가능합니다. inode가 소진되었거나, 오류가 발생한 경로가 별도 파일시스템에 있거나, 파일시스템 자체의 할당 문제가 있는 경우가 있습니다. 따라서 df -hdf -i를 함께 확인해야 합니다.

파일을 삭제했는데 왜 df 사용량이 바로 줄지 않나요?

실행 중인 프로세스가 삭제된 파일을 계속 열고 있으면 파일 이름은 사라져도 디스크 블록은 반환되지 않습니다. sudo lsof +L1으로 확인하고 해당 서비스의 정상적인 로그 재열기나 재시작 절차를 사용해야 합니다.

/var가 가득 찼다면 가장 먼저 무엇을 확인해야 하나요?

df -hT /vardf -i /var로 블록과 inode를 먼저 확인한 다음, du -x --max-depth=1 /var로 로그, 캐시, 데이터 디렉터리 중 어느 경로가 증가했는지 좁혀가는 것이 좋습니다.

공식 참고자료

마무리

CentOS 7에서 No space left on device 오류가 발생하면 먼저 오류 경로가 속한 파일시스템의 블록 사용률과 inode 사용률을 확인해야 합니다. 공간이 부족하면 dufind로 원인을 좁히고, dfdu 결과가 크게 다르면 삭제된 열린 파일을 확인하는 순서가 효과적입니다.

중요한 운영 데이터를 즉시 삭제하기보다 어떤 서비스가 공간을 사용하고 있는지 먼저 확인한 뒤 해당 서비스의 정상적인 정리 절차를 적용하시기 바랍니다. 오늘 준비한 내용은 여기까지입니다.

  • 0 사용자에게 유용한 정보 제공
이 답변이 도움이 되었나요?
« Back