Gentoo Logo

Haftungsausschluss: Dieses Dokument ist nicht gültig und wird nicht mehr gepflegt.


Device File System Anleitung

Inhalt:

1.  Was ist das devfs?

Die (guten?) alten Zeiten

Warnung: devfs ist veraltet und wurde aus dem stabilen 2.6 Kernelbaum mit dem Release 2.6.13 entfernt. Benutzer von 2.6 Kernelen wird hiermit empfohlen auf udev zu wechseln. Für weitere Informationen zu udev, lesen Sie bitte den Gentoo udev Leitfaden..

Traditionelle Linux Distributionen bieten ihren Benutzern einen abstrakten Pfad zu den Geräten. Das ist /dev. In diesem Verzeichnis findet der Benutzer sogenannte Device Nodes. Das sind spezielle Dateien, die das entsprechende Gerät repräsentieren. Zum Beispiel repräsentiert /dev/hda das erste IDE Gerät im System. Durch das Bereitstellen von Gerätedateien kann der Benutzer Programme erstellen, die mit der Hardware wie mit einer regulären Datei interagieren, anstatt spezielle APIs zu benutzen.

Die Gerätedateien sind in 2 Gruppen unterteilt. Die erste Gruppe, Character Devices genannt, besteht aus Hardware, deren Schreib- und Lesevorgänge nicht gepuffert sind. Die zweite Gruppe nennt sich Block Devices und enthält natürlich die Hardware, deren Schreib- und Lesevorgänge gepuffert sind. Beide Gerätearten können zeichenweise oder in Blöcken ausgelesen werden. Die Namensgebung kann deswegen verwirrend klingen und ist in der Tat falsch.

Wenn Sie einen Blick auf eine Gerätedatei werfen, werden Sie etwas ähnliches wie das hier finden:

Befehlsauflistung 1.1: Die Informationen über eine Gerätedatei abfragen

# ls -l /dev/hda
brw-rw----    1 root     disk       3,   0 Jul  5  2000 /dev/hda

In dem vorangehenden Beispiel sehen wir, dass /dev/hda ein Block Device ist. Wichtiger sind jedoch die Zahlen, die ihm zugewiesen sind: 3, 0. Dieses Paar wird Major-Minor Paar genannt. Es wird vom Kernel dazu verwendet eine Gerätedatei dem echten Gerät zuzuweisen. Die erste Zahl verweißt auf ein bestimtes Gerät, die Zweite verweißt auf ein dem Ersten untergeordnetes Gerät. Das ist verwirrend? Ist es nicht.

Hier zwei Beispiele: /dev/hda4 und /dev/tty5. Die erste Gerätedatei verweißt auf die vierte Partition des ersten IDE Geräts. Ihr Major-Minor Paar ist 3, 4. Mit anderen Worten, die erste Zahl verweißt auf das Gerät und die zweite auf die entsprechende Partition. Die zweite Gerätedatei hat 4, 5 als Major-Minor Paar. In diesem Fall verweist die erste Zahl auf den Terminal Treiber und die Zweite auf die Terminal Nummer (hier das fünfte Terminal).

Probleme

Wenn Sie in solch einem /dev Verzeichnis einen schnellen Check machen werden Sie bemerken, dass nicht nur alle ihre Geräte, sondern alle möglichen denkbaren Geräte aufgeführt sind. Mit anderen Worten, Sie haben Gerätedateien für Geräte die Sie nicht haben. Solch eine Gruppe von Gerätedateien zu pflegen ist, gelinde gesagt, lästig. Stellen Sie sich vor, Sie müssen die Berechtigungen aller Gerätedateien ändern, welche auf ein Gerät in ihrem System verweisen, aber den Rest der Gerätedateien lassen wie er ist.

Wenn Sie neue Hardware in ihr System integrieren und diese vorher noch keine Gerätedatei hatte, werden Sie eine erstellen müssen. Erfahrene Benutzer wissen, dass diese Aufgabe mit ./MAKEDEV im /dev Verzeichnis erledigt werden kann. Aber wissen Sie sofort welche Gerätedatei Sie erstellen müssen?

Wenn Sie Programme laufen haben die Hardware benutzen die Gerätedateien verwendet, können Sie ihre Root Partition nicht ohne Schreibzugriff mounten. Selbst wenn es keinen anderen Grund gibt sie mit Schreibzugriff gemountet zu haben. Sie können /dev nicht auf einer separaten Partition haben, weil mount /dev benötigt, um Partitionen zu mounten.

Lösungen

Wie Sie sich sicher vorstellen können, haben die Kernel Hacker mehrere Wege gefunden die vorher genannten Probleme zu lösen. Jedoch hatten viele von ihnen andere Lösungen, die in diesem Dokument beschrieben sind. Wir werden diese Implementierungen nicht beachten, sondern uns auf die Eine konzentrieren, die es in die offiziellen Kernel Sourcen geschafft hat: devfs.

devfs als Sieger in allen Klassen?

devfs bewältigt alle angeführten Probleme. Es stellt dem Benutzer nur vorhandene Geräte zur Verfügung, erstellt neue Gerätedateien wenn neue Geräte gefunden werden und ermöglicht es, die Root Partition ohne Schreibzugriff zu mounten. Zusätzlich beseitigt devfs noch mehr Probleme, die vorher nicht berücksichtigt wurden, weil sie für den Benutzer weniger interessant sind...

Zum Beispiel müssen Sie sich mit devfs keine Gedanken über Major-Minor Paare machen. Major-Minor Paare werden noch unterstützt (der Abwärtskompatibilität halber), aber sie werden nicht mehr gebraucht. Dies ermöglicht es Linux noch mehr Geräte zu unterstützen, seitdem es keine Grenzen mehr gibt (Zahlen haben immer Grenzen :)).

devfs kommt mit seinen eigenen Problemen, für den Anwender sind diese Probleme nicht wirklich sichtbar, aber für Kernel Maintainer sind diese Probleme groß genug, um devfs als obsolet zu kennzeichnen.udev ist der Nachfolger, welcher von Gentoo unterstützt wird und seit der Version 2005.0 der Standard auf den meisten Architekturen ist, wenn ein 2.6 Kernel verwendet wird.

Für weitere Informationen, warum devfs überholt gekennzeichnet ist lesen Sie bitte die udev FAQ und das udev versus devfs Dokument.

2.  Navigieren in der /dev/ Verzeichnisstruktur

Verzeichnisse

Als erstes werden Sie bemerken, dass devfs Verzeichnisse benutzt um die Geräte zu gruppieren. Diese Vorgehensweise verbessert die Lesbarkeit, weil sich alle verwandten Geräte in einem Unterverzeichnis befinden.

Zum Beispiel befinden sich alle IDE Geräte im Unterverzeichnis /dev/ide/ und alle SCSI Geräte in /dev/scsi/. SCSI und IDE Festplatten werden gleich behandelt, d. h. sie haben die selbe Verzeichnisstruktur im jeweiligen Unterverzeichnis.

IDE und SCSI sind an einem IDE/SCSI Controller (Onboard oder eine extra PCI Karte) angeschlossen, den man host nennt. Jeder Controller kann mehrere Kanäle haben, die Bus gennant werden. In jedem Kanal können Sie mehrere IDs haben. Die ID, welche Target gennant wird, kennzeichnet eine Festplatte. Manche SCSI Geräte haben mehrere luns (Logical Unit Numbers). Zum Beispiel Geräte wie Hi-End Streamer, die mehrere Bänder auf einmal verwalten. Meistens gibt es aber nur eine lun, nämlich lun0/.

Wo wir vorher /dev/hda4 benutzt haben, haben wir nun /dev/ide/host0/bus0/target0/lun0/part4. Das ist viel einfacher... Nein, streiten Sie nicht mit mir... es ist einfacher... ach, wie auch immer! :)

Notiz: Sie können für Festplatten auch Unix ähnliche Namen für die Gerätedateien verwenden, wie zum Beispiel c0b0t0u0p2. Sie finden sich in /dev/ide/hd, /dev/scsi/hd, usw.

Um Ihnen eine Vorstellung zu verschaffen, hier die Liste der Verzeichnisse in /dev/ auf meinem Laptop:

Befehlsauflistung 2.1: Verzeichnisse in /dev

cdroms/     cpu/        discs/          floppy/
ide/        input/      loop/           misc/
netlink/    printers/   pts/            pty/
scsi/       sg/         shm/            sound/
sr/         usb/        vc/             vcc/

Abwärtskompatibilität bei der Verwendung von devfs

Mit diesem Schema zu arbeiten klingt gut, aber einige Programme nutzen das alte Schema. Um sicherzustellen, das alles im System intakt bleibt, wurde devfsd geschrieben. Dieser Daemon erstellt Symlinks mit den alten Namen, die auf die neuen Gerätedateien zeigen.

Befehlsauflistung 2.2: Erstellte Symlinks

$ ls -l /dev/hda4
lr-xr-xr-x    1 root     root           33 Aug 25 12:08 /dev/hda4 -> ide/host0/bus0/target0/lun0/part4

Mit devfsd können Sie auch Berechtigungen setzen, neue Gerätedateien erstellen, Aktionen definieren, usw. Das alles wird im nächsten Kapitel erklärt.

3.  Administrieren von /dev/

devfsd neustarten

Wenn Sie etwas in /etc/devfsd.conf ändern und wollen, dass Ihre Änderungen auf das System übertragen werden, müssen Sie nicht neustarten. Je nachdem was Sie wollen, können Sie eines der folgenden Signale nutzen:

SIGHUP bringt den devfsd dazu, die Konfigurationsdatei neu zu lesen, die mehrfach genutzten Objektdateien neu zu laden und die Aktionen zum Registrieren der Gerätedateien auszuführen.

SIGUSR1 bewirkt das Gleiche, aber es werden keine Registrierungen vorgenommen.

Um solch ein Signal zu senden, benutzen Sie kill oder killall:

Befehlsauflistung 3.1: Das SIGHUP Signal an den devfsd senden

# kill -s SIGHUP `pid von devfsd`
oder
# killall -s SIGHUP devfsd

Symlinks für die Abwärtskompatibilität entfernen

Warnung: Zurzeit ist Gentoo ohne diese Symlinks nicht funktionsfähig.

Wenn Sie die Symlinks, die /dev/ vollstopfen, aus ihrem Gentoo System entfernen wollen (sie sind standardmäßig aktiviert), editieren Sie /etc/devfsd.conf und entfernen Sie die folgenden zwei Zeilen:

Befehlsauflistung 3.2: Einträge zur Abwärtskompatibilität in /etc/devfsd.conf

# Kommentieren Sie die folgenden zwei Zeilen aus um die Symlinks zu entfernen
REGISTER        .*  MKOLDCOMPAT
UNREGISTER      .*  RMOLDCOMPAT

Um diese Änderungen zu übernehmen, müssen Sie ihr System neustarten.

Deaktivieren der Autoload Funktionalität

Wenn Sie ein Modul laden erstellt devfs automatisch die zugehörigen Gerätedateien. Wenn Sie das nicht wollen, entfernen sie die folgende Zeile aus ihrer /etc/devfsd.conf:

Befehlsauflistung 3.3: /etc/devfsd.conf, Autoload Funktionalität

LOOKUP      .*  MODLOAD

4.  Berechtigungen

Setzen/Ändern von Berechtigungen mit devfsd

Wichtig: Diese Instruktionen sind gültig so lange pam_console in /etc/pam.d/system-auth deaktiviert ist. Wenn Sie pam_console dort aktiviert haben, hat PAM das letzte Wort was Berechtigungen betrifft. Sie sollten pam_console aber eh nicht verwenden, da es aus Portage entfernt wurde.

Wenn Sie die Berechtigungen mittels /etc/devfsd.conf setzen wollen, nutzen Sie bitte die Syntax aus dem folgendem Beispiel:

Befehlsauflistung 4.1: Berechtigungen in /etc/devfsd.conf

REGISTER    ^cdroms/.*  PERMISSIONS root.cdrom 0660

Im zweiten Feld wird die Gerätegruppe angegeben, beginnend in /dev. Hier werden reguläre Ausdrücke verwendet, Sie können also mehrere Gerätedateien auf einmal auswählen.

Im vierten Feld wird der Owner (mit Gruppe) angegeben und das fünfte Feld enthält die Berechtigungen für die Gerätedatei.

Berechtigungen von Hand setzen und mit devfsd speichern

Hier die normale Vorgehensweise bei Gentoo-Installationen: Wenn Sie mit chown (CHangeOWNer) und chmod (CHange MODe) einige Gerätedateien verändern, speichert devfsd die Informationen damit diese über das Neustarten hinweg erhalten bleiben. Das passiert weil /etc/devfsd.conf folgendes enthält:

Befehlsauflistung 4.2: /etc/devfsd.conf zum Speichern von Berechtigungen

REGISTER        ^pt[sy]/.*   IGNORE
CHANGE          ^pt[sy]/.*   IGNORE
CREATE          ^pt[sy]/.*   IGNORE
DELETE          ^pt[sy]      IGNORE
REGISTER        ^log         IGNORE
CHANGE          ^log         IGNORE
CREATE          ^log         IGNORE
DELETE          ^log         IGNORE
REGISTER        .*           COPY    /lib/dev-state/$devname $devpath
CHANGE          .*           COPY    $devpath /lib/dev-state/$devname
CREATE          .*           COPY    $devpath /lib/dev-state/$devname
DELETE          .*           CFUNCTION GLOBAL unlink
/lib/dev-state/$devname
RESTORE         /lib/dev-state

Genauer erklärt, geänderte Gerätedateien werden sowie die Änderung erfolgt nach /lib/dev-state kopiert und beim Hochfahren wieder nach /dev zurückkopiert.

Eine andere Möglichkeit besteht darin während des Bootvorgangs /lib/dev-state nach /dev zu mounten. Allerdings müssen Sie sicherstellen, dass devfs nicht automatisch beim Starten gemountet wird (Sie müssen dazu ihren Kernel neu kompilieren) und das /dev/console existiert. Dann platzieren Sie irgendwo am Anfang ihrer Startskripte folgendes:

Befehlsauflistung 4.3: Mounten von /lib/dev-state nach /dev

mount --bind /dev /lib/dev-state
mount -t devfs none /dev
devfsd /dev

5.  Quellen

Für mehr Informationen über devfs, hier noch ein paar Quellen:

Die devfsd.conf Manpage erläutert die Syntax von /etc/devfsd.conf. Um sie anzusehen führen Sie man devfsd.conf aus.

Die devfs FAQ erklärt alles rund um devfs. Sie enthält auch Informationen über die interne devfs Struktur und wie Treiber devfs unterstützen können.

Im LinuxJournal ist ein informativer Artikel über devfs zum Managen und Administrieren.

Daniel Robbins schrieb einige Artikel für IBMs DeveloperWorks über erweiterte Dateisysteme. Drei behandeln devfs:



Drucken

Seite aktualisiert 15. November 2007

Die Originalversion dieser Übersetzung wird nicht länger gepflegt

Zusammenfassung: In diesem Tutorial wird erklärt, was das devfs ist und wie man mit ihm arbeitet.

Sven Vermeulen
Autor

Seemant Kulleen
Korrektor

Fabian Stietzel
Übersetzer

Jan Hendrik Grahl
Korrektor

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.