When your Linux system reports 100% inodes usage in the root directory (/
), it's often more critical than disk space exhaustion. Inodes store metadata about files, and when they're depleted, you can't create new files - even if there's available disk space.
First, verify the inodes situation:
df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda2 732960 727804 5156 100% /
Then identify which directories consume the most inodes:
for i in /*; do echo $i; find $i | wc -l; done
1. Small Files Accumulation
Millions of tiny files (like session files, cache, or logs) can exhaust inodes without consuming much space.
To find directories with most files:
find / -xdev -type f | awk '{print $NF}' | \
awk -F/ 'BEGIN {depth=3} {for(i=1;i<=depth;i++) printf "/%s",$i; print ""}' | \
sort | uniq -c | sort -n
2. Orphaned Docker Containers
Docker can leave behind layers and volumes:
docker system prune -a --volumes
3. Email Queues
Mail servers often create thousands of small files:
# For Postfix
postsuper -d ALL
Bulk Deletion of Cache Files
# For package manager cache
apt-get clean
# Or for yum
yum clean all
# For general cache
find /var/cache -type f -delete
Log File Rotation
Configure logrotate more aggressively:
vim /etc/logrotate.conf
# Set:
rotate 3
compress
delaycompress
Implement monitoring with this bash script:
#!/bin/bash
THRESHOLD=90
CURRENT=$(df -i / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ "$CURRENT" -gt "$THRESHOLD" ]; then
echo "Warning: Inodes usage exceeded threshold ($THRESHOLD%) - Current: $CURRENT%"
# Add cleanup commands here
fi
If you consistently hit inodes limits, consider:
# For ext4 filesystems (check first)
tune2fs -l /dev/sda2 | grep Inode
# To resize (unmount first)
resize2fs /dev/sda2
Remember that some operations require booting from a live CD/USB for root partition operations.
When your Linux system reports 100% inode usage in the root directory while disk space appears available, you're facing a filesystem metadata exhaustion. The df -i
output reveals the critical situation:
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda2 732960 727804 5156 100% /
From your logs, two directories dominate inode consumption:
- /proc: 10,937 inodes
- /sys: 22,504 inodes
However, these are virtual filesystems and shouldn't be your primary targets. The real issues likely hide elsewhere.
Use these commands to locate inode-heavy directories:
# Top-level directory scan
sudo find / -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n
# Detailed directory analysis
sudo find /path/to/search -xdev -type f | awk -F/ '{print $2}' | sort | uniq -c | sort -nr | head -20
Common inode hogs and their solutions:
# Clean package cache (especially effective after failed apt operations)
sudo apt-get clean
sudo apt-get autoclean
# Remove old kernel versions
sudo apt-get purge $(dpkg -l | grep linux-image | awk '{print $2}' | grep -v $(uname -r))
# Clear systemd journal logs
sudo journalctl --vacuum-size=50M
When standard cleanup isn't enough:
# Force remove stale files (careful with this!)
sudo find /tmp -type f -atime +10 -delete
# Identify and remove small files (common inode wasters)
sudo find / -xdev -type f -size +0c -size -10k -exec ls -la {} \; | sort -n -k 5
- Implement log rotation for all services
- Monitor inode usage with cron jobs
- Consider separate partitions for /var, /tmp
# Sample monitoring script
#!/bin/bash
INODE_USAGE=$(df -i / | awk 'NR==2 {print $5}' | tr -d '%')
if [ $INODE_USAGE -gt 90 ]; then
echo "Warning: Inode usage at $INODE_USAGE% on $(hostname)" | mail -s "Inode Alert" admin@example.com
fi