Итак, мой клиент получил электронное письмо от Linode сегодня, в котором говорилось, что его сервер приводит к взрыву службы резервного копирования Linode. Зачем? Слишком много файлов. Я засмеялся и побежал:
# df -ih
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/xvda 2.5M 2.4M 91K 97% /
Дерьмо. 2,4 миллиона Inode в использовании. Что, черт возьми, происходит ?!
Я искал очевидных подозреваемых ( /var/{log,cache}
и каталог, в котором размещены все сайты), но я не нахожу ничего действительно подозрительного. Где-то на этом звере я уверен, что есть каталог, который содержит пару миллионов файлов.
Для первого контекста мои занятые серверы используют 20000 инодов, а мой рабочий стол (старая установка с более чем 4 ТБ использованного хранилища) составляет чуть более миллиона. Существует проблема.
Итак, мой вопрос, как мне найти, где проблема? Есть ли du
для inode?
источник
Ответы:
Проверьте, не
/lost+found
возникла ли проблема с диском и обнаружилось ли много ненужных файлов в виде отдельных файлов, возможно, неправильно.Проверьте, не
iostat
генерирует ли какое-либо приложение файлы типа сумасшедшие.find / -xdev -type d -size +100k
скажет вам, если есть каталог, который использует более 100 КБ дискового пространства. Это будет каталог, который содержит много файлов или содержит много файлов в прошлом. Вы можете настроить размер фигуры.Я не думаю, что есть комбинация опций для GNU,
du
чтобы она считала 1 на каждую запись каталога. Вы можете сделать это, создав список файлов с помощьюfind
и немного посчитав в awk. Вотdu
для иноды. Минимально протестировано, не пытается справиться с именами файлов, содержащими переводы строк.Использование:
du-inodes /
. Печатает список непустых каталогов с рекурсивным общим количеством записей в них и их подкаталогах. Перенаправьте вывод в файл и просмотрите его на досуге.sort -k1nr <root.du-inodes | head
скажу вам самые большие обидчики.источник
awk: line 2: find: regular expression compile failed (bad class -- [], [^] or [) [^ awk: line 2: syntax error at or near ] `/tmp/tmpw99dhs': Permission denied
Вы можете проверить с помощью этого скрипта:
Это печатает 10 лучших подкаталогов по количеству файлов. Если вы хотите верхний x, измените
head
наhead -n x
, гдеx
натуральное число больше 0.Для 100% уверенного результата запустите этот скрипт с привилегиями root:
источник
10: read: Illegal option -d
... вычистил-d
флаг,read
надеясь, что ничего плохого не случится. Даст вам знать, когда он закончит работу ...Часто быстрее, чем найти, если база данных locate обновлена:
Это сбрасывает всю базу данных locate, удаляет все, что находится за последним символом '/' в пути, затем сортировка и "uniq -c" дают вам количество файлов / каталогов на каталог. "sort -n" отправляется в хвост, чтобы получить десять каталогов с наибольшим количеством вещей в них.
источник
find /path/to/parent -xdev > filelist
сначала запустите, а затем направьте sed для чтения ввода из этого списка.Еще предлагаю:
http://www.iasptk.com/20314-ubuntu-find-large-files-fast-from-command-line
Используйте эти поиски, чтобы найти самые большие файлы на вашем сервере.
Найти файлы размером более 1 ГБ
Найти файлы размером более 100 МБ
Найти файлы размером более 10 МБ
Первая часть - это команда find, использующая флаг «-size» для поиска файлов разных размеров, измеряемых в килобайтах.
Последний бит в конце, начинающийся с «-exec», позволяет указать команду, которую мы хотим выполнить для каждого найденного файла. Здесь команда "ls -lh" включает всю информацию, отображаемую при выводе содержимого каталога. Буква h в конце особенно полезна, поскольку она печатает размер каждого файла в удобочитаемом формате.
источник
Это сработало для меня, когда другой не удалось на Android через оболочку:
источник
Мне нравится использовать что-то вроде
du --inodes -d 1
поиска каталога, который либо рекурсивно, либо напрямую содержит много файлов.Мне также нравится этот ответ: https://unix.stackexchange.com/a/123052
источник