How do I increase the number of inodes on my disk?
My disk has plenty of space, and I am got an error that tells me I have no space left on the device. I learned that I have run out of 'inodes' or Index Nodes. How do I get more?
What is an inode?
An inode or index node is like an index card to a file or directory on your disk. All ext3/ext4 disks (like those used by your Linode) have a fixed number of inodes that were created at the time your disk was created. The number of inodes cannot be increased without reformatting your disk.
How can I see how much of my inodes are in use?
You can use the command
df -ih which will show your inode usage.
In this example, you can see that your root (/) filesystem on /dev/sda has 4.9 Million inodes and is using 100% of them:
Filesystem Inodes IUsed IFree IUse% Mounted on udev 489K 374 489K 1% /dev tmpfs 494K 989 493K 1% /run /dev/sda 4.9M 4.9M 0 100% / tmpfs 494K 1 494K 1% /dev/shm tmpfs 494K 8 494K 1% /run/lock tmpfs 494K 16 494K 1% /sys/fs/cgroup
What are my options?
You can move your data to a new disk that was created with more inodes.
The basic steps to do this involve:
- If necessary, resizing your existing disk down or temporarily increasing the size of your Linode Plan to accommodate another disk on which we will create a filesystem with the number of needed inodes.
- Create a new disk of type ext4 for the Linode in the space we created in the previous step.
- Boot into Rescue Mode
- Use the following command replacing NUMBER_OF_INODES and DEVICE_OF_NEW_DISK as appropriate. The maximum number of inodes allowed is 4294967295 (2^32)-1
mkfs -t ext4 -N NUMBER_OF_INODES /dev/DEVICE_OF_NEW_DISK
- Mount both your old disk and your new disk.
cp -xa /media/DEVICE_OF_OLD_DISK/* /media/DEVICE_OF_NEW_DISK
- Boot your Linode using the new disk to ensure that it is working properly
- Remove your old disk.
- Resize your new disk as desired to give it additional space.
You can remove files to free up inodes on your existing disk.
The following command will help you locate directories with lots of files:
find / -xdev -printf '%h\n' | sort | uniq -c | sort -k 1 -n
How can I keep from running out of inodes?
You may be interested in looking into a tool called tmpwatch which recursively removes files that have not been used or accessed in a certain amount of time.
More information can be found here: https://linux.die.net/man/8/tmpwatch