Ubuntu 服务器 ext4 达到 65000 子目录限制

gre*_*jkm 7 ubuntu filesystems ext4 tune2fs

我有一个 Ubuntu 14.04 服务器,它无法在 65,000 目录之外创建新目录。我已经运行 atune2fs -l并且可以看到该dir_nlink标志已设置。有谁知道还可以检查什么来允许这种情况发生?我有这个服务器配置的许多其他克隆,它们都超过了 65,000 大关并按预期工作。我已经比较了tune2fs -l输出,它们看起来是一样的。我仍然有几百万个空闲的 inode 和块。我已经卸载并重新安装了文件系统,但没有任何改变。

Geo*_*lly 7

Ext4 目录限制

Ext4 支持两种目录

  • 传统的几乎线性目录
  • 基于哈希的目录

线性目录有 65000 个链接的限制,即大约有许多子目录是可能的。基于哈希的目录没有限制。

创建新文件系统时,默认为哈希目录。如果您的目录仍然是线性的,那可能是因为您升级了旧的 ext3 分区。(Ext3 后来获得了基于哈希的目录功能。)

测试目录是几乎线性的还是基于哈希的

$ sudo debugfs /dev/partition
$ htree /
htree: Not a hash-indexed directory
Run Code Online (Sandbox Code Playgroud)

转换

  1. 卸载分区
  2. 启用dir_index(基于哈希的目录)和dir_nlink(无限链接)功能。

    sudo tune2fs -O dir_index,dir_nlink /dev/partition
    
    Run Code Online (Sandbox Code Playgroud)

所有新创建的目录现在都能够容纳无限的子目录。

如果要转换现有目录,请执行以下操作:

  1. 卸载分区(防止数据丢失很重要)
  2. 告诉 fsck 重建目录索引:

    sudo e2fsck -f -D /dev/partition
    
    Run Code Online (Sandbox Code Playgroud)

-f 强制 fsck 检查磁盘,即使它处于干净状态

-D 告诉 e2fsck 重建索引:

此选项使 e2fsck 尝试优化所有目录,如果文件系统支持目录索引,则通过重新索引它们,或者通过对较小目录或使用传统线性目录的文件系统的目录进行排序和压缩。