Назад | Перейти на главную страницу

EXT4 «На устройстве нет места (28)» неверно

У меня были другие вопросы / ответы, касающиеся использования inode, проблем с установкой и других, но ни один из этих вопросов, похоже, не применим ...

df -h

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

df -ih

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

По сути, у меня есть диск в формате EXT4 размером 1 ТБ, и я записываю около 12 миллионов (12201106) файлов в один каталог. Я не могу найти никакой документации по ограничению количества файлов на каталог для EXT4, но файловая система сообщает, что места не осталось.

Как ни странно, я все еще могу создавать новые файлы на диске и в целевой папке, но при выполнении большого cp / rsync вызовы mkstemp и rename сообщить об отсутствии свободного места на устройстве.

rsync: mkstemp "/media/teradisk/files/f.xml.No79k5" не удалось: на устройстве не осталось места (28)

rsync: переименовать "/media/teradisk/files/f.xml.No79k5" -> "files / f.xml": на устройстве не осталось места (28)

Я знаю, что хранить такое количество файлов в одном каталоге не рекомендуется по множеству причин, но, если я не могу с этим поделать, я не хочу разделять их.

Использование inode и пространства для tmpfs, устройства и всего остального выглядит нормально. Есть идеи о причине?

Похоже, вы достигли предельного размера каталога. Сам каталог - это своего рода специальный файл, который содержит имена (+ номера inode и, возможно, некоторые другие метаданные) всех файлов в нем. И он не может быть больше 2G.

В любом случае, не рекомендуется иметь более нескольких тысяч файлов в одном каталоге: поиск по имени файла будет очень медленным, и у вас будет много проблем со стандартными инструментами, такими как ls, rm и другими.

Обновить:

Ага!

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

13 марта 2008 г. 13:23 -0400 Теодор Цо написал:

Нет ограничений на количество файлов в папке, за исключением того факта, что сам каталог не может быть больше 2 ГБ, и количества inode, доступных для всей файловой системы. Конечно, если у вас не включена индексация каталогов, вам может не понравиться производительность поиска в каталогах, но это уже другая история.

В текущем коде ext3 htree также есть ограничение на глубину всего 2 уровня. Наряду с ограничением в 2 ГБ вы сталкиваетесь с проблемами около 15 миллионов файлов, в зависимости от длины имен файлов.

В Файловая система XFS было бы более приемлемым (долгосрочным) решением того, что вы пытаетесь сделать сейчас. Каталоги с большим количеством файлов не являются проблемой для XFS. Конечно, исправление этого на уровне приложения тоже было бы полезно ...

ext4 вам абсолютно необходим? В наши дни XFS должна справиться с подобной ситуацией без проблем.

У меня была такая проблема. Мое решение было:

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

Кажется, у вас заканчиваются i-узлы. Показать вывод df -iht ext4.

У меня также возникла проблема с удалением каталога на EXT4, содержащего ~ 1 миллион файлов (ядро Linux 3.0, IIRC). Какая у вас версия ядра?

Наконец, я бы предложил использовать Reiser3 - у него нет ограничений времени форматирования i-узла, и в вышеупомянутом случае, похоже, проблема также решена.

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