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

Flu*_*ffy 6 filesystem ext4 inode

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

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

Per*_*uck 5

根据Stack OverflowUnix & Linux(见下文)上的类似问题,最大化 ext4 文件系统上的 inode 数量是一个坏主意。

\n\n

最好使用另一个文件系统或将磁盘拆分为多个文件系统。

\n\n

总结一下:

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

    \n\n
    2\xc2\xb3\xc2\xb2 inodes \xc3\x97 256 bytes each = 1 TB\n
    Run Code Online (Sandbox Code Playgroud)
  • \n
  • 创建 ext4 文件系统时,您可以指定在以下位置定义的使用类型/etc/mke2fs.conf

    \n\n
    mkfs.ext4 -T usage-type /dev/something\n
    Run Code Online (Sandbox Code Playgroud)\n\n

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

    \n\n
    small = {\n    blocksize = 1024\n    inode_size = 128\n    inode_ratio = 4096\n}\n
    Run Code Online (Sandbox Code Playgroud)\n\n

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

  • \n
  • 要以较小的占用空间(128 字节)容纳 10 亿个 inode,您需要 128 GB\n仅用于 inode。如果使用尽可能小的块大小(根据 mk2efs 的手册页为 1024),那么这 10 亿个文件将至少占用 1TB(但请记住,由于 inode 为 128 GB,因此您只剩下 872 GB)。

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

  • \n
  • 作为一般经验法则,inode_ratio不应小于blocksize\n,因为您无法(轻松)在一个块中存储多个文件。

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

  • \n
  • 来自对U&L 问题的评论:

    \n\n
    \n

    太多的 inode 肯定会产生很大的成本,它们本身会占用空间,并且相信我,fsck 性能非常严重。我们谈论的是实际上指数级的减速,比如 30 秒 vs 2 天……这是 I/O 限制。更不用说文件列表、索引等的速度变慢了。

    \n
  • \n
\n\n
\n\n

参考:

\n\n\n