Schlagwort-Archive: Scripting

Auf der Suche nach den inodes

So ein Linux-Server mit ext4 ist nicht so schnell klein zu bekommen – ich schaffs aber natürlich trotzdem. Auf einem meiner App-Server verabschiedete sich übers Wochenende der Datenbankserver. Diagnose eindeutig: Platte voll, 0 Bype frei. Der Auslöser ist auch schnell ausgemacht – mangels logrotate haben sich über 8GB in /var/log angesammelt. Klare Sache – Logs löschen, Dienste neustarten undnichts. Platte voll. Dafuq? Am Platz liegts nicht – dort sind die 8GB nun frei – ich vermute Böses…

# df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/root 23G 14G 8.2G 62% /
# df -i /
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/root 1474560 1474560 0 100% /

Treffer versenkt – die Inodes sind voll. Aber warum? Nach kurzem Gegoogle gehe ich davon aus, dass meist eine Datei = ein Inode ist, also wird die Bash-Keule ausgepackt:

(for i in find / -xdev -type d 2>/dev/null ;do (echo -n ls -1a "$i" | grep -vP "^(.|..)$" |wc -l && echo " - $i") ;done) | sort -n

Dieser Code erzeugt eine Liste aller Ordner auf dem Device der Root-Partition – aufsteigend nach der Anzahl der Dateien sortiert. In meinem Fall ist der Schuldige relativ eindeutig:

[...]
1460 - /usr/share/man/man1
1620 - /usr/portage/metadata/cache/dev-perl
1620 - /usr/portage/metadata/md5-cache/dev-perl
1692 - /usr/portage/metadata/glsa
4554 - /usr/share/man/man3
972513 - /var/nagios/home/.maildir/new

Ich sollte mal ein paar Mails löschen -Oder auch nicht, denn…

rm *
-bash: /bin/rm: Argument list too long

also muss auch hier getrickst werden:
find ./ -exec rm {} +