You're not out of disk space — the usage bar in cPanel might even show plenty of room left — but uploads still fail, WordPress can't write to a folder, and your backup job dies halfway through with no useful error. If disk quota looks fine but everything else says "no space left," you're probably hitting an inode limit, not a storage limit. It's one of the most misunderstood cPanel errors we field, mostly because the name makes it sound like a disk space problem when it's actually a file-count problem.
Symptom: What You'll Actually See
- File Manager or FTP upload fails with something like
Disk quota exceededorNo space left on device— even though the "Disk Usage" meter in cPanel isn't full. - WordPress can't save media, install a plugin, or write to
wp-content/cache/, and the error log shows generic write failures rather than a permissions message. - Cron jobs fail silently — a backup script or log rotation job that used to finish now stops partway through.
- SSH sessions can log in fine but any command that creates a file (even
touch test.txt) throwsNo space left on device. - WHM or your hosting dashboard shows an "Inode Usage" stat close to or at 100%, separate from the "Disk Space Usage" stat.
That last one is the giveaway. If Disk Usage says 40% but Inode Usage says 99%, you've found your problem.
Cause: What an Inode Actually Is
An inode is a metadata record the filesystem keeps for every single file, folder, and symlink in your account — it doesn't matter if the file is 2KB or empty. Every hosting plan on a shared or reseller server caps the number of inodes an account can use, separately from the storage-size quota. You can have a tiny amount of data on disk and still hit the wall if that data is spread across hundreds of thousands of small files.
The usual causes, in the order we see them on support tickets:
- Cache and session files. WordPress object-cache plugins, PHP session files in
tmp/, and OPcache-adjacent cache directories can generate tens of thousands of tiny files over months if they're never garbage-collected. - node_modules folders. If you ever ran
npm installinside your hosting account (for a build step, a Node app, or just testing something), a singlenode_modulestree can easily contain 50,000+ files on its own. - WordPress post revisions and transients. These live as database rows, not files, so they don't cause this — but plugins that cache each revision or transient as a flat file on disk do.
- Email. Each individual email message is its own file under
mail/in Maildir format. A mailbox with 80,000 unread newsletters is 80,000 inodes, regardless of total size. - Old backups left unzipped. A single .zip backup is one inode. The same backup extracted into a folder can be tens of thousands of inodes.
- Log rotation not running. Access logs that roll over daily but never get pruned pile up as hundreds of small dated files instead of one growing file.
Fix: Find What's Eating Your Inodes
First, confirm the actual number. In cPanel, check the "Inode Usage" widget on the dashboard sidebar, or ask your hosting provider for the exact count and limit — SkyServer support can pull this from WHM in under a minute if it's not visible on your plan.
If you have SSH access, find the worst offenders directly. This counts files per top-level directory under your home folder, sorted with the biggest first:
cd ~
for dir in */; do
echo -n "$dir: "
find "$dir" -type f | wc -l
done | sort -t: -k2 -n -r
Once you've spotted the heavy directory, drill in one level further the same way until you land on the actual folder full of small files — a cache directory, a stray node_modules, an unzipped old backup, or a bloated mailbox.
Clearing the common culprits
| What you found | Where it usually lives | How to clear it |
|---|---|---|
| WordPress cache files | wp-content/cache/ | Delete the folder contents, then set your caching plugin to auto-clean cache older than a few days |
| node_modules | Anywhere you ran npm install | Delete it entirely with rm -rf node_modules if it's not needed to serve the live site |
| PHP session files | tmp/ or a path from session.save_path | Delete files older than your session lifetime; ask support to confirm the session GC is actually running |
| Old email | mail/domain.com/user/ | Archive or delete old messages via webmail, or lower the mailbox's stored history |
| Unzipped backups | Anywhere under public_html or home | Re-zip and move offsite, or delete if a fresh backup already exists |
| Rotated log files | logs/ or access-logs/ | Delete anything older than 30 days, or ask to have log retention shortened |
After a cleanup, re-run the inode count or refresh the cPanel dashboard stat — it can take a minute or two to update after a bulk delete.
Prevention: Keep It From Coming Back
- Set your caching plugin (WP Rocket, W3 Total Cache, LiteSpeed Cache, whatever you're on) to purge cache automatically instead of letting it grow forever.
- Never run
npm installor build steps directly in your live hosting account — build locally or in a CI pipeline and upload only the built output. - Set a mailbox size or message-count policy for accounts that receive a lot of automated mail, and archive to a local mail client periodically.
- Store backups offsite (S3, Google Drive, a separate server) instead of inside the same hosting account they're backing up.
- If your site legitimately needs more inodes — a large multi-vendor WooCommerce store with huge media libraries, for example — talk to your host about a plan with a higher inode allowance rather than fighting the limit every month.
Frequently Asked Questions
What's the difference between inode limit and disk quota?
Disk quota measures total storage in MB or GB — how much space your files take up. Inode limit measures the total *number* of files and folders, regardless of their size. You can hit the inode limit while using only a fraction of your storage quota if you have a huge number of very small files.
How do I check my current inode usage on SkyServer?
Log into cPanel and look for the "Inode Usage" stat on the main dashboard sidebar, usually right below Disk Usage. If it's not shown on your plan, open a support ticket and we'll pull the exact number and limit from WHM for you.
Will deleting files immediately free up inodes?
Yes, deletion is immediate at the filesystem level, but the cPanel dashboard stat that displays your usage can take a minute or two to refresh. If it still looks unchanged after five minutes, log out and back in or ask support to confirm.
Can a hosting provider increase my inode limit?
On most shared plans the inode allowance is fixed per package to keep server resources fair across all customers, but providers can often raise it case by case or move you to a higher-tier plan or VPS where the limit is much higher or effectively unlimited.
Why did my inode count spike suddenly without me uploading anything?
The usual cause is something automated: a cache plugin that stopped cleaning up after itself, a cron job generating log or session files, or a bot triggering thousands of cached page variations on a WooCommerce or membership site. Check your cache and log directories first.
