Moje řešení:
Zkuste zjistit, zda se nejedná o problém s inody s:
df -ih
Zkuste najít kořenové složky s velkým počtem inodů:
for i in /*; do echo $i; find $i |wc -l; done
Zkuste najít konkrétní složky:
for i in /src/*; do echo $i; find $i |wc -l; done
Pokud se jedná o linuxové hlavičky, zkuste odstranit nejstarší pomocí:
sudo apt-get autoremove linux-headers-3.13.0-24
Osobně jsem je přesunul do připojené složky (protože pro mě selhal poslední příkaz) a nainstaloval nejnovější s:
sudo apt-get autoremove -f
Toto vyřešilo můj problém.
Moje situace byla taková, že mi došly inody a už jsem smazal všechno, co jsem mohl.
$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 942080 507361 11 100% /
Jsem na ubuntu 12.04LTS a nemohl jsem odstranit stará linuxová jádra, která zabírala asi 400 000 inodů, protože apt byl rozbitý kvůli chybějícímu balíčku. A nemohl jsem nainstalovat nový balíček, protože mi došly inody, takže jsem se zasekl.
Nakonec jsem ručně smazal několik starých linuxových jader, abych uvolnil asi 10 000 inodů
$ sudo rm -rf /usr/src/linux-headers-3.2.0-2*
To stačilo k tomu, abych mohl nainstalovat chybějící balíček a opravit apt
$ sudo apt-get install linux-headers-3.2.0-76-generic-pae
a poté odstraňte zbytek starých linuxových jader pomocí apt
$ sudo apt-get autoremove
věci jsou teď mnohem lepší
$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 942080 507361 434719 54% /
Pro disk je docela snadné použít velké množství inodů, i když disk není příliš plný.
Souboru je přidělen inode, takže pokud máte gazilióny souborů, každý má 1 bajt, dojdou vám inody dlouho předtím, než vám dojde disk.
Je také možné, že odstranění souborů nesníží počet inodů, pokud mají soubory více pevných odkazů. Jak jsem řekl, inody patří do souboru, ne záznam v adresáři. Pokud jsou k souboru připojeny dvě položky adresáře, odstranění jednoho neuvolní inode.
Kromě toho můžete odstranit položku adresáře, ale pokud běžící proces stále má soubor otevřený, inode nebude uvolněn.
Moje první rada by byla smazat všechny soubory, které můžete, a poté restartovat box, abyste se ujistili, že nezůstaly žádné procesy, které by držely soubory otevřené.
Pokud to uděláte a stále máte problém, dejte nám vědět.
Mimochodem, pokud hledáte adresáře, které obsahují hodně souborů, může vám pomoci tento skript:
#!/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_$$
Pokud máte velkou smůlu, použili jste asi 100 % všech inodů a nemůžete vytvořit scipt. Můžete to zkontrolovat pomocí df -ih
.
Pak vám může pomoci tento příkaz bash:
sudo find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n
A ano, bude to chvíli trvat, ale můžete najít adresář s nejvíce soubory.