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

我已经通过其他有关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的每个文件目录限制的文档,但文件系统报告没有剩余空间。

奇怪的是,我仍然可以在驱动器和目标文件夹上创build新文件,但是在执行大型cp / rsync时,调用mkstemp rename报告不会在设备上留下空间。

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

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

我知道把这么多文件存放在一个目录中并不是出于一大堆理由,但除非我能帮上忙,否则我不希望把它们分开。

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

XFS文件系统对于你现在要做的事情将是一个更加可支持的(长期的)解决scheme。 大文件计数目录不是XFS的问题。 当然,在应用程序级别解决这个问题也是有帮助的。

看来你正在打目录大小的限制。 目录本身是某种特殊文件,其中包含所有文件的名称(+ inode号码和其他元数据)。 它不能大于2G。

无论如何,在一个目录中有几千个文件不是一个好主意:通过文件名进行search会非常缓慢,而且在使用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文件的问题,这取决于文件名的长度。

是ext4绝对需要你吗? 现在,XFS应该像这样处理这种情况。

我有这个问题。 我的解决scheme是:

mkfs.ext4 -i 1024 -b 1024 /dev/blah

看来你正在耗尽我的节点。 显示df -iht ext4输出。

我也有一个删除EXT4上包含大约一百万个文件(linux kernel 3.0,IIRC)的目录的问题。 你的情况是什么内核版本?

最后,我build议使用Reiser3 – 它没有格式化时间节点的限制,在上述情况下似乎也解决了这个问题。

UPD 。:对于那些想知道是否支持Reiser3的人:

cd linux-stable/fs/reiserfs && git log --pretty='format:%aD %s' . | head -n20

 Tue, 10 Jan 2012 15:110:11 -0800 reiserfs: don't lock root inode searching Tue, 10 Jan 2012 15:11:09 -0800 reiserfs: don't lock journal_init() Tue, 10 Jan 2012 15:11:07 -0800 reiserfs: delay reiserfs lock until journal initialization Tue, 10 Jan 2012 15:11:05 -0800 reiserfs: delete comments referring to the BKL Mon, 9 Jan 2012 12:51:21 -0800 Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs Wed, 21 Dec 2011 21:18:43 +0100 reiserfs: Force inode evictions before umount to avoid crash Wed, 21 Dec 2011 17:35:34 +0100 reiserfs: Fix quota mount option parsing Wed, 21 Dec 2011 20:17:10 +0100 reiserfs: Properly display mount options in /proc/mounts Wed, 7 Dec 2011 18:16:57 -0500 vfs: prefer ->dentry->d_sb to ->mnt->mnt_sb Tue, 26 Jul 2011 02:50:53 -0400 reiserfs: propagate umode_t Tue, 26 Jul 2011 01:52:52 -0400 switch ->mknod() to umode_t Tue, 26 Jul 2011 01:42:34 -0400 switch ->create() to umode_t Tue, 26 Jul 2011 01:41:39 -0400 switch vfs_mkdir() and ->mkdir() to umode_t Mon, 12 Dec 2011 15:51:45 -0500 vfs: fix the stupidity with i_dentry in inode destructors Fri, 9 Dec 2011 08:06:57 -0500 vfs: mnt_drop_write_file() Wed, 23 Nov 2011 11:57:51 -0500 switch a bunch of places to mnt_want_write_file() Fri, 28 Oct 2011 14:13:29 +0200 filesystems: add set_nlink() Fri, 28 Oct 2011 14:13:28 +0200 filesystems: add missing nlink wrappers Tue, 25 Oct 2011 12:11:02 +0200 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial Thu, 15 Sep 2011 15:08:05 +0200 Merge branch 'master' into for-next