ext4 листинг файлов очень медленный в одном конкретном каталоге, который раньше содержал много файлов

16

Фон

У меня была небольшая ошибка в logrotate ... Logrotate вращал заархивированные журналы по ошибке, вызывая квадратичный рост файлов в моем /var/log/. И к тому времени, когда я понял, что что-то пошло не так, /var/log/уже содержалось несколько миллионов файлов ...

Мне удалось (после некоторой потери волос и найти / sed / grep magic) удалить все оскорбительные файлы и исправить мою конфигурацию logrotate. И думал, что все было хорошо ...

проблема

Всякий раз, когда я ls/ du -hsили иным образом перечисляю содержимое /var/log/(которое теперь содержит 80 МБ архивов / журналов и самое большее несколько сотен файлов), процесс, выполняющий это, зависает на добрую минуту или две. Я верю, что это как-то связано с ошибкой logrotate, но я не уверен, что это может быть что-то еще. В любом случае, я в растерянности от того, с чего начать отладку или ищу исправление для этого. Пожалуйста, помогите: 3

Другая информация

uname -a
Linux xxx 3.3.8-gentoo #18 SMP Sat Sep 21 22:44:40 CEST 2013 x86_64 Intel(R) 
Core(TM)2 CPU 4400 @ 2.00GHz GenuineIntel GNU/Linux

cat /proc/meminfo 
MemTotal:        2051552 kB
MemFree:           75612 kB
Buffers:            9016 kB
Cached:          1740608 kB
SwapCached:            0 kB

CFQ IO scheduler + SLUB allocator 

Я подумал: сколько файлов в каталоге слишком много? (Загрузка данных из сети) была связана, но у меня больше нет файлов.

редактировать

Проблема сохраняется даже после звонка, init 1 так что я думаю, можно с уверенностью предположить, что нет другого процесса, чтобы обвинить, кроме FS.

Решение (в соответствии с принятым ответом)

init 1
mv /var/log /var/log1
mkdir /var/log
chmod --reference=/var/log1 /var/log
chown --reference=/var/log1 /var/log
tar -C /var/log1 -cvp . | tar -C /var/log -xvp
rm -rf /var/log1
init 5
Эмили Л.
источник

Ответы:

25

Каталоги только увеличиваются в размерах, а не уменьшаются. Попробуйте переместить все эти файлы во временный каталог (например, log2), затем rmdir старый каталог и переименуйте временный каталог в новый постоянный.

Мэтью Ифе
источник
Я просто сделал это, как вы ответили. Это сработало :) К сожалению, у меня недостаточно репутации, чтобы поддержать вас: /
Эмили Л.