https://unix.stackexchange.com/questions/174334/what-is-the-difference-between-inode-size-and-bytes-per-inode
Well, first, what is an inode? In the Unix world, an inode is a kind of file entry. A filename in a directory is just a label (a link!) to an inode. An inode can be referenced in multiple locations (hardlinks!).
-i bytes-per-inode (aka inode_ratio)
For some unknown reason this parameter is sometime documented as bytes-per-inode and sometime as inode_ratio. According to the documentation, this is the bytes/inode ratio. Most human will have a better understanding when stated as either (excuse my english):
- 1 inode for every X bytes of storage (where X is bytes-per-inode).
- lowest average-filesize you can fit.
The formula (taken from the mke2fs
source code):
inode_count = (blocks_count * blocksize) / inode_ratio
Or even simplified (assuming "partition size" is roughly equivalent to blocks_count * blocksize
, I haven't checked the allocation):
inode_count = (partition_size_in_bytes) / inode_ratio
Note 1: Even if you provide a fixed number of inode at FS creation time (mkfs -N ...
), the value is converted into a ratio, so you can fit more inode as you extend the size of the filesystem.
Note 2: If you tune this ratio, make sure to allocate significantly more inode than what you plan to use... you really don't want to reformat your filesystem.
-I inode-size
This is the number of byte the filesystem will allocate/reserve for each inode the filesystem may have. The space is used to store the attributes of the inode (read Intro to Inodes). In Ext3, the default size was 128. In Ext4, the default size is 256 (to store extra_isize
and provide space for inline extended-attributes). read Linux: Why change inode size?
Note: X bytes of diskspace is allocated for each allocated inode, whether is free or used, where X=inode-size.