Open Source im professionellen Einsatz

Devfs: Konzepte, Strukturen und die Anwendung in der Praxis

Gerätepark-Platz

Devfs bringt mit einem virtuellen Directory-Baum Ordnung und Übersicht ins chaotische »/dev«-Verzeichnis mit seinen vielen statischen Einträgen. Gentoo-Linux und Madrake arbeiten schon damit, die anderen kann man nachrüsten.

Am Anfang war die Datei. Für Unix-Systeme und Linux ist sie der Weg, um Informationen zu speichern und zu lesen. Auch der Zugriff auf die Hardware des Rechners wird über spezielle Dateien abgewickelt, die Named Pipes. Sie haben traditionell ihre Heimat im Verzeichnis »/dev« auf der Root-Partition. Mit der Menge der Anwendungsgebiete von Linux stiegt auch die Zahl der Geräteknoten im »/dev«-Verzeichnis rasant an, die das Skript »/sbin/MKDEV« statisch anlegt. Moderne Linux-Distributionen bringen es auf rund 2000 Einträge, die einen beachtlichen Teil des Root-Dateisystems in Anspruch nehmen.

Und das passiert nur auf Verdacht: Denn sieht man sich das »/dev«-Verzeichnis eines Linux-Rechners an, so ist leicht erkennbar, dass nur ein Bruchteil der angelegten Geräteknoten tatsächlich zum Betrieb der vorhandenen Komponenten benötigt wird. Welcher PC-Benutzer hat schon eine Atari-Maus, 20 Festplatten und zugleich ein RAID?

Dieser Wust verwaltet sich mehr schlecht als recht über ein numerisches Schema aus einer Major- und einer Minor-Nummer. Es schlüsselt den jeweiligen Hardwaretreiber (Major) und die jeweilige Instanz (Minors) auf, zum Beispiel die erste von mehreren Festplatten. Die Zukunft bringt für den plattenbasierten »/dev«-Mechanismus wohl weitere Bedrängnis: Es ist absehbar, dass Komplexität und Anzahl der unterstützten Hardware stetig zunehmen, statt einer Vereinheitlichung entgegenzustreben.

Versuche mit USB & Co.

Die letzten Jahre brachten für einige Subsysteme des Kernels bruchstückhafte Lösungen, die versuchen, die für ihren Teilbereich nachteilige Statik des bestehenden Systems zu überwinden. Es handelt sich dabei um die Subsysteme, die dynamisch wechselnde Endgerätekonfigurationen verwalten, zum Beispiel USB, SCSI und das zum Öffnen von Benutzersitzungen benötigten Pseudoterminal (Devptfs).

Einen Ausweg aus dem Dilemma weist das Devfs (Device Filesystem), das seit 2.3.46 im Linux-Kernel serienmäßg ist. Wie der Name bereits ausdrückt, ersetzt ein Dateisystem die Funktionalität des »/dev«-Verzeichnisses. Dieser Beitrag zeigt, mit welchen Mitteln Devfs als erster Ansatz den wachsenden Anforderungen gerecht zu werden versucht und welche Vorteile damit verbunden sind. Außerdem werden jene Funktionen in den Treibern vorgestellt, die das dynamische Registrieren von Geräten im Devfs unterstützen.

Eingeordnet

Linux unterstützt bekanntermaßen eine große Bandbreite an Dateisystemen, die das VFS (Virtual File System) dem Kernel gegenüber auf einen Satz von primitiven Datenstrukturen abbildet. Hierzu gehören zum Beispiel Superblocks, Inodes, Dateien und Verzeichniseinträge (siehe Kasten "Das allgemeine Dateimodell").

Das allgemeine Dateimodell

Auf folgende allgemeine Datenstrukturen bildet das jeweilige Dateisystem seine Primitive im Linux-VFS intern ab:

  • Superblocks enthalten Informationen zur Verwaltung von eingehängten Dateisystemen, etwa den Typ und ob auf das Dateisystem seit seinem Einhängen geschrieben worden ist.
  • Inodes enthalten Informationen über einzelne Dateien. Die Inode-Nummer dient intern zur Identifizierung der Datei.
  • Datei-Objekte (Files) enthalten Informationen über die Interaktionen zwischen Prozessen und Dateien. Datei-Objekte existieren im Kernelspeicher nur, solange ein Prozess auf eine Datei zugreift.
  • Verzeichniseinträge (Dentry) verbinden Dateien und Verzeichnisse, indem sie die Teile des Zugriffspfads repräsentieren. Für sie existiert ein spezieller Puffer, der Dentry Cache.

Devfs gehört neben Procfs und Autofs zur Klasse der virtuellen Dateisysteme: Sie haben keine permanente Repräsentation auf einem Datenträger, der Kernel legt die Einträge dynamisch zur Laufzeit im Hauptspeicher an und vernichtet sie auch wieder. Daher existieren zu einem Zeitpunkt jeweils nur die relevanten Einträge - beim Devfs sind das die gerade gebrauchten Geräte.

Dies vermindert wirkungsvoll die exorbitante Menge der Einträge des »/dev«-Mechanismus. Ein Effekt des Devfs ist, dass das Suchen nach Geräten schneller geht, wenn zum Beispiel ein Brennprogramm wie KonCD alle vorhandenen CD-ROM-Laufwerke auflisten soll.

Abbildung 1: Das neue Identifizierungsschema verwendet ganze Namen statt Nummern und einstelliger Namen. Die Baumstruktur bildet die Hardware-Gegebenheiten gut ab.

Abbildung 1: Das neue Identifizierungsschema verwendet ganze Namen statt Nummern und einstelliger Namen. Die Baumstruktur bildet die Hardware-Gegebenheiten gut ab.

Diesen Artikel als PDF kaufen

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook