«No space left on device» with gigabytes still free according to every other number on the panel is one of the more confusing errors a server can produce — because the thing that actually ran out was never gigabytes to begin with.
What an inode actually is
A filesystem tracks two separate things: how many bytes are stored, and how many individual files exist. Every file and directory, regardless of its size, consumes exactly one inode — the structure holding its metadata (permissions, owner, location on disk, timestamps). A filesystem is created with a fixed number of inodes available, sized for a typical mix of file sizes. A server that generates enormous numbers of tiny files — per-player logs, one file per chat message, thousands of small crash reports — can exhaust that fixed inode count while using almost none of its actual storage quota, because inode count depends on how many files exist, not how large they are.
Storage quota versus inode count
| Measures | Exhausted by | |
|---|---|---|
| GB quota | Total bytes stored | A few large files, or many medium ones |
| Inode count | Total number of files and directories | Enormous numbers of tiny files, regardless of their combined size |
Finding what consumed them
- Check the
/logsfolder firstA plugin or the server itself logging excessively, or a crash loop writing a fresh crash report every restart, is the most common cause by a wide margin.
- Look for a plugin that writes one file per player or per event
Some poorly designed data or statistics plugins create a new small file per player rather than using a single database or a small number of files — this scales file count with player activity far faster than storage.
- Delete rather than empty
Truncating a file's contents does not free its inode; the file itself still exists as an entry. The file has to be removed entirely.
The error clears immediately after deleting the offending files, without needing to wait for anything to sync — inode count updates the moment a file is actually removed.