Jak uwolnić użycie i-węzła?

Mam dysk, na którym użycie i-węzła wynosi 100% (używając polecenia df -i). Jednak po usunięciu plików znacznie, wykorzystanie pozostaje 100%.

Jaki jest prawidłowy sposób, aby to zrobić?

Jak to możliwe, że dysk o mniejszym zużyciu miejsca na dysku może mieć większe wykorzystanie i-węzłów niż dysk z większym zużyciem miejsca na dysku?

Czy to możliwe, jeśli spakuję wiele plików, zmniejszy to liczbę i-węzłów?

Author: Pooja Jhadhav, 2009-03-17

17 answers

Jest to dość łatwe dla dysku, aby mieć dużą liczbę i-węzłów używanych, nawet jeśli dysk nie jest bardzo pełny.

I-węzeł jest przypisany do pliku, więc jeśli masz miliardy plików, każdy po 1 bajcie, zabraknie i-węzłów na długo przed wyczerpaniem się dysku.

Możliwe jest również, że usunięcie plików nie zmniejszy Liczby i-węzłów, jeśli pliki mają wiele twardych łączy. Jak powiedziałem, i-kody należą do pliku, , a nie do wpisu katalogu. Jeśli plik ma dwa powiązane wpisy w katalogu do niego, usunięcie jednego nie uwolni i-węzła.

Dodatkowo możesz usunąć wpis katalogu, ale jeśli uruchomiony proces nadal ma otwarty plik, i-węzeł nie zostanie zwolniony.

Moją początkową radą byłoby usunięcie wszystkich plików, które możesz, a następnie ponowne uruchomienie okna, aby upewnić się, że żadne procesy nie pozostają otwarte.

Jeśli to zrobisz i nadal masz problem, daj nam znać.

Przy okazji, jeśli szukasz katalogów, które zawierają dużo plików, Ten skrypt może pomóc:

#!/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_$$
 176
Author: paxdiablo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-03 11:20:30

Jeśli masz bardzo pecha, użyłeś około 100% wszystkich i-węzłów i nie możesz utworzyć scipt. Możesz to sprawdzić za pomocą df -ih.

Wtedy to polecenie bash może Ci pomóc:

sudo find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n

I tak, to zajmie trochę czasu, ale możesz zlokalizować katalog z największą ilością plików.

 216
Author: simon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-21 07:09:59

Moja sytuacja była taka, że nie miałem i-węzłów i już usunąłem wszystko, co mogłem.

$ df -i
Filesystem     Inodes  IUsed  IFree IUse% Mounted on
/dev/sda1      942080 507361     11  100% /

Jestem na ubuntu 12.04 LTS i nie mogłem usunąć starych jąder Linuksa, które zajęły około 400 000 i-węzłów, ponieważ apt został uszkodzony z powodu braku pakietu. I nie mogłem zainstalować nowego pakietu, ponieważ nie miałem i-węzłów, więc utknąłem.

Skończyłem usuwając kilka starych jąder Linuksa ręcznie, aby uwolnić około 10,000 i-węzłów

$ sudo rm -rf /usr/src/linux-headers-3.2.0-2*

To wystarczyło, aby wtedy pozwól mi zainstalować brakujący pakiet i naprawić mój apt

$ sudo apt-get install linux-headers-3.2.0-76-generic-pae

A następnie usuń resztę starych jąder Linuksa za pomocą apt

$ sudo apt-get autoremove

Teraz jest o wiele lepiej

$ df -i
Filesystem     Inodes  IUsed  IFree IUse% Mounted on
/dev/sda1      942080 507361 434719   54% /
 71
Author: LNamba,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-06 08:46:37

Moje rozwiązanie:

Spróbuj znaleźć, czy jest to problem z i-węzłami:

df -ih

Spróbuj znaleźć foldery główne z dużą liczbą i-węzłów:

for i in /*; do echo $i; find $i |wc -l; done

Spróbuj znaleźć konkretne foldery:

for i in /src/*; do echo $i; find $i |wc -l; done

Jeśli to są nagłówki Linuksa, spróbuj usunąć najstarsze za pomocą:

sudo apt-get autoremove linux-headers-3.13.0-24

Osobiście przeniosłem je do zamontowanego folderu (bo dla mnie ostatnia komenda nie powiodła się) i zainstalowałem najnowsze z:

sudo apt-get autoremove -f
To rozwiązało mój problem.
 52
Author: dardarlt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-21 07:09:01

Miałem ten sam problem, naprawiłem go usuwając sesje katalogowe php

rm -rf /var/lib/php/sessions/

Może znajdować się pod /var/lib/php5, Jeśli używasz starszej wersji php.

Odtworzyć go z następującym pozwoleniem

mkdir /var/lib/php/sessions/ && chmod 1733 /var/lib/php/sessions/

Domyślnie uprawnienie katalogu na Debianie pokazało drwx-wx-wt (1733)

 12
Author: Anyone_ph,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-29 00:18:09

Doświadczyliśmy tego na koncie HostGator (który nakłada limity inode na cały swój hosting) po ataku spamowym. Pozostawił po sobie wiele rekordów kolejki w /root/.cpanel / comet. Jeśli tak się stanie i okaże się, że nie masz wolnych i-węzłów, możesz uruchomić to narzędzie cpanel przez powłokę:

/usr/local/cpanel/bin/purge_dead_comet_files
 2
Author: designgroop,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-12 08:37:19

Możesz użyć RSYNC, aby usunąć dużą liczbę plików

rsync -a --delete blanktest/ test/

Utwórz folder blanktest z 0 plikami w nim i polecenie zsynchronizuje foldery testowe z dużą liczbą plików(usunąłem prawie 5M plików za pomocą tej metody).

Dzięki http://www.slashroot.in/which-is-the-fastest-method-to-delete-files-in-linux

 2
Author: VIGNESH,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-03 07:26:16

Późna odpowiedź: W moim przypadku były to moje pliki sesji pod

/var/lib/php/sessions

Które używały i-węzłów.
Nie byłem nawet w stanie otworzyć mojej crontab lub tworzenia nowego katalogu, nie mówiąc już o uruchomieniu operacji usuwania. Ponieważ używam PHP, mamy przewodnik , w którym skopiowałem kod z przykładu 1 i skonfigurowałem cronjob, aby wykonać tę część kodu.

<?php
// Note: This script should be executed by the same user of web server 
process.

// Need active session to initialize session data storage access.
session_start();

// Executes GC immediately
session_gc();

// Clean up session ID created by session_gc()
session_destroy();
?>

Jeśli zastanawiasz się, jak udało mi się otworzyć mój crontab, to cóż, usunąłem niektóre sesje ręcznie przez CLI.

Mam nadzieję, że to pomoże!
 2
Author: Han,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-15 11:57:54

Eaccelerator może być przyczyną problemu, ponieważ kompiluje PHP do bloków...Miałem ten problem z serwerem AWS Amazon na stronie z dużym obciążeniem. Zwolnij i-węzły, usuwając pamięć podręczną eAccelerator w /var/cache / eaccelerator, jeśli nadal masz problemy.

rm -rf /var/cache/eaccelerator/*

(lub cokolwiek Twój katalog pamięci podręcznej)

 1
Author: supershwa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-01 20:17:45

Ostatnio napotkaliśmy podobny problem, w przypadku, gdy proces odnosi się do usuniętego pliku, i-węzeł nie zostanie zwolniony, więc musisz sprawdzić lsof / i kill/ restart proces zwolni i-węzły.

Popraw mnie, jeśli się mylę.

 1
Author: Razal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-01 08:11:10

Jak wspomniano wcześniej, system plików może się wyczerpać, jeśli jest dużo małych plików. Podałem kilka sposobów, aby znaleźć katalogi, które zawierają większość plików tutaj .

 1
Author: jarno,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:27

W jednej z powyższych odpowiedzi zasugerowano, że sesje były przyczyną wyczerpania się i-węzłów i w naszym przypadku tak właśnie było. Aby dodać do tej odpowiedzi, chociaż proponuję sprawdzić php.pliku ini oraz zapewnić session.gc_probability = 1 również session.gc_divisor = 1000 i session.gc_maxlifetime = 1440. W naszym przypadku sesja.gc_probability było równe 0 i spowodowało ten problem.

 1
Author: George W,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-03 02:55:40

Na Raspberry Pi miałem problem z /var/cache/fontconfig dir z dużą ilością plików. Usunięcie zajęło więcej niż godzinę. I couse rm -rf *.cache* podniesiony Argument list too long Błąd. Użyłem poniżej jednego

find . -name '*.cache*' | xargs rm -f
 1
Author: itiic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-11 13:48:06

Możesz zobaczyć tę informację

for i in /var/run/*;do echo -n "$i "; find $i| wc -l;done | column -t
 0
Author: 张馆长,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-17 02:01:53

Ten artykuł uratował mi dzień: https://bewilderedoctothorpe.net/2018/12/21/out-of-inodes/

find . -maxdepth 1 -type d | grep -v '^\.$' | xargs -n 1 -i{} find {} -xdev -type f | cut -d "/" -f 2 | uniq -c | sort -n
 0
Author: Farhad Azarbarzinniaz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-09-29 09:48:39

Jak dotąd wiele odpowiedzi na to pytanie i wszystkie powyższe wydają się konkretne. Myślę, że będziesz bezpieczny, używając stat, ale w zależności od systemu operacyjnego, możesz dostać błędy i-węzła. Implementacja własnej funkcji wywołania stat przy użyciu 64bit, aby uniknąć problemów z przepełnieniem, wydaje się dość kompatybilna.

 -2
Author: kinokaf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-17 17:52:05

Jeśli używasz Dockera, usuń wszystkie obrazy. Wykorzystali wiele przestrzeni....

Zatrzymaj wszystkie pojemniki

docker stop $(docker ps -a -q)

Usuń wszystkie kontenery

docker rm $(docker ps -a -q)

Usuń wszystkie obrazy

docker rmi $(docker images -q)

Działa dla mnie

 -3
Author: Pankaj Shinde,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-03-25 04:11:44