Linux inode

The inode is the data structure of all files in a filesystem (except file contents and filename). It consumes around 1% of the disk space. inode stores metadata about each file.

Following are some properties stores in an inode.

  • Inode number
  • Extended attribute
  • Number of blocks
  • File access, change and modification time
  • File size
  • File type
  • Group
  • Number of links
  • Owner
  • Permissions
  • Status flags
  • Access Control List (ACL)


How to list metadata of a file?

$stat /tmp
  File: '/tmp'
  Size: 4096      	Blocks: 8          IO Block: 4096   directory
Device: 10303h/66307d	Inode: 4398        Links: 8
Access: (1777/drwxrwxrwt)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2019-02-18 22:06:12.250171624 +0000
Modify: 2019-02-18 22:17:01.972964003 +0000
Change: 2019-02-18 22:17:01.972964003 +0000
 Birth: -


How to list inode number of files?

$ls -i


How to find a file with an inode number?

$find ~/ -inum <inode number>

Things to remember:

    • inode has a count of links pointing to that inode number (just like hard links)
    • a file can only be deleted if the number of links pointing to it are 0.
    • Mapping of filename and inode is different.
    • Softlinks will have different inode but will point to the same data block as the original file
    • Hardlink will point to the same inode (original file’s inode).


Why do I see a large number of inodes in my filesystem? I have reached the maximum number of inodes capacity in my filesystem.

You probably have too many small files in the filesystem, you can increase the maximum number of inodes for that fs (it’s an NFS share without taking down the machine or fs). If it’s an EXT3/4 partition there is no way to dynamically increase inodes, you might have to take backup and recreate a new partition using mkfs -N command and passing number of inodes . Once you reach the inodes capacity you won’t be able to create a new file. Quicker options are to delete/zip smaller files (if possible). Again any open files will not reduce in inode count and if a file has multiple hard links.


How to list inodes count and used inodes?

$df -i
Filesystem      Inodes  IUsed   IFree IUse% Mounted on
udev            249195    333  248862    1% /dev
tmpfs           251193    451  250742    1% /run
/dev/nvme0n1p1 2560000 257261 2302739   11% /
tmpfs           251193      1  251192    1% /dev/shm
tmpfs           251193      7  251186    1% /run/lock


How to remove a file with an inode number?

Sometimes you might see a file with multiple special characters and it might be easier to just delete it via inode number.

$find . -maxdepth 1 -type f -inum <inode number> -delete


How to cat / print contents of a file with an inode number?

$ find -inum <inode number> -exec cat {} \;


Can two files have the same inode number?

Yes, if they belong to different partitions or if they a file is a hard link.


How go get stats of a file using python?

>>> import os
>>> from stat import *
>>> print(os.stat("favicon.ico"))
posix.stat_result(st_mode=33204, st_ino=134484763, st_dev=64770L, st_nlink=1, st_uid=1000, st_gid=1000, st_size=894, st_atime=1551046130, st_mtime=1551046127, st_ctime=1551046127)

in the above example, we are printing the stat of a file “favicon.ico”