어느 파일시스템에 쓰고 있는지 먼저 확인합니다
오류 메시지의 ENOSPC는 요청한 저장 공간을 확보하지 못했다는 뜻입니다. 다른 디스크의 여유 공간이 충분해도 실제 대상 파일시스템이 가득 차면 실패합니다. 파일을 만들려다 실패했다면 존재하는 상위 디렉터리를 대상으로 확인합니다.
df -h -- /path/to/output-directory
df -i -- /path/to/output-directory
findmnt -T /path/to/output-directory| 명령 | 확인할 항목 |
|---|---|
df -h | 블록 사용량과 일반 사용자가 사용할 수 있는 Avail을 봅니다. |
df -i | inode의 사용량과 남은 수를 봅니다. 파일이 작아도 inode를 소모할 수 있습니다. |
findmnt -T | 해당 경로의 마운트 지점과 파일시스템 종류를 확인합니다. 컨테이너나 tmpfs도 구분합니다. |
df -i의 i는 iframe이 아니라 inode입니다. inode는 파일의 메타데이터를 나타내는 자료구조입니다. inode 수를 고정해서 만드는 파일시스템에서는 작은 파일이 많이 쌓여 블록보다 inode가 먼저 부족해질 수 있습니다.
서로 다른 원인을 나누어 봅니다
| 관찰 | 확인할 가능성 |
|---|---|
| 블록 공간이 거의 없음 | 실제 데이터, 로그, 삭제했지만 아직 열린 파일의 점유를 확인합니다. |
| inode 여유가 없음 | 작은 파일이 많은 디렉터리를 찾고 보관 기간이나 생성 방식을 점검합니다. |
| root로는 쓰이지만 일반 사용자로는 실패 | ext 계열의 예약 블록 등 사용자별 가용량 차이를 확인합니다. 이 현상만으로 원인을 확정하지는 않습니다. |
| tmpfs에서 발생 | 마운트의 size·nr_inodes 한도와 실제 사용량을 확인합니다. 디스크 전체 여유와 별개의 제한입니다. |
오류가 EDQUOT | 디스크 사용 할당량 초과입니다. ENOSPC와 구분해 사용자·그룹·프로젝트 quota를 확인합니다. |
- 대상 경로 확인그 경로가 속한 마운트를 찾습니다.
- 블록과 inode 비교df -h와 df -i를 함께 봅니다.
- 해당 파일시스템의 제한 확인예약 블록·quota·tmpfs 한도 등을 확인합니다.
위에서 아래로 진단 순서를 나타냅니다. 각 단계는 원인을 확인하는 과정이며, 포맷이나 데이터 삭제를 지시하지 않습니다.
삭제한 파일이 계속 공간을 차지할 수 있습니다
파일 이름을 지워도 프로세스가 파일을 열어 둔 상태라면 데이터는 남을 수 있습니다. 마지막 링크와 열린 참조가 모두 사라져야 공간을 회수할 수 있습니다. 따라서 경로를 따라 계산하는 du와 파일시스템 통계인 df가 다르게 보일 수 있습니다.
lsof +L1lsof가 설치된 시스템에서 링크 수가 1보다 작은 열린 파일을 확인하는 명령입니다. 다른 사용자의 프로세스까지 보려면 추가 권한이 필요할 수 있습니다. 점유한 프로세스를 확인한 뒤 해당 서비스가 지원하는 로그 재열기나 정상 종료 절차를 사용합니다.
inode 부족이 곧 포맷을 뜻하지는 않습니다
불필요한 작은 파일을 정리하거나 데이터를 다른 파일시스템으로 옮기면 해결할 수 있는 경우가 있습니다. 재생성 여부는 파일시스템 종류, 확장 가능성, 필요한 파일 수와 백업 상태를 확인한 뒤 판단합니다. inode가 부족하다는 이유만으로 바로 포맷하지 않습니다.
ext 계열의 mkfs -i는 새 파일시스템을 만들 때의 bytes-per-inode 설정입니다. 마운트된 파일시스템의 inode 수를 즉시 늘리는 명령으로 안내하면 안 됩니다. swap 파일도 디스크 공간을 사용할 수 있지만, swap 크기만으로 모든 ENOSPC 현상을 설명할 수는 없습니다.
GNU du의 표시 단위는 옵션과 환경에 따라 달라질 수 있습니다. 바이트 단위로 비교하려면 du -B1처럼 단위를 명시합니다. -l은 하드링크를 중복 계산하므로 단위 지정 옵션과 혼동하지 않습니다.