我有一台 Ubuntu 14.04 服务器,无法创建超过 65,000 个目录的新目录。我运行了tune2fs -l
,可以看到dir_nlink
标志已设置。有谁知道还可以检查什么以允许这种情况发生?我有许多其他此服务器配置的克隆,它们都超过了 65,000 个标记并且按预期工作。我比较了输出,tune2fs -l
它们看起来相同。我还有几百万个可用的 inode 和块。我卸载并重新安装了文件系统,但没有任何变化。
答案1
Ext4 目录限制
- 传统的近线性目录
- 基于哈希的目录
线性目录的链接数上限为 65000,也就是说,可以容纳大约这么多的子目录。基于哈希的目录则没有这个限制。
创建新文件系统时,默认为哈希目录。如果您的目录仍为线性,则可能是因为您升级了旧的 ext3 分区。(Ext3 后来获得了基于哈希的目录功能。)
测试目录是否为近线性或基于哈希的
$ sudo debugfs /dev/partition
$ htree /
htree: Not a hash-indexed directory
转换
- 卸载分区
启用
dir_index
(基于哈希的目录)和dir_nlink
(无限链接)功能。sudo tune2fs -O dir_index,dir_nlink /dev/partition
所有新创建的目录现在都能够容纳无限的子目录。
如果要转换现有目录,请执行以下操作:
- 卸载分区(对于防止数据丢失很重要)
告诉 fsck 重建目录索引:
sudo e2fsck -f -D /dev/partition
-f
强制 fsck 检查磁盘,即使它处于干净状态
-D
告诉 e2fsck 重建索引:
此选项使 e2fsck 尝试优化所有目录,如果文件系统支持目录索引,则通过重新索引它们,或者通过对较小目录或使用传统线性目录的文件系统进行排序和压缩目录。