Сегодня я столкнулся с ситуацией на сервере, которая меня заинтересовала. Вот сценарий:
Системный журнал показывает:
ядро: предупреждение EXT3-fs (устройство sdb2): ext3_dx_add_entry: индекс каталога заполнен!
Было обнаружено, что виновником является каталог с 9,1 миллионами файлов в нем. Я знаю, что это 9 миллионов файлов, потому что я использовал это, чтобы удалить их:
perl -e 'my $i=0;for(<*>){$i++;((stat)[9]<(unlink))} print "Files deleted: $i\n"'
Сразу после завершения я побежал ls
- это заняло около 3 минут и вернуло 1 файл.
Через несколько минут новый пакет - снова в том же каталоге появилось 9,1 миллиона файлов, и системный журнал снова показал:
ядро: предупреждение EXT3-fs (устройство sdb2): ext3_dx_add_entry: индекс каталога заполнен!
Я снова запустил удаление, и тот же сценарий повторился. Через несколько минут появился новый пакет из более чем 9 миллионов файлов.
Файлы, которые только что появились, старые (около 3 месяцев).
Может ли кто-нибудь подтвердить, является ли это ожидаемым поведением ext3?
Я подозреваю, что это именно то, что происходит, но в настоящее время у меня нет никаких доказательств.
Любые отзывы приветствуются!
Обратите внимание, что вопрос не в том, как это исправить, а в понимании того, что здесь происходит.
"... вопрос не в том, как это исправить, а в понимании того, что здесь происходит ...."
Я предполагаю, что вы страдаете от (серьезного?) Повреждения файловой системы и ... чем больше файлов будет (виртуально?) Создано и удалено, тем серьезнее будет повреждение.
Я говорю это, потому что:
вы написали "... Через несколько минут [...] снова в том же каталоге появилось 9,1 миллиона файлов ...". Предположим, что с" несколькими минутами "вы запланировали 15 минут. Это означает, что создано примерно 10 КБ файлов в секунду. Даже несмотря на то, что ваш сервер / хранилище может выдержать такую нагрузку, трудно поверить, что пока такой процесс создания запущен есть не никаких признаков такой активности! Так что, по крайней мере, двойной факт:
позвольте мне подумать, что ... процесс создания "фальшивый", и поэтому у вас есть проблемы с целостностью файловой системы;
даже жесткое сообщение "ext3_dx_add_entry: Индекс каталога заполнен!"позвольте мне подумать, что в таком сценарии должно быть не возможно создание дополнительных файлов в связанной файловой системе (BTW: как упоминалось @Stefan, комментируя ваш OP), похоже, вы можете эффективно создавать дополнительные файлы. И снова - ИМХО - еще один факт, привлекающий внимание. Как частичное смягчение, слово "предупреждение"(... а не" error ") в сообщениях журнала (предупреждение EXT3-fs) .... заставляет меня думать, что даже разработчики ядра ожидали, что такая ситуация не столь" критическая "(... они думают это предупреждение ... а не ошибка. Так что не должно быть чего-то такого ... ужасного!);
В дополнение к вышесказанному я также нашел этот другой пост в SF подтверждая, что, по крайней мере, в этой конкретной ситуации проблема заключалась в целостности файловой системы.
Что касается последней части вашего вопроса (той, которая связана с гипотезой "кеширования"), даже если я вовсе не хакер ядра, я твердо верю, что это не поведение ядра, поскольку оно выходит за рамки ядра, является чем-то, что требует межмодульного подхода (невозможно реализовать работу только с модулем ext3). Но, пожалуйста, не обвиняйте меня, если последнее предложение абсолютно неверно! Это только мое "ощущение" :-)