Найти каталоги с большим количеством файлов в

Итак, мой клиент получил электронное письмо от Linode сегодня, заявив, что их сервер заставляет службу резервного копирования Linode взорваться. Зачем? Слишком много файлов. Я рассмеялся и побежал:

# df -ih
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/xvda        2.5M  2.4M   91K   97% /

Crap. 2,4 миллиона используемых инодов. Что ж, черт возьми?!

Я искал очевидных подозреваемых (/var/{log,cache} и каталог, в котором размещены все сайты), но я не нахожу ничего подозрительного. Где-то на этом зверю я уверен, что есть каталог, содержащий несколько миллионов файлов.

Для контекста один мой мой занят серверами использует 200k inodes и мой рабочий стол (старая установка с более чем 4TB используемого хранилища) всего лишь более миллиона. Существует проблема.

Итак, мой вопрос: как найти, где проблема? Есть ли du для inodes?

1
задан 4 July 2013 в 00:32

5 ответов

Вы можете проверить с помощью этого скрипта:

#!/bin/bash

if [ $# -ne 1 ];then
  echo "Usage: `basename $0` DIRECTORY"
  exit 1
fi

echo "Wait a moment if you want a good top of the bushy folders..."

find "$@" -type d -print0 2>/dev/null | while IFS= read -r -d '' file; do 
    echo -e `ls -A "$file" 2>/dev/null | wc -l` "files in:\t $file"
done | sort -nr | head | awk '{print NR".", "\t", $0}'

exit 0

Это печатает 10 лучших подкаталогов по количеству файлов. Если вам нужен верхний x, измените head на head -n x, где x - натуральное число, большее 0.

Для получения 100% -ных результатов запустите этот скрипт с привилегиями root:

13
ответ дан 24 May 2018 в 20:20

Часто быстрее, чем find, если ваша база данных локации обновлена:

# locate '' | sed 's|/[^/]*$|/|g' | sort | uniq -c | sort -n | tee filesperdirectory.txt | tail

Это выгружает всю базу данных локации, удаляет все, что прошло мимо последнего «/» в пути, затем сортировка и "uniq -c" получите количество файлов / каталогов в каталоге. «sort -n» отправлен в хвост, чтобы вы получили десять каталогов с большинством вещей в них.

3
ответ дан 24 May 2018 в 20:20
  • 1
    +1: использование базы данных локации - очень хорошая идея! – Max Beikirch 14 March 2015 в 01:40

Еще одно предложение:

http://www.iasptk.com/20314-ubuntu-find-large-files-fast-from-command-line

Используйте эти поисковые запросы чтобы найти самые большие файлы на вашем сервере.

Найти файлы более 1 ГБ

sudo find / -type f -size + 1000000k -exec ls -lh {} \;

Найти файлы более 1 ГБ

sudo find / -type f -size + 1000000k -exec ls -lh {} \; [!d7 ]

sudo find / -type f -size + 100000k -exec ls -lh {} \;

sudo find / -type f -size + 10000k -exec ls -lh { } \;

Найти файлы более 10 МБ

Первая часть - команда find с использованием флага «-size» для поиска файлов разных размеров, измеренных в килобайтах.

1
ответ дан 24 May 2018 в 20:20
  • 1
    Его проблема заключается в высоком использовании inode, что указывает на многие файлы меньшего размера, а не на большие. – UpTheCreek 24 June 2015 в 22:38

Это сработало для меня, когда другой не удалось на Android через оболочку:

find / -type d -exec sh -c "fc=\$(find '{}' -type f | wc -l); echo -e \"\$fc\t{}\"" \; | sort -nr | head -n25
0
ответ дан 24 May 2018 в 20:20

Мне нравится использовать что-то вроде du --inodes -d 1, чтобы найти каталог, который рекурсивно или напрямую содержит много файлов.

Мне также нравится этот ответ: https://unix.stackexchange.com/ a / 123052

Для ленивых из нас, вот суть этого:
du --inodes -S | sort -rh | sed -n \
    '1,50{/^.\{71\}/s/^\(.\{30\}\).*\(.\{37\}\)$/\1...\2/;p}'
0
ответ дан 24 May 2018 в 20:20

Другие вопросы по тегам:

Похожие вопросы: