디스크 여유가 있는데 파일을 못 만든다면: df -h와 df -i를 함께 보는 이유

🤖 AI Summary
디스크 용량이 남아 있어도 파일 생성은 실패할 수 있습니다. 바이트 용량과 inode 사용량은 서로 다른 확인 항목입니다. GNU df에서는 문제가 난 경로를 지정해 df -h와 df -i를 함께 읽습니다. 두 항목에 여유가 있어도 권한·할당량·읽기 전용 상태를 구분해야 합니다.
블로그 목차
파일 저장이 실패했는데 디스크 사용률은 높지 않은 상황이 있습니다. 이때 서버 전체의 남은 용량만 보고 저장 공간 문제를 제외하기는 어렵죠. 실제로 쓰려던 경로가 어느 파일시스템에 속하는지 맞추는 것이 출발점이죠.
남은 용량과 남은 inode는 왜 다른가요?
파일 내용에 쓸 공간과 파일의 메타데이터를 관리하는 inode는 구분해서 확인해야 하는 자원입니다.
inode는 파일 크기를 다른 단위로 표현한 값이 아닙니다. Linux 커널의 ext4 inode 문서는 파일의 시간 정보와 블록 매핑 등 메타데이터를 inode에 저장한다고 설명합니다. 파일 내용을 담을 공간이 남았다는 결과만으로 메타데이터 쪽 여유까지 확인한 셈은 아니죠.
작은 파일이 많이 생기는 작업은 용량과 inode를 함께 볼 계기가 됩니다. 같은 총용량이라도 파일을 만드는 방식과 개수가 다를 수 있기 때문이죠. 이 설명은 원인 후보를 좁히는 관점이며, 특정 서비스에서 inode 부족이 발생했다는 사례는 아닙니다.
다만 모든 파일시스템의 inode 공급 방식이 같다고 생각하면 안 됩니다. ext4의 구조를 모든 Linux 저장소의 고정 한계로 일반화하지 말아야 하죠. 파일시스템 종류와 실제 보고 값을 함께 살펴봐야 하죠.

df -h와 df -i는 각각 무엇을 보여주나요?
GNU df의 -h는 공간을 읽기 쉬운 용량 단위로, -i는 블록 대신 inode 사용 정보로 보여줍니다.
GNU df 매뉴얼에서 -h와 -i의 목적을 확인할 수 있습니다. -h는 표시 단위를 바꾸는 옵션이며, -i가 보여주는 것은 별도의 자원 정보죠.
확인 명령 | 읽을 항목 | 결과의 범위 |
|---|---|---|
| Avail과 Use% 등 공간 정보 | 지정 경로가 속한 파일시스템의 용량입니다. |
| IFree와 IUse% 등 inode 정보 | 같은 파일시스템이 보고한 inode 여유입니다. |
| Type 등 파일시스템 정보 | 구현별 차이를 살필 때 함께 남길 정보입니다. |
표의 경로는 예시이므로 실제로 존재하는 저장 디렉터리로 바꿔 사용합니다. 명령은 파일 삭제나 설정 변경을 수행하지 않습니다. Linux의 모든 도구가 GNU 구현인 것은 아니므로 로컬 매뉴얼도 확인하세요.
inode 사용률만 따로 보는 것도 충분하지 않죠. 공간과 inode 중 어느 쪽이 부족한지, 같은 대상의 결과인지 함께 읽어야 해요.
오류가 난 경로의 파일시스템은 어떻게 확인하나요?
생성에 실패한 파일을 대신해 실제로 존재하는 부모 디렉터리를 지정하고 두 결과의 마운트 대상을 맞춥니다.
GNU df는 인자로 받은 경로가 속한 파일시스템의 공간을 보여줍니다. 경로 없이 실행한 목록에서 여유 있는 행 하나만 고르면, 저장 대상과 다른 곳을 볼 수 있죠.
예를 들어 서비스가 /var/lib/myapp에 저장한다면 두 명령에도 그 디렉터리를 지정해야 하죠. /에 여유가 있어도 저장 경로가 별도 파일시스템에 있으면 그 결과만으로 판단할 수 없습니다. 출력의 Filesystem과 Mounted on을 함께 기록하면 대상을 맞추기 쉬워요.
아직 만들어지지 않은 파일 경로를 그대로 넣는 대신, 그 파일이 생성될 기존 부모 디렉터리를 확인합니다. 중간 디렉터리도 없다면 실제로 존재하는 상위 경로와 생성 실패 지점을 먼저 구분해야 하죠.
컨테이너 안에서 실패한 작업이라면 그 작업이 보는 경로를 기준으로 확인합니다. 호스트에서 이름이 비슷한 디렉터리를 본 것만으로 같은 저장소를 확인했다고 결론 내리지 마세요. 작업 환경과 경로를 함께 남기는 것이 좋아요.
inode에 여유가 있다면 무엇을 더 확인해야 하나요?
용량과 inode에 여유가 있어도 쓰기 성공이 보장되지는 않으므로 실제 오류와 접근 조건을 함께 확인합니다.
Linux open 매뉴얼의 오류 정의는 파일 생성 실패를 하나의 원인으로 묶지 않습니다. 원문 로그와 오류 코드를 남기면 추가 확인 항목을 나눌 수 있죠.
EACCES: 파일이나 경로 구성 디렉터리의 접근 권한을 확인합니다.
EDQUOT: 해당 사용자의 블록 또는 inode 할당량을 확인합니다.
EROFS: 쓰려는 파일이 읽기 전용 파일시스템에 있는지 확인합니다.
ENOSPC: 새 파일을 만들 대상 장치에 공간이 없는 오류로 보고, 해당 경로의 용량·inode 결과와 함께 검토합니다.
이 목록은 오류를 분류하는 출발점이지 모든 애플리케이션의 로그를 같은 방식으로 해석하는 규칙은 아닙니다. 파일 생성과 이후 데이터 쓰기 중 어느 단계가 실패했는지도 구분할 필요가 있죠. df 결과만으로 서비스의 실행 계정이나 접근 조건까지 검증되지는 않죠.
운영 기록에는 실패 시각, 실행 환경, 저장 경로, 원문 오류, 두 df 결과를 함께 남기는 방법을 제안합니다. 이는 이 글의 진단 기록 제안이며 특정 제품의 자동 진단 기능이 아닙니다. 변경 전에 담당자와 원인 가설을 맞춰 보세요.
로그 수집·보관·분석의 운영 설계는 클라우드 로그 관리, 쌓기만 하고 분석은 못 하는 기업을 위한 실무 가이드에서 이어서 살펴볼 수 있습니다. 이번 글에서는 파일 생성 실패의 대상과 자원을 구분하는 데 집중해요.
이것만 기억하세요
진단의 기준은 실패한 작업이 쓰려던 경로입니다. 같은 파일시스템의 용량과 inode를 확인한 뒤, 원문 오류에 따라 접근 조건을 살펴보세요. 확인 결과와 실제 원인이 연결되기 전에는 정리나 증설을 해결책으로 확정하지 않습니다.
자주 묻는 질문 (FAQ)
Q. df -h에 용량이 남아 있으면 inode에도 여유가 있나요?
용량과 inode는 구분해서 확인하는 항목입니다. 같은 저장 경로에 df -i를 실행해 파일시스템이 보고한 inode 정보를 함께 읽어야 합니다.
Q. inode 사용률이 높으면 작은 파일을 바로 지워도 되나요?
사용률만으로 삭제할 대상을 정할 수는 없습니다. 파일의 용도와 보관 조건, 서비스 영향을 먼저 확인해야 하죠.
Q. 생성하지 못한 파일이 아직 없는데 df에 어떤 경로를 넣나요?
파일을 만들려던 위치의 실제로 존재하는 부모 디렉터리를 지정합니다. 중간 경로도 없다면 존재하는 상위 디렉터리와 실패 지점을 먼저 구분하세요.
Q. 용량과 inode가 모두 남아 있으면 파일 생성은 성공하나요?
두 항목의 여유만으로 파일 생성 성공을 보장하지는 않습니다. 권한, 사용자 할당량, 읽기 전용 상태 등은 원문 오류와 함께 따로 확인해야 하죠.
Q. 모든 Linux 환경에서 같은 df 옵션을 사용할 수 있나요?
이 글의 명령은 GNU df를 기준으로 설명합니다. 다른 구현이나 파일시스템에서는 로컬 매뉴얼과 실제 출력 형식을 함께 확인하세요.



