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.
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!