$ mke2fs -c -b 4096 -i 4096 -j /dev/hda9
などと ext3 のファイルシステムを作る時に -i オプションに指定する値はどうやって決めたらいいのかわからないので、調べてみた。
man で見てみると、
$ man mk2sfs ... -i bytes-per-inode Specify the bytes/inode ratio. mke2fs creates an inode for every bytes-per-inode bytes of space on the disk. The larger the bytes-per-inode ratio, the fewer inodes will be created. This value generally shouldn't be smaller than the blocksize of the filesystem, since then too many inodes will be made. Be warned that is not possible to expand the number of inodes on a filesystem after it is created, so be careful deciding the cor- rect value for this parameter.
しばらく眺めてて、やっと理解できた。
まとめ
- -i オプションでファイルシステムを作るパーティションに何バイト毎に inode を1つ作るかを指定する。
- つまり、10MB のパーティションに ext3 のファイルシステムを -i 4096 で作った場合、4096 byte 毎に inode が1つ作られる。
10MB = 10485760 byte 10485760 byte / 4096 byte = 2602.571358 個 <-- 作られる inode の数 2602.571358 個 * 128 byte = 333129.1338 = 約25 KB <-- inode に使われる容量 10485760 byte - 333129.1338 byte = 10152630.87 byte = 約9.7 MB <-- データブロックに使われる容量 ※正確にはスーパーブロックに使われる容量もあるのでもう少し減るはず。
- mke2fs でファイルシステムを作るときに、「-i の値 > -b の値」とすると、inode が枯渇する可能性がある。
- 逆に、「-i の値 < -b の値」とすると、必要以上に inode が作られて、無駄にディスク容量を使う。
- 「-i の値 = -b の値」とすると、inode が枯渇することはないはず。1 byte のファイルでも物理的には1つのデータブロックが使われるので、1 byte のファイルというか 4096 byte 以下のファイルでパーティションを埋め尽くした場合、データブロックも inode も 100% 使用された状態になる。
- 例えば、Oracle のデータファイルをおく領域の場合、ファイルサイズは大きいので、-i の値を大きくして inode の数を少なくするとデータブロックに使用できる領域が大きくなりディスクを効率的に使えると思う。
補足
参考
*1:ファイルタイプ・アクセス権・所有者・所有グループ・ファイルサイズ・作成日時など