EXT4“设备上没有剩余空间(28)”不正确

Aid*_*ell 6 linux filesystems ext4

我已经解决了有关 inode 使用、安装问题和其他问题的其他问题/答案,但这些问题似乎都不适用......

df -h

/dev/sdd1 931G 100G 785G 12% /media/teradisk

df -ih

/dev/sdd1 59M 12M 47M 21% /media/teradisk

基本上,我有一个 EXT4 格式的驱动器,大小为 1TB,正在将大约 1200 万(12201106)个文件写入一个目录。我找不到关于 EXT4 的每个目录文件限制的任何文档,但文件系统报告没有剩余空间。

奇怪的是,我仍然可以在驱动器和目标文件夹上创建新文件,但是在执行大型 cp/rsync 时,调用mkstemprename报告设备上没有剩余空间。

rsync: mkstemp "/media/teradisk/files/f.xml.No79k5" 失败:设备上没有剩余空间 (28)

rsync:重命名“/media/teradisk/files/f.xml.No79k5”->“files/f.xml”:设备上没有剩余空间(28)

我知道出于多种原因,不建议将这么多文件存储在一个目录中,但除非我能帮上忙,否则我不想将它们分开。

tmpfs、设备和其他一切的 inode 和空间使用情况看起来不错。原因的任何想法?

rvs*_*rvs 5

您似乎正在达到目录大小限制。目录本身是某种特殊文件,其中包含所有文件的名称(+ inode 编号和可能的其他一些元数据)。并且不能大于2G。

无论如何,在一个目录中拥有超过数千个文件并不是一个好主意:按文件名搜索会非常慢,而且使用 ls、rm 等标准工具会遇到很多问题。

更新:

啊哈!

http://old.nabble.com/re:The-maximum-number-of-files-under-a-folder-td16033098.html

在 2008 年 3 月 13 日 13:23 -0400,Theodore Ts'o 写道:

文件夹中的文件数量没有限制,除了目录本身不能大于 2GB 以及整个文件系统可用的 inode 数量。当然,如果您没有打开目录索引,您可能不喜欢进行目录查找的性能,但这是另一回事。

当前的 ext3 htree 代码也有一个限制,只有 2 级深。随着 2GB 的限制,您会遇到大约 15M 文件的问题,具体取决于文件名的长度。

  • @poige ,ReiserFS 团队开始崇拜了吗?你的倡导是......强大的。 (3认同)

eww*_*ite 2

对于您现在正在尝试做的事情, XFS文件系统将是一个更受支持的(长期)解决方案。大文件数目录对于 XFS 来说不是问题。当然,在应用程序级别修复此问题也会有所帮助......

  • 虽然我意识到其他文件系统可以更好地应对,并且可以进行应用程序级别的改进,但这个答案并没有解决 ext4 中问题的原因,除了说“使用另一个 FS”......说明 ext4 和 XFS 在我的方面的不同之处具体问题会更有帮助。 (2认同)