Как освободить использование Inode?
У меня есть диск, где использование inode составляет 100% (с помощью команды df -i
).
Однако после удаления файлов существенно, использование остается на 100%.
Какой правильный способ сделать это?
Как возможно, что дисковый накопитель с меньшим объемом дискового пространства может иметь
более высокий уровень использования Inode, чем дисковый накопитель с более высоким дисковым пространством?
Ответы
Ответ 1
Для диска довольно просто использовать большое количество используемых дескрипторов, даже если диск не очень заполнен.
Инод выделяется файлу, поэтому, если у вас есть gazillions файлов, каждый 1 байт каждый, вы закончите inodes задолго до того, как вы закончите с диска.
Также возможно, что удаление файлов не приведет к уменьшению количества индексных дескрипторов, если файлы имеют несколько жестких ссылок. Как я уже сказал, inodes принадлежат файлу, не запись в каталоге. Если у файла есть две записи каталога, связанные с ним, удаление одного из них не освободит индекс.
Кроме того, вы можете удалить запись в каталоге, но, если в запущенном процессе все еще открыт файл, inode не будет освобожден.
Моя первоначальная рекомендация заключалась бы в том, чтобы удалить все файлы, которые вы можете, а затем перезагрузите окно, чтобы убедиться, что процессы не оставлены, открывая файлы.
Если вы это сделаете, и у вас все еще есть проблема, сообщите нам.
Кстати, если вы ищете каталоги, содержащие много файлов, этот script может помочь:
#!/bin/bash
# count_em - count files in all subdirectories under current directory.
echo 'echo $(ls -a "$1" | wc -l) $1' >/tmp/count_em_$$
chmod 700 /tmp/count_em_$$
find . -mount -type d -print0 | xargs -0 -n1 /tmp/count_em_$$ | sort -n
rm -f /tmp/count_em_$$
Ответ 2
Если вам очень не повезло, вы использовали около 100% всех инодов и не можете создать сценарий.
Вы можете проверить это с помощью df -ih
.
Затем эта команда bash может помочь вам:
sudo find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n
И да, это займет время, но вы можете найти каталог с наибольшим количеством файлов.
Ответ 3
Моя ситуация была в том, что я был из inodes, и я уже удалился обо всем, что мог.
$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 942080 507361 11 100% /
Я нахожусь на ubuntu 12.04LTS и не могу удалить старые ядра Linux, которые заняли около 400 000 инодов, потому что apt был сломан из-за недостающего пакета. И я не мог установить новый пакет, потому что я был из inodes, поэтому я застрял.
В итоге я удалил несколько старых ядер linux, чтобы освободить около 10 000 инодов.
$ sudo rm -rf /usr/src/linux-headers-3.2.0-2*
Этого было достаточно, чтобы потом позволить мне установить недостающий пакет и исправить мой apt
$ sudo apt-get install linux-headers-3.2.0-76-generic-pae
а затем удалите остальные старые ядра Linux с помощью apt
$ sudo apt-get autoremove
теперь все намного лучше.
$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 942080 507361 434719 54% /
Ответ 4
Мое решение:
Попробуйте найти, является ли это проблемой inodes:
df -ih
Попробуйте найти корневые папки с большим количеством индексов:
for i in /*; do echo $i; find $i |wc -l; done
Попробуйте найти определенные папки:
for i in /src/*; do echo $i; find $i |wc -l; done
Если это заголовки linux, попробуйте удалить старое:
sudo apt-get autoremove linux-headers-3.13.0-24
Лично я переместил их в смонтированную папку (потому что для моей последней команды не удалось) и установил последнюю версию с помощью
sudo apt-get autoremove -f
Это решило мою проблему.
Ответ 5
У меня была та же проблема, исправлена ее, удалив сеансы каталога php
rm -rf /var/lib/php/sessions/
Это может быть под /var/lib/php5
, если вы используете более старую версию php.
Создайте его со следующим разрешением
mkdir /var/lib/php/sessions/ && chmod 1733 /var/lib/php/sessions/
Разрешение по умолчанию для каталога на Debian показало drwx-wx-wt
(1733)
Ответ 6
eaccelerator может вызвать проблему, поскольку он компилирует PHP в блоки... У меня была эта проблема с сервером Amazon AWS на сайте с большой нагрузкой. Освободите Inodes, удалив кеш eaccelerator в /var/cache/eaccelerator, если у вас по-прежнему возникают проблемы.
rm -rf /var/cache/eaccelerator/*
(или независимо от вашего кеша)
Ответ 7
Мы столкнулись с этим на учетной записи HostGator (кто размещает ограничения на использование inode на всех своих хостингах) после атаки спама. Он оставил огромное количество записей в очереди в /root/.cpanel/comet. Если это произойдет, и вы обнаружите, что у вас нет свободных инодов, вы можете запустить эту утилиту cpanel через оболочку:
/usr/local/cpanel/bin/purge_dead_comet_files
Ответ 8
Мы столкнулись с аналогичной проблемой в последнее время. В случае, если процесс относится к удаленному файлу, Inode не освобождается, поэтому вам нужно проверить lsof/, а kill/restart процесс выведет inodes.
Исправьте меня, если здесь не так.
Ответ 9
Вы можете использовать RSYNC для УДАЛЕНИЯ большого количества файлов
rsync -a --delete blanktest/ test/
Создайте пустую папку с 0 файлами в ней, и команда синхронизирует ваши тестовые папки с большим количеством файлов (я удалил почти 5M файлов с помощью этого метода).
Благодаря http://www.slashroot.in/which-is-the-fastest-method-to-delete-files-in-linux
Ответ 10
Как уже говорилось, файловая система может закончиться inodes, если есть много небольших файлов. Я предоставил некоторые средства для поиска каталогов, которые содержат большинство файлов здесь.
Ответ 11
Многие ответы на этот вопрос до сих пор и все вышеизложенное кажутся конкретными. Я думаю, вы будете в безопасности, используя stat
, пока вы идете вперед, но зависит от ОС, вы можете получить некоторые ошибки inode. Таким образом, реализация ваших собственных функций вызова stat
с помощью 64bit
, чтобы избежать проблем с переполнением, кажется довольно совместимой.
Ответ 12
Почтовый каталог может быть заполнен файлами:
/главная/имя пользователя/Maildir/новый