Flu*_*ffy 6 filesystem ext4 inode
创建具有 2^32-1 个 inode 的 ext4 文件系统有什么缺点吗?
我有一个 1tb 的驱动器,我想在上面存储 8 亿到 15 亿个小文件。似乎最大值是 40 亿,所以我想知道是否可以在创建 fs 时将其设置为最大值,或者我应该找到其他解决方案。
根据Stack Overflow和Unix & Linux(见下文)上的类似问题,最大化 ext4 文件系统上的 inode 数量是一个坏主意。
\n\n最好使用另一个文件系统或将磁盘拆分为多个文件系统。
\n\n总结一下:
\n\n一个inode占用256字节。它可以配置为 128,但即使:
\n\n2\xc2\xb3\xc2\xb2 inodes \xc3\x97 256 bytes each = 1 TB\n
Run Code Online (Sandbox Code Playgroud)创建 ext4 文件系统时,您可以指定在以下位置定义的使用类型/etc/mke2fs.conf
:
mkfs.ext4 -T usage-type /dev/something\n
Run Code Online (Sandbox Code Playgroud)\n\nsmall
为了存储许多小文件,可以使用以下类型:
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 字节)。
要以较小的占用空间(128 字节)容纳 10 亿个 inode,您需要 128 GB\n仅用于 inode。如果使用尽可能小的块大小(根据 mk2efs 的手册页为 1024),那么这 10 亿个文件将至少占用 1TB(但请记住,由于 inode 为 128 GB,因此您只剩下 872 GB)。
ext4 的最小可能块大小是 1024 字节。因此,您无法存储超过 1 TB / 1024 = 10 亿个文件,并且拥有更多 inode 是没有意义的。
作为一般经验法则,inode_ratio
不应小于blocksize
\n,因为您无法(轻松)在一个块中存储多个文件。
如果文件系统是这样配置的,则可以直接在 inode 中存储文件的前 60 个字节。在这种情况下,文件不会占用(常规)\n块;在这里阅读有关此类内联数据的信息,但也要考虑inode 大小。
来自对U&L 问题的评论:
\n\n\n太多的 inode 肯定会产生很大的成本,它们本身会占用空间,并且相信我,fsck 性能非常严重。我们谈论的是实际上指数级的减速,比如 30 秒 vs 2 天……这是 I/O 限制。更不用说文件列表、索引等的速度变慢了。
\n
参考:
\n\n\n