Filesystems 每个索引节点有多少字节?

Filesystems 每个索引节点有多少字节?,filesystems,inode,ext4,Filesystems,Inode,Ext4,我需要创建大量的文件,但这些文件不是很大(比如4kb、8kb)。 这在我的计算机上是不可能的,因为它占用了所有索引节点100%,并且我无法创建更多的文件: $ df -i /dev/sda5 Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda5 54362112 36381206 17980906 67% /scratch (我开始删除文件,这就是为什么现在是67%) 在我的文件

我需要创建大量的文件,但这些文件不是很大(比如4kb、8kb)。 这在我的计算机上是不可能的,因为它占用了所有索引节点100%,并且我无法创建更多的文件:

$ df -i /dev/sda5
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda5            54362112 36381206 17980906   67% /scratch
(我开始删除文件,这就是为什么现在是67%)

在我的文件系统(ext4)上,每个节点的字节数为256

我想知道是否可以将此值设置得非常低,甚至低于128(在重新格式化期间)。如果是,我应该使用什么值?
Thx

我在mke2fs手册页上找到了问题的解决方案:

-I索引节点大小

以字节为单位指定每个索引节点的大小。默认情况下,mke2fs创建256字节索引节点。在2.6.10之后的内核和一些早期的供应商内核中,可以利用 大于128字节的inode用于存储扩展属性以提高性能索引节点大小值必须是大于或等于128的2的幂。越大越好 inode size inode表将消耗更多的空间,这会减少文件系统中的可用空间,并且还会对性能产生负面影响。延伸 存储在大型inode中的属性对于较旧的内核是不可见的,这样的文件系统对于2.4内核将根本不可装载。这是不可能改变的 创建文件系统后,此值将被删除

可以设置的最大值由块大小决定

sudo tune2fs -l /dev/sda5 | grep "Block size"
Block size:               4096

希望这能有所帮助……

每个inode的默认字节数通常是16384,这是
/etc/mke2fs.conf
中的默认
inode\u比率(在创建文件系统之前读取)。如果索引节点用完,可以尝试以下操作,例如:

mkfs.ext4 -i 8192 /dev/mapper/main-var2
$ sudo tune2fs -l /dev/sda1 | awk -F: ' \
    /^Block count:/ { blocks = $2 } \
    /^Inode count:/ { inodes = $2 } \
    /^Block size:/ { block_size = $2 } \
    END { blocks_per_inode = blocks/inodes; \
          print "blocks per inode:\t", blocks_per_inode, \
                "\nbytes per inode:\t", blocks_per_inode * block_size }'

blocks per inode:    3.99759 
bytes per inode:     16374.1
另一个影响这一点的选项是
-T
,通常是
-T news
,它进一步将其减少到4096


此外,在不重新创建或编辑ext3或ext4文件系统的情况下,不能更改其中的inode数。Reiser文件系统是动态的,因此您永远不会遇到任何问题。

您可以通过将可用空间大小除以可用inode的数量来找到近似的inode比率。例如:

mkfs.ext4 -i 8192 /dev/mapper/main-var2
$ sudo tune2fs -l /dev/sda1 | awk -F: ' \
    /^Block count:/ { blocks = $2 } \
    /^Inode count:/ { inodes = $2 } \
    /^Block size:/ { block_size = $2 } \
    END { blocks_per_inode = blocks/inodes; \
          print "blocks per inode:\t", blocks_per_inode, \
                "\nbytes per inode:\t", blocks_per_inode * block_size }'

blocks per inode:    3.99759 
bytes per inode:     16374.1

inode大小(
-I
)与每个inode的字节数(
-I
)设置不同。inode的大小决定了单个inode的大小,较大的inode可以包含更多指向块的指针,以减少间接块的需要为代价或增加磁盘使用率。“每个索引节点的字节数”设置设置一个比率,用于确定索引节点的最大数目。创建文件系统后,这两个值都不能更改。“Inode大小”与每个Inode的字节数不同。”“Inode size”只是每个Inode可以包含的数据量(字节数),而每个Inode的字节数是指Inode与磁盘空间的比率。这两个值都是独立的。如何确定文件系统的当前字节/索引节点值?您的命令起作用了,但是tune2fs输出中是否有一些值显示了该比率?我只是想说明一下,您可以验证/更改Red Hat和衍生工具上的
/etc/mke2fs.conf
中的默认值。如果您在尝试打开/dev/sda3时遇到类似“tune2fs:super block中的坏幻数”这样的错误,请尝试运行“blkid”。我需要使用的实际文件系统是“/dev/mapper/myubuntu--vg root”。