如果我将 ext3 fs 升级到 ext4,它会自动增加每个目录的最大目录数量吗?

如果我将 ext3 fs 升级到 ext4,它会自动增加每个目录的最大目录数量吗?

由于外部不可避免的情况*,我需要在一个目录中拥有超过 32k 个目录(但据我所知,少于 64k)。我达到了 ext3 的限制。我假设原始服务器正在运行 ReiserFS。备份存储在 S3 中。

我的解决方案是升级到 ext4,根据 Wikipedia:

在 ext3 中,一个目录最多可以有 32,000 个子目录。在 ext4 中,此限制增加到 64,000。

我的问题是:将 fs 安装为 ext4 会自动增加此限制吗?我是否必须运行一些命令才能启用新功能?我是否必须重新创建目录?

* 恢复备份,将信息转换为我们编写的新的、更好的系统

答案1

简短的回答:是的。从 ext3 转换为 ext4 确实可以解决问题。

长答案:

以下是我解决这个问题的方法:

我有一个 5 TB 的 RAID 阵列,分区上大约有 4TB 的数据,达到了此限制。因此我:

运行以下命令将其从 ext3 转换为 ext4:

tune2fs -O extents,uninit_bg,dir_index /dev/DEV

/dev/DEV 对我来说类似于 /dev/sdb1

然后我跑了:

e2fsck -fDC0 /dev/DEV

这需要大约 8 个小时来处理 4TB 的数据。

然后我修改了 /etc/fstab 来告诉它将分区挂载为 ext4。

然后我就跑了

mount /big

其中 /big 是我的分区的名称。它运行完美。

所以要回答你的问题,是的,转换为 ext4 确实解决了这个问题。

在进行此转换之前请阅读以下内容: http://www.debian-administration.org/article/643/Migrating_a_live_system_from_ext3_to_ext4_filesystem

https://ext4.wiki.kernel.org/index.php/Ext4_Howto#Converting_an_ext3_filesystem_to_ext4

答案2

不会,更改 fs 类型并将其挂载为 ext4 不会使 inode 数量变大。这是在文件系统创建时决定的,无法在 ext* fs 中动态更改。

此外,仅通过卸载和安装来转换到 ext4 并不是一个干净且值得推荐的方法。ext3 是基于块的,而 ext4 是基于扩展的,即使您将 ext3 安装为 ext4,它仍将基于块。因此,您无法获得 ext4 的主要优势。

如果您有一个测试系统,您可以尝试进行转换并观察 dumpe2fs 输出。

快速检查了源代码。它是硬编码的。

/*
 * Maximal count of links to a file
*/
#define EXT3_LINK_MAX           32000

/*

include/linux/ext3_fs.h

答案3

原始问题的替代解决方案可能是:每隔几分钟停止恢复过程并检查是否有 10000 个子目录。如果有,则创建一个新目录(可能甚至不在这个目录中),将 10000 个目录移到那里并创建指向它们的符号链接。这样,您就可以获得预期的结构而不会达到 FS 限制。

答案4

我没有完整的答案,但这是我通过实验能得到的最接近的答案。在文件系统上运行此命令后:

tune2fs -O extents,uninit_bg,dir_index /dev/DEV

您可以在一个目录中创建超过 32k 的目录。

我不知道的部分(我现在找不到)是将其安装为 ext4 但启用较少功能是否可以创建超过 32k 的目录。

相关内容