创建具有最大 inode 的 ext4 文件系统有什么缺点吗?

创建具有最大 inode 的 ext4 文件系统有什么缺点吗?

创建具有 2^32-1 个 inode 的 ext4 文件系统有什么缺点吗?

我有一个 1TB 的驱动器,我想在上面存储 8 亿到 15 亿个小文件。看来最大值是 40 亿,所以我想知道我是否可以在创建 fs 时将其设置为最大值,或者我应该找到其他解决方案。

答案1

根据类似的问题堆栈溢出Unix 和 Linux(见下文)在 ext4 文件系统上将 inode 数量最大化并不是一个好主意。

最好使用其他文件系统或将磁盘分成多个文件系统。

总结一下:

  • 一个 inode 占用 256 个字节。可以将其配置为 128 个,但即使:

    2³² inodes × 256 bytes each = 1 TB
    
  • 创建 ext4 文件系统时,您可以指定使用类型 定义如下/etc/mke2fs.conf

    mkfs.ext4 -T usage-type /dev/something
    

    small为了存储许多小文件,可能使用以下类型:

    small = {
        blocksize = 1024
        inode_size = 128
        inode_ratio = 4096
    }
    

    这意味着:每 4096 字节的磁盘空间(文件系统大小)将保留一个 inode,每个 inode 的大小为 128 字节。mkfs.ext4 -T small /dev/something 因此,该命令将在 1TB 文件系统上创建 2.44 亿个 inode,占用 31 GB。这 2.44 亿个文件将至少占用 250 GB(每个文件至少 1024 字节)。

  • 要用较小的占用空间(128 字节)来保存 10 亿个 inode,仅 inode 就需要 128 GB。如果使用最小可能的块大小(根据 mk2efs 的手册页,为 1024),那么这 10 亿个文件至少会占用 1TB(但请记住,由于 inode 占用了 128 GB,因此只剩下 872 GB)。

  • ext4 的最小块大小为 1024 字节。因此,您无法存储超过 1 TB / 1024 = 10 亿个文件,并且拥有更多 inode 毫无意义。

  • 一般来说,inode_ratio不应该小于,blocksize 因为您不能(轻易地)在一个块中存储多个文件。

  • 如果文件系统配置成这样,可以将文件的前 60 个字节直接存储在 inode 中。在这种情况下,文件不会占用(常规)块;阅读此类信息此处内联数据但也要考虑索引节点大小

  • 从评论到U&L 问题

    太多的 inode 肯定会带来很大的成本,它们本身就占用空间,相信我,fsck 的性能非常糟糕。我们谈论的是指数级的减速,比如 30 秒 vs 2 天……这是 I/O 限制。更不用说文件列表、索引等的减速了。


参考:

相关内容