Итак, мой клиент получил электронное письмо от 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?
Вы можете проверить с помощью этого скрипта:
#!/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:
Часто быстрее, чем find, если ваша база данных локации обновлена:
# locate '' | sed 's|/[^/]*$|/|g' | sort | uniq -c | sort -n | tee filesperdirectory.txt | tail
Это выгружает всю базу данных локации, удаляет все, что прошло мимо последнего «/» в пути, затем сортировка и "uniq -c" получите количество файлов / каталогов в каталоге. «sort -n» отправлен в хвост, чтобы вы получили десять каталогов с большинством вещей в них.
Еще одно предложение:
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» для поиска файлов разных размеров, измеренных в килобайтах.
Это сработало для меня, когда другой не удалось на Android через оболочку:
find / -type d -exec sh -c "fc=\$(find '{}' -type f | wc -l); echo -e \"\$fc\t{}\"" \; | sort -nr | head -n25
Мне нравится использовать что-то вроде 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}'