Software: inodes im Dateisystem auf Linux Webserver im roten Limit – Und nichts geht mehr! Vielleicht die Abhilfe!

Zuletzt aktualisiert am 3. März 2020 von Birk Ecke

Wer seinen Webserver mit dem Betriebssystem Linux (oder einen Virtual Server mit Linux welcher Leistungsstufe auch immer) betreibt, kommt wahrscheinlich bei einem gut besuchten Blog irgendwann mal an den Punkt, dass die inodes an das vorgesehene Limit kommen. Die inodes sind eine Eigenart von unixartigen Dateisystemen. Jede Datei, auch wenn sie nur 0 Byte groß ist, also keine weiteren Informationen als den Dateinamen enthält, belegt dennoch einen inode. Das genau ist das Problem auf Webservern, die auf einem unixartigen Betriebssystem wie etwa Linux laufen. Hier werden bei jedem Zugriff jede Menge Logdateien geschrieben. Die Anzahl dieser Logdateien kann schnell in die hunderttausende gehen!

Abhilfe schafft das Löschen der an sich wertlosen Logdateien. Zuerst sollten Sie sich einem Überblick über die Belegung der Festplattenauslastung ihres Webservers machen. Loggen Sie mittels ssh auf Ihrem Server ein. Benutzer von macOS, Linux oder BSD sind dabei fein raus, denn ihre Betriebssysteme bringen den erforderlichen ssh-client systemseitig mit. Die Nutzer von Windows 7 oder 8 müssen zwangsläufig einen ssh-client – wie etwa putty – installieren. Nutzer von Windows 10 haben die Wahl – ein Linux Subsystem zu installieren, oder eben auch zum Beispiel putty. Google hilft in diesen Fällen weiter. Machen Sie vor den folgenden Schritten unbedingt ein Backup der kompletten Website inklusive der Datenbank, falls etwas schief gehen sollte! Ein wenig Handarbeit ist aber auch angesagt.

 

Bild: Linux Server at it's end. No more inodes free.

Bild: Linux Server at it’s end. No more inodes free.

 

Zum Einloggen auf dem Webserver (unter macOS, Linux oder BSD in einem Terminal, unter Windows mit putty oder dem Linux Subsystemin einem Terminal):

login ssh www.servername.extension- l root

Passwort für den Server eigeben

Dann als sudo (Superuser, der alles darf!) anmelden:

sudo su

Der folgende Befehl gibt den freien und verbrauchten Festplattenplatz Ihres Webservers aus:

df -ht

Wahrscheinlich ist der Festplattenplatz nur zu einem geringem Teil belegt. Auf meinem Webserver mit zwei Websites (Virtual Server XXL Linux eines namhaften deutschen Unternehmens mit CentOS 6 und Plesk 17.5 ONYX sowie den Websites www.harz-saale.de und www.birk-ecke.de) sieht das so aus:

Filesystem Type Size Used  Avail Use% Mounted on
/dev/vzfs reiserfs 191G 12G 180G 6% /
 none devtmpfs   4,0G  4K 4,0G 1% /dev

Die belegten inodes bringen aber möglicherweise eine ganz andere Darstellung über das Dateisystem Ihres Webservers (fiktive aber aus Erfahrung des Autors realistische Werte für das Dateisystem /dev/vzfs nach monatelangem Betrieb eines Webservers):

df -i

 Filesystem Inodes IUsed IFree IUse%  Mounted on
/dev/vzfs 750.000 720.000  30.000  96% /
  none 1.048.576  154 1.048.422    1% /dev

Was man in den beiden obenstehenden Tabelle sieht ist folgendes: Der Festplattenplatz ist gerade einmal zu 6 Prozent ausgeschöpft. Aber trotzdem ist kaum noch Platz für neue hochgeladene Dateien, wie neue Blogeinträge oder Bilder verfügbar. Sie können jetzt den Ratschlägen einschlägiger Foren folgen und einen Dedicated Server für viel Geld mieten, aber die Frage ist, ob das auf Dauer hilfreich ist, denn die inodes sind nun mal fester Bestandteil unixartiger Dateisysteme. Dieser Umstand besteht unabhängig davon, ob bei einem Virtual Server die Anzahl der inodes im Vergleich zum Festplattenplatz unangemessen niedrig angesetzt ist (wie im Fall des Autors dieses Artikels mit 750.000 inodes bei 180 GByte Festplattenlatz) oder nicht. Die inodes werden so oder so sehr wahrscheinlich im Laufe der Zeit überlaufen.

Die Lösung: Durchforsten Sie jedes Verzeichnis unterhalb von /var:

find /var/ -xdev -printf '%h\n' | sort | uniq -c | sort -k 1 -n

Das können Sie auch auf Unterverzeichnisse ausdehnen:

find /var/log/ -xdev -printf '%h\n' | sort | uniq -c | sort -k 1 -n 

find /var/log/samba/ -xdev -printf '%h\n' | sort | uniq -c | sort -k 1 -n

… und bei mir war es genau der oben stehende Ordner. Hier hatten sich mehr als 500.000 Log-Dateien mit genau 0 Byte Größe angesammelt. Die wird man mit:

cd /var/log/samba

Abfrage des aktuellen Arbeitsverzeichnisses, nur nochmal zur Sicherheit:

pwd

Hier sollte samba stehen.

Mit dem Befehl:

find -type f -print0 | xargs -0 rm

wird man die Log-Dateien sehr schnell los!

Das war es dann auch! Eine erneute Kontrolle der verbrauchten inodes ergab:

df -i

 Filesystem   Inodes  IUsed IFree  IUse%  Mounted on 
/dev/vzfs  750.000 214.244 535.756 29%   /
 none  1.048.576  154 1.048.422      1% /dev

So:Jetzt ist erst einmal Platz für einige hunderttausende Blogeinträge und Bilder frei! Die ganze Prozedur muss man nur regelmäßig wiederholen, am Besten monatlich!

Kommentare sind geschlossen.