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

Полный индекс каталогов Linux ext3 - внутренности

Сегодня я столкнулся с ситуацией на сервере, которая меня заинтересовала. Вот сценарий:

Системный журнал показывает:

ядро: предупреждение 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?

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

Любые отзывы приветствуются!

Обратите внимание, что вопрос не в том, как это исправить, а в понимании того, что здесь происходит.

"... вопрос не в том, как это исправить, а в понимании того, что здесь происходит ...."

Я предполагаю, что вы страдаете от (серьезного?) Повреждения файловой системы и ... чем больше файлов будет (виртуально?) Создано и удалено, тем серьезнее будет повреждение.

Я говорю это, потому что:

  1. вы написали "... Через несколько минут [...] снова в том же каталоге появилось 9,1 миллиона файлов ...". Предположим, что с" несколькими минутами "вы запланировали 15 минут. Это означает, что создано примерно 10 КБ файлов в секунду. Даже несмотря на то, что ваш сервер / хранилище может выдержать такую ​​нагрузку, трудно поверить, что пока такой процесс создания запущен есть не никаких признаков такой активности! Так что, по крайней мере, двойной факт:

    • Создается 10К файлов в секунду (за 15 минут);
    • вы не замечаете какой-либо странной нагрузки / поведения вашей системы

    позвольте мне подумать, что ... процесс создания "фальшивый", и поэтому у вас есть проблемы с целостностью файловой системы;

  2. даже жесткое сообщение "ext3_dx_add_entry: Индекс каталога заполнен!"позвольте мне подумать, что в таком сценарии должно быть не возможно создание дополнительных файлов в связанной файловой системе (BTW: как упоминалось @Stefan, комментируя ваш OP), похоже, вы можете эффективно создавать дополнительные файлы. И снова - ИМХО - еще один факт, привлекающий внимание. Как частичное смягчение, слово "предупреждение"(... а не" error ") в сообщениях журнала (предупреждение EXT3-fs) .... заставляет меня думать, что даже разработчики ядра ожидали, что такая ситуация не столь" критическая "(... они думают это предупреждение ... а не ошибка. Так что не должно быть чего-то такого ... ужасного!);

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

Что касается последней части вашего вопроса (той, которая связана с гипотезой "кеширования"), даже если я вовсе не хакер ядра, я твердо верю, что это не поведение ядра, поскольку оно выходит за рамки ядра, является чем-то, что требует межмодульного подхода (невозможно реализовать работу только с модулем ext3). Но, пожалуйста, не обвиняйте меня, если последнее предложение абсолютно неверно! Это только мое "ощущение" :-)


Обновить

As for point 2) above, I was неправильно: the "Directory Index" seems не to be strictly related to the file-system structure used to effectively store both file-data and file-metadata. Instead it's "only" a means to optimize searching in directories containing лоты of files [see Вот or this other SF post Вот]. This seems to explain why the log reports a "warning" (and not an "error") as, in my opinion, when "Directory Index" is full... everything can proceed as usual, without the benefits of the indexing.