TenForward

技術ブログ。はてなダイアリーから移転しました

inode の数

ext2/ext3 の inode の数はどうやって決まるのだろう,と思って,mke2fs のソース (e2fsprogs の misc/mke2fs.c) を読んでます.こんな事している場合では... :-p

オプションで指定しない限りは inode_ratio というもので決まるっぽいですね.関数 PRS (この関数ちょっと長すぎでは? ^^;) 内で

        param.s_inodes_count = num_inodes ? num_inodes :
                ((__u64) param.s_blocks_count * blocksize)
                        / inode_ratio;

ってのがあるので,きっとコレでしょう.

inode_ratio は set_fs_defaults 内で

        for (p = settings; p->type; p++) {
                if ((strcmp(p->type, fs_type) != 0) &&
                    (strcmp(p->type, default_str) != 0))
                        continue;
                if ((p->size != 0) && (megs > p->size))
                        continue;
                if (ratio == 0)
                        *inode_ratio = p->inode_ratio < blocksize ?
                                blocksize : p->inode_ratio;
                use_bsize = p->blocksize;
        }

てな感じ.

setting は

struct mke2fs_defaults {
        const char      *type;
        int             size;
        int             blocksize;
        int             inode_ratio;
} settings[] = {
        { default_str, 0, 4096, 8192 },
        { default_str, 512, 1024, 4096 },
        { default_str, 3, 1024, 8192 },
        { "journal", 0, 4096, 8192 },
        { "news", 0, 4096, 4096 },
        { "largefile", 0, 4096, 1024 * 1024 },
        { "largefile4", 0, 4096, 4096 * 1024 },
        { 0, 0, 0, 0},
};

となっているから,フツー (って何? :-p) にやると 8192 になるかな? (ext3 だと type が "journal" になるっぽい < これはちゃんと見てない)