Inode Exhaustion: Local Disk Write Errors

Panel & Files Reviewed September 6, 2026 2 min read

«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

MeasuresExhausted by
GB quotaTotal bytes storedA few large files, or many medium ones
Inode countTotal number of files and directoriesEnormous numbers of tiny files, regardless of their combined size

Finding what consumed them

  1. Check the /logs folder first

    A 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.

  2. 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.

  3. 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.

How to confirm it worked

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.