Inodes
Vorwort
In diesem Artikel beschreiben wir kurz, was ein Inode ist, wo diese zur Anwendung kommen und nennen ein Problem-Beispiel, das häufig vorkommt, sowie den dazugehörigen Lösungsansatz.
Was ist ein Inode?
Inodes stellen eine zur Dateisystemverwaltung genutzte Datenstruktur dar und besitzen eine eineindeutige Nummer zur Identifizierung. Dabei existiert zu jedem Namenseintrag in einer Verzeichnisstruktur unabhängig vom Dateityp ein Inode und enthält die entsprechenden Metadaten, sowie einen entsprechenden Verweis auf diese.
Als Metadaten werden in diesem Zusammenhang z. B. Informationen zum Dateityp, der UID und GID des Besitzers sowie der Gruppe, den gesetzten Zugriffsrechte, der Dateigröße, ein Verweis auf die Datenträger-Sektoren einer Datei (die Größe dieser Sektoren ist abhängig vom Dateisystem und der dazugehörigen Formatierung) usw. bezeichnet.
Anwendungsbereich von Inodes
Zum Einsatz kommen diese bei allen unixoiden Betriebssystem wie Linux (und entsprechende Derivate) oder macOS. Bei den Dateisystemen ext2 | ext 3 | ext4
werden diese in Form von Listen/Tabellen als veränderbare Datei-Header direkt bei der Systeminstallation vollständig und unveränderlich angelegt.
Problem-Beispiel
Sie verwenden ein CMS für Ihren Webauftritt mit diversen installierten Plugins, z. B. zum Caching der Webinhalte.
Plötzlich ist Ihre Webseite nicht mehr erreichbar und Sie erhalten eine Fehlermeldung, die suggeriert, dass die Festplatte keinen freien Speicherplatz mehr hat.
Analyse
Daraufhin verbinden Sie sich mit Ihrem Server z. B. via SSH und prüfen folgendermaßen die Festplattenbelegung:
Verbindungsaufbau:
ssh root@sXXXXX.creoline-demo.tld
Prüfung Festplattenbelegung:
df -h
Ausgabe:
Dateisystem Größe Benutzt Verf. Verw% Eingehängt auf
udev 1,9G 0 1,9G 0% /dev
tmpfs 392M 532K 391M 1% /run
/dev/sda2 20G 8,5G 11G 46% /
tmpfs 2,0G 1,2M 2,0G 1% /dev/shm
tmpfs 5,0M 24K 5,0M 1% /run/lock
tmpfs 392M 0 392M 0% /run/user/0
Laut der Ausgabe stehen Ihnen noch mehr als 50 % der nutzbaren Festplattenkapazität zur Verfügung, die Festplatte wirkt also beschreibbar. Allerdings ist es nicht möglich, z. B. neue Dateien anzulegen.
Hier sollten Sie prüfen, ob noch genügend Inodes zur Verfügung stehen:
df -i
Ausgabe:
Dateisystem Inodes IBenutzt IFrei IUse% Eingehängt auf
udev 496122 362 495760 1% /dev
tmpfs 500931 614 500317 1% /run
/dev/sda2 1310720 1310720 0 100% /
tmpfs 500931 2 500929 1% /dev/shm
tmpfs 500931 34 500897 1% /run/lock
tmpfs 100186 20 100166 1% /run/user/0
Hier können Sie erkennen, dass die Systempartition, die das Wurzelverzeichnis beinhaltet, alle verfügbaren Inodes in Verwendung hat.
Ursache
In diesem Fallbeispiel hat das Cache-Plugin Unmengen kleiner Dateien generiert und wurden nicht automatisch bereinigt, nachdem diese nicht mehr benötigt wurden.
Da eine Datei unabhängig Ihrer Größe immer ein Inode zugewiesen bekommt, kann durch unzählige kleine Dateien der zur Verfügung stehende Pool an Inodes schneller aufgebraucht sein, als die Anzahl der Sektoren, aus denen sich am Ende der belegte Festplattenspeicher errechnet.
Abhilfe schaffen
Sie können sich die Inode-Belegung pro Verzeichnis wie folgt anzeigen lassen:
du -h --inodes --max-depth=1 /var/www/vhosts/
Ausgabe:
36 /var/www/vhosts/system
5 /var/www/vhosts/default
1300000 /var/www/vhosts/sXXXXX.creoline-demo.tld
101 /var/www/vhosts/chroot
9 /var/www/vhosts/.skel
1300000 /var/www/vhosts/
Wechseln Sie als Nächstes in das Verzeichnis /var/www/vhosts/sXXXXX.creoline-demo.tld
und wiederholen Sie die vorherige Abfrage:
du -h --inodes --max-depth=1 /var/www/vhosts/sXXXXX.creoline-demo.tld
Diesen Vorgang wiederholen Sie, bis Sie das Verzeichnis gefunden haben, in dem die Inodes durch kleine Dateien gebunden werden.
Sobald Sie dieses gefunden haben, navigieren Sie mit cd
in das entsprechende Verzeichnis:
cd /var/www/vhosts/sXXXXX.creoline-demo.tld/httpdocs/demo-cms/plugins/XYZ/beispielcache/
Löschen Sie den Inhalt mit folgendem Befehl:
rm -rf *
bzw. rm -rf /var/www/vhosts/sXXXXX.creoline-demo.tld/httpdocs/demo-cms/plugins/XYZ/beispielcache/*
Stellen Sie vor Verwendung des Befehls rm -rf
unbedingt sicher, dass Sie sich im richtigen Verzeichnis befinden bzw. dass Sie den korrekten absoluten Pfad angegeben haben, um ungewolltes Löschen von Daten zu vermeiden.
Sobald dieser Vorgang abgeschlossen ist, prüfen Sie erneuert die Inode-Verwendung durch das CMS:
root@sXXXXX:/var/www/vhosts# du -h --inodes --max-depth=1 /var/www/vhosts/
36 /var/www/vhosts/system
5 /var/www/vhosts/default
3,3K /var/www/vhosts/sXXXXX.creoline-demo.tld
101 /var/www/vhosts/chroot
9 /var/www/vhosts/.skel
3,5K /var/www/vhosts/
Inode-Belegung Systemweit:
root@sXXXXX:/# df -i
Dateisystem Inodes IBenutzt IFrei IUse% Eingehängt auf
udev 496122 362 495760 1% /dev
tmpfs 500931 614 500317 1% /run
/dev/sda2 1310720 190768 1119952 15% /
tmpfs 500931 2 500929 1% /dev/shm
tmpfs 500931 34 500897 1% /run/lock
tmpfs 100186 20 100166 1% /run/user/0