what is an inode?

In Unix/*nix every file has a data structure known as i-nodes (index nodes). Each i-node stores all the information regarding a file like
  • File type
  • File mode or permission
  • Number of links
  • User ID
  • Group ID
  • File size
  • Time stamp
  • File deletion time

A file name is just a reference to the i-node. This is the reason why we can sometimes recover data even though a file is deleted. Each i-node has a number associated with it known as the i-node number. The i-node number is unique in a file system.  To find the i-node number of a file, type
ls -i filename


Example:
ls -i /etc/passwd
Sample Output
2100534 /etc/passwd
You can also find the i-node number with the stat command


So we now know i-node contains the data regarding a file. But data needs to be stored somewhere. Like any data i-node saves these information in disk drives. A space is reserved for i-nodes to save these information during the time of OS installation or during the creation of a file system. The system decides the i-node size based on an algorithm. But  it  is possible to change the i-node size based on your requirement. So how will we find the space reserved for i-nodes in a filesystem ? For that we use the df -i command. Given below is an example of df -i command in human-readable format  and its corresponding  output.

df -i
Sample Output:
Filesystem   Inodes        IUsed      IFree       IUse%   Mounted on
/dev/sda3    33783808      104571     33679237    1%      /
/dev/sdb1    71696384      102549     71593835    1%      /home
/dev/sda1    26104         40         26064       1%      /boot
tmpfs        893197        1          893196      1%      /dev/shm

In the above output the first column (File System) represents different filesystems mounted in the OS. The second column (Inodes) shows the total space allocated for the i-node to the respective file systems. The third column(IUsed) shows i-node space utilized out of the total space allocated. Fourth column(IFree) represents the free space left out of the total space allocated for the i-node in the file system. Fifth column (IUse %) is the percentage i-node space utilized and Sixth column (Mounted on) is the location where the file system is mounted. i.e if we take the case of /dev/sda, it has a total 33783808 bytes (32.22 MB) i-node space allocated. Out of this 33783808 bytes, only 104571 bytes (102.12 KB) of i-node space is utilized  and there is a free space of 33679237 bytes (32.12 MB). Which means percentage utilization of i-node space is 1% and the file system /dev/sda3 is mounted in the location /

Suppose the total available size of /dev/sda3 file system is 125 GB. Out of the 125 GB only a small portion (33MB) is allocated for i-nodes and the rest of the space is used for data storage. So what will happen if  IUse% becomes 100? or what if the entire space allocated for i-node is completely utilized? The answer is, You can no longer add new files to the file system even though there are free space left on the filesystem. This is a very rare case because the said situation occurs when there are too many files in the filesystem with small file size.

At the beginning of this post I said the i-node number of a file is unique in a file system. But the i-node number varies across different file system I will explain this with an example. 


From the df -i output above you can see there are two different file systems /dev/sda3 and /dev/sdb1 mounted under the locations / and /home respectively.  Consider that a file, index.html is present in  /home/calypso directory. In the first step of the above screenshot we are checking the i-node number of /home/calypso/index.html file, which is 3670174. In the second step we are moving the file index.html from/home/calypso to another directory /home/foo of the same file system. In the third step you can see even though the file is moved from /home/calypso to /home/foo, there is no change in the  i-node number. In the fourth step index.html is moved from /home/calypso to another directory /root. /root belongs to the file system /dev/sdb1. So the file is now shifted from /dev/sda3 to /dev/sdb1. In the fourth step if you check the i-node number of index.html file it has changed from 3670174 to 1441798. The i-node number 3670174 in /dev/sda3 will be either free or allocated to some other files. This concept has certain significance and will be discussed later while explaining about links in the next post.
What I have tried to say through this post is just some basic stuff about i-nodes. Hope you have got an idea about i-node. Thank you for reading through this post and I will be back soon with new topics.

Comments

Popular posts from this blog

Understanding awk command with examples

Understanding sed command with example -Part 1

How to install a Software in Linux