LINUX.ORG.RU
ФорумAdmin

2 миллиона файлов в директории ...


0

1

Один косой скрипт создал 2 миллиона файлов в директории. В результате вся файловая система стала раком ( вплоть до сообщений в dmesg ). Почему ? ext3 ( или ext4 - не помню )

★★☆☆

Последнее исправление: SI (всего исправлений: 1)

Почему ?

Сам знаешь ответ, потому что скрипт косой.

sdio ★★★★★
()

i-ноды кончились. Проверяется df -i

at ★★
()

Почему ? ext3 ( или ext4 - не помню )

Сам спросил, сам ответил.
Годный тред.
Его пример - другим наука.

zolden ★★★★★
()
Ответ на: комментарий от Kindly_Cat

гм хочешь сказать если на сервере создать 2 миллиона файлов в любо директории ( не руту ) можно положить сервер ?

SI ★★☆☆
() автор топика
Ответ на: комментарий от SI

Чем, в данном случае, сервер отличается от не сервера?

sin_a ★★★★★
()
Ответ на: комментарий от sin_a

Хорошо, тогда там кончится место

Какие-то у тебя суицидальные мысли, братюнь
Всё когда-нибудь заканчивается, что уж тут поделаешь.
А если ему для работы надо сделать N миллионов файлов, то пусть делает, мне не жалко

zolden ★★★★★
()
Ответ на: комментарий от SI

а защита ? какой нить ulimit ?

Достаточно хранить разные сущности на разных разделах. А то у тебя на сервере даже если тупо в /var место кончится, то он ляжет.

KRoN73 ★★★★★
()
Ответ на: комментарий от zolden

А если ему для работы надо сделать

Мне показалось, что под «косым скриптом» здесь понимается что то типа того, что файлы создавались в бесконечном цикле.

sin_a ★★★★★
()
Ответ на: комментарий от SI

А не надо пользователю давать права записи на корневой раздел. А если /, /home, /var и /tmp на важном сервере - это один раздел, то это кагбе no comments

Pinkbyte ★★★★★
()
Ответ на: комментарий от massive

Получившийся файл я поставил в крон и теперь у меня удаляется по 547 файлов в минуту, при этом нагрузка на сервер в пределах нормы

Мм...nice и ionice типа не работают в таких случаях?

zolden ★★★★★
()
Ответ на: комментарий от zolden

«Чукча не писатель...» так что без понятия. Все вопросы к автору статьи.

massive
()

И шо? Я делал 16млн, правда, не в одной директории: 4000 директорий, в каждой по 4000 файлов.

Но, думаю, reiserfs и с 16млн. файлами в одной директории справилась бы. Правда, mc при отображении этого ужаса тормозил бы нещадно.

Eddy_Em ☆☆☆☆☆
()

Все правильный ответы уже высказаны ( отдельные ФС, квоты на inode ), но хотелось бы добавить 2 пункта

1) должен быть настроен мониторинг, который заранее проинформирует о нехватке inode. Да, если скрипт все 2М файлов создал за 1 мин, мониторинг не спасёт. Но поможет при плавном росте и админ быстрее узнает о проблеме.

2) для удобного отделения ФС крайне желательно использовать LVM, иначе ССЗБ.

router ★★★★★
()
Ответ на: комментарий от router

должен быть настроен мониторинг, который заранее проинформирует о нехватке inode

Достаточно не пользоваться некошерными ФС!

крайне желательно использовать LVM

И без нее отлично живется

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Достаточно не пользоваться некошерными ФС!

Даже не знаю что сказать. Админ локалхоста?

И без нее отлично живется

Особенно когда нужно что-то поменять в реликтовой msdos partition table :D

router ★★★★★
()

Здесь вот Проблема с хардом. Не могу прочитать каталог. удавалось создать побольше файлов (если я правильно посчитал), и ничего, только этот каталог и не читался.

вплоть до сообщений в dmesg

Как это проявляется?

Вобще, возможно проблема в том, что какой-то процесс пытается прочитать список файлов в этом каталоге и жрёт память/своп и нагружает диск.

какой нить ulimit

А у вас они вобще какие-нибудь заданы? Или завтра будет тема про то, что косой скрипт оказался форк-бомбой и всё упало?

mky ★★★★★
()
Ответ на: комментарий от Eddy_Em

Да уж, код там зачётный. Засунуть в код номера инодов для "." и ".." это сильное развитие альтернативного мышления :-)

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

mky ★★★★★
()
Ответ на: комментарий от Eddy_Em

Нет, не считывают, ошибся я. Думал, что «ls», «rm -R», find используют какую-то готовую функцию типа scandir() для получения списка всех файлов в каталоге. Сейчас посмотрел исходники, получается что не так.

«ls» использует readdir(), но сразу выводит содержимое каталога только с ключами "-U -1" (без сортировки и одно имя файла в строке). Иначе он пытается прочитать весь каталог в память, чтобы сортировать или сформатировать для вывода. Причём в комментариях к программе прямо написано про это, а в man'е я такого не нашёл.

«rm -R» сначала читает все файлы в каталоге, потом начинает удалять. В исходниках rm я детально не разбирался, но strace показывает именно такое поведение.

«find -exec» сначала находит все нужные файлы, в каталоге, потом для них начинает делать exec. Аналогично «find -delete» или «find -print».

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.