Не ожидайте, что это будет быстро ...
Перейдите в каталог, в котором, как вы подозреваете, может быть подкаталог с большим количеством inode. Если этот сценарий занимает много времени, вы, вероятно, нашли, где искать в файловой системе. / VAR хорошее начало ...
В противном случае, если вы перейдете в верхний каталог в этой файловой системе и запустите его и дождетесь его завершения, вы найдете каталог со всеми inode.
find . -type d |
while
read line
do
echo "$( find "$line" -maxdepth 1 | wc -l) $line"
done |
sort -rn | less
Я не беспокоюсь о стоимости сортировки. Я запустил тест, и для сортировки несортированных выходных данных с 350 000 каталогов потребовалось 8 секунд. Первоначальная находка заняла. Реальная стоимость - открыть все эти каталоги в цикле while. (Сам цикл занимает 22 секунды). (Тестовые данные были запущены в подкаталоге с 350 000 каталогов, в одном из которых было миллион файлов, в остальных от 1 до 15 каталогов).
Различные люди отмечали, что ls не очень хорош в этом, потому что он сортирует вывод. Я попробовал эхо, но это тоже не здорово. Кто-то еще указал, что stat дает эту информацию (количество записей в каталоге), но она не переносима. Оказывается, что find -maxdepth действительно быстро открывает каталоги и считает .files, так что ... вот оно ... очки для всех!
Если проблема в одном каталоге со слишком большим количеством файлов, вот простое решение:
Основная идея
find
заключается в том, что размер каталога пропорционален количеству файлов, находящихся непосредственно внутри этого каталога. Итак, здесь мы ищем каталоги с тоннами файлов внутри.Если вы не хотите угадывать число и предпочитаете перечислять все подозрительные каталоги, упорядоченные по размеру, это тоже легко:
источник
Grrr, комментирование требует 50 респ. Так что этот ответ на самом деле является комментарием к ответу Крис.
Так как спрашивающему, вероятно, не безразличны все каталоги, только худшие, использование сортировки, вероятно, является очень дорогим излишним.
Это не так полно, как ваша версия, но то, что это делает, это печатать строки, если они больше, чем предыдущий максимум, значительно уменьшая количество выводимого шума и экономя затраты на сортировку.
Недостатком этого является то, что если у вас есть 2 очень больших директории, а первая имеет на 1 больше инода, чем вторая, вы никогда не увидите 2-ю.
Более полное решение будет состоять в том, чтобы написать более умный Perl-скрипт, который отслеживает 10 лучших значений и выводит их в конце. Но это слишком долго для быстрого ответа о сбое сервера.
Кроме того, некоторые более умные сценарии на Perl позволят вам пропустить цикл while - на большинстве платформ ls сортирует результаты, что также может быть очень дорого для больших каталогов. Сортировка ls здесь не обязательна, так как все, что нас интересует - это количество.
источник
Вы можете использовать этот маленький фрагмент:
Он распечатает, сколько файлов и каталогов находится в каждом из каталогов в текущей папке, с самыми большими нарушителями внизу. Это поможет вам найти каталоги, которые имеют много файлов. ( больше информации )
источник
Это не прямой ответ на ваш вопрос, но поиск недавно измененных файлов небольшого размера с помощью команды find может сузить область поиска:
источник
ls не найдет файлы, имена которых начинаются с точки. Использование find позволяет избежать этого. Он находит каждый файл в дереве каталогов, отбрасывает базовое имя с конца каждого пути и подсчитывает, сколько раз каждый путь каталога появляется в результирующем выводе. Возможно, вам придется поставить "!" в кавычках, если ваша оболочка жалуется на это.
Иноды могут также использоваться файлами, которые были удалены, но которые остаются открытыми в процессе работы. Если этот пакет Munin содержит какие-либо постоянно работающие программы, еще одна вещь, чтобы проверить, является ли он открытым необычное количество файлов.
источник
Я бы использовал этот метод грубо: запустил tripwire на всем устройстве для базовой линии, затем через некоторое время запустил проверку, и каталог-нарушитель вылезет, как больной большой палец.
источник
(неумение комментировать действительно стареет - это для egorgry)
egorgry - ls -i печатает индекс NODBER для записи, а не индекс COUNT.
Попробуйте это с файлом в вашем каталоге - вы (вероятно) увидите такое же большое число, но это не количество инодов, это просто инод #, на который указывает ваша запись в каталоге.
источник
Обновить
Один вкладыш, который возвращает количество инодов для каждого дочернего элемента данного каталога с самыми большими записями внизу.
Оригинальный ответ
Запустите его так (учитывая, что приведенный выше скрипт находится в исполняемом файле в вашем рабочем каталоге)
источник
Использование Inode составляет примерно один на файл или каталог, верно? Ну действуй
приблизительно посчитать, сколько inode используется в [path].
источник
Я пытался написать эффективный конвейер оболочки, но он стал громоздким и либо медленным, либо неточным, например,
перечислит листовые каталоги (и некоторые другие) с более чем 1000 файлами в них. Итак, вот Perl-скрипт для эффективной работы как по времени, так и по оперативной памяти. Выход как
«Файлы-в-поддереве» «файлы-в-каталоге» «имя-каталога»
так что вы можете легко помассировать и отфильтровать его, используя обычные инструменты, например, sort (1) или awk (1), как указано выше.
источник
мой дом на моем ноутбуке использует 131191 инодов.
источник