You check cPanel's disk usage and it's sitting at 40%. Plenty of room, right? But you're still getting "inode limit exceeded" warnings, uploads are failing, and cron jobs are throwing write errors. That's because inodes and disk space are two completely different limits - and shared hosting plans cap both.
What an inode actually is
An inode isn't a size measurement - it's a count. Every single file and folder on your account, no matter how small, uses exactly one inode: a 2KB text file and a 2GB database dump each cost you one. A typical shared hosting plan on cPanel caps you somewhere between 150,000 and 250,000 inodes total, and that number covers everything under your account - website files, cache, email, logs, and backups combined.
So it's entirely possible to be nowhere near your disk quota while still hitting your inode ceiling, if your account has accumulated a huge number of tiny files. This is the single most common confusion we see in support tickets: customers assume "plenty of disk space" means "plenty of room," and it doesn't.
Symptoms that point to an inode problem, not a disk problem
- cPanel or WHM shows a banner like "Inodes: 198,432 / 200,000" while Disk Usage is comfortably under quota
- WordPress media uploads fail with a vague "unable to create file" or "HTTP error" even though the file is tiny
- Cron jobs fail silently, or log entries stop appearing mid-run
- New email can't be delivered, but the mailbox itself isn't full
- You can't even open a support ticket attachment upload from your own account
If disk usage and inode usage disagree like this, stop looking at file size and start looking at file count.
Step 1: Confirm your actual inode usage
In cPanel, the number usually sits right on the main dashboard under Statistics, labeled "Inodes Used." If you don't see it there, check Files → Disk Usage - some themes show it as a secondary stat next to disk space.
With SSH access, you can get the same number directly and break it down by folder:
# total files (roughly = inodes) under your home directory
find ~ -xdev | wc -l
# per top-level folder, so you can see where the count is concentrated
for d in ~/*/ ; do echo -n "$d: "; find "$d" | wc -l; done | sort -t: -k2 -n -rThat second command is the one that actually tells you where to look next - it'll usually point straight at one or two folders holding 80%+ of your total count.
Step 2: The usual suspects
Inode blowouts almost always come from something generating lots of small files automatically, rather than one big upload. In our support queue, it's nearly always one of these:
| Where it hides | Why it explodes | Typical fix |
|---|---|---|
wp-content/uploads | WordPress generates 4-8 resized thumbnail files per image upload by default | Delete unused sizes with a regenerate/cleanup plugin, or limit sizes in functions.php |
Cache plugin folders (wp-content/cache, litespeed, object-cache) | Full-page and object caches can write one file per page, per visitor variation | Clear the cache, then cap cache lifetime and exclude bot traffic from generating new entries |
PHP session files (/tmp or a custom session path) | Every visitor session becomes a file that isn't always cleaned up on expiry | Set a shorter session.gc_maxlifetime, or move sessions to a database/Redis |
| Email in Maildir format | Maildir stores one file per email, per folder - large inboxes and shared IMAP folders add up fast | Archive or delete old mail, empty Trash/Spam/Sent, or move to POP with local retrieval |
Old cPanel backups (public_html/backup-* or similar) | Full-site backup archives sometimes get extracted rather than left zipped, multiplying file count | Delete extracted copies, keep only zipped archives off-server |
node_modules or vendor folders left on the server | A single npm install can create tens of thousands of tiny files | Build locally or in CI, upload only the compiled output |
| Log rotation gone wrong | Access/error logs rotating daily without old copies ever being purged | Confirm logrotate or your app's log config actually deletes, not just rotates |
Step 3: Clear it safely
Once you know which folder is the culprit, work through it methodically rather than deleting in bulk:
- Back up first. Even a quick partial cPanel backup of the affected folder before you start deleting - inode cleanup is usually safe, but a WordPress media library is not the place to guess.
- Count before and after. Re-run the
find | wc -lcommand on that specific folder before and after each cleanup step, so you can see the number actually dropping and confirm you're touching the right thing. - Clear caches through the plugin, not the file manager. For WordPress cache folders, use the plugin's cache-clear button where possible - it avoids leaving behind lock files or breaking cache indexes that a raw delete can create.
- Empty webmail Trash and Spam explicitly. Deleting from the inbox view often just moves messages to Trash, which still counts against your inode total until it's emptied separately.
- Remove extracted backup folders once you've confirmed the zipped archive downloaded successfully somewhere off-server.
If you're on a VPS and it's your web server, application cache, or a hung process generating files faster than you can delete them, stop the process first (systemctl stop the relevant service) so you're not cleaning up a moving target.
Prevention: keep the count from creeping back up
- Set a cache expiry and let the plugin garbage-collect on a schedule, instead of letting cache files accumulate indefinitely
- Limit WordPress's generated thumbnail sizes if your theme doesn't need all of them (
add_image_sizeandintermediate_image_sizes_advancedfilter) - Set a cron job to purge PHP session files and rotated logs older than 7-14 days
- Archive old email to a local client (Thunderbird/Outlook) instead of leaving years of Maildir history on the server
- Never build
node_modulesor run package installs directly inpublic_htmlon shared hosting - build elsewhere and upload only the output - Check inode usage alongside disk usage during your regular maintenance, not just when you get the warning email
If you've cleaned the obvious folders and you're still bumping against the ceiling, it's worth asking your host whether the plan's inode allowance actually fits the site - some page builders and multi-vendor WooCommerce stores generate file counts that outgrow a standard shared plan regardless of good housekeeping.