Moderne Linux-Dateisysteme nutzen sogenannte Inodes, um Dateien zu organisieren. Um es einfach zu erklären – eine Inode hat eine Zahl, diese gibt es auf einem Dateisystem nur einmal – jede Inode gibt es also nur einmal. Mit Inodes findet das Dateisystem, einfach gesagt, Dateien einfach schneller. Inodes werden unter folgenden Dateisystemen genutzt: ext2, ext3 und ext4.
Jetzt gibt es aber ein kleines Problem – ein Dateisystem, also eine Partition verfügt je nach Größe nur über eine bestimmte Anzahl von Inodes. Grundlegend sollte dies für normal genutzte Systeme kein Problem sein, es sollte also genug freie Inodes geben. Hat man jedoch auf einem Dateisystem extrem viele kleine Dateien, kann es schon passieren, dass es keine freie Inodes mehr gibt – im schlechtesten Fall kann es passieren, dass einfach gar nichts mehr geht. Solche Probleme könnte es vor allem auf Server geben, auf denen eben viele kleine Dateien vorhanden sind.
Nun, wollen wir uns ganz einfach einmal ansehen, wie viele Inodes auf dem System noch frei sind:
df -ih
In der ausgegebenen Tabelle finden wir zu Beginn das Dateisystem, es folgten unter Inodes die auf dem Dateisystem möglichen Inodes – in diesem Fall unter /dev/sda1 59 Millionen. Unter IBenutzt sehen wir die aktuell genutzten Inodes – also 114.000, in meinem Fall hätte ich noch Platz ohne Ende. Unter IFrei zeigen sich die noch freien Inodes und unter IUse die belegten Inodes in Prozent.
Schlecht an der Geschichte – wir können auf einem Dateisystem keine zusätzlichen Inodes hinzufügen, wir können nur belegte Inodes freigeben. Einfach gesagt – wir müssen Dateien löschen, im besten Fall natürlich viele kleine. Dazu sehen wir uns einfach an, wo, wie viele Dateien liegen – und wo die meisten Dateien liegen. Dies kann natürlich etwas mühselig sein – also sollte ein wenig Geduld da sein. Für manche Systemverzeichnisse ist der Befehl natürlich mit administrativen Rechten auszuführen – in diesem Fall schaue ich mir an, wie viele Dateien unter meinem Home-Verzeichnis liegen:
for i in /home/robertg; do echo $i; find $i | wc -l | sort ; done
In meinem Fall liegen hier 130928 Dateien / Verzeichnisse. Jetzt kann man weitergehen und im Befehl weitere Unterverzeichnisse angeben, eben so herausfinden, wo die meisten Dateien liegen.
Es muss also nicht der Speicherplatz auf der Festplatte sein, wenn nichts mehr richtig funktioniert – es können auch zu viele belegte Inodes sein.
3 Reaktionen
beim Anlegen eines Filessystems können die Anzahl I-Nodes mitgegeben werden (siehe mkfs -i ) .
Normalerweise kommt man kaum mehr in Verlegenheit, dass I-Nodes ausgehen. Eine
4TB Platte (bei einer Blockgröße von 4K) liefert Platz für rund 240.000.000 Einträge.
Selbst bei 512 Byte Blockgröße ist das Verhältnis blöcke zu Inodes ca. 1:32 was eine durchschnittliche Dateigröße von 16 KB ergibt.
Mit einem SAP-Server kann es da schon noch lustig werden, oder diverse Security-Software, mit der andere Systeme im Netzwerk überwacht werden. Hab da schon ganz lustige Erfahrungen gemacht
Ich kenne das Problem mit den alten News-Servern. Dort wurde die Nachrichten als Text-Dateien abgelegt, mit wenigen Zeichen Inhalt. Wenn auf einer Platte nur solche „Kurz-Nachrichten“ vorhanden waren, gingen die I-Nodes aus.