Gerätedateien sind keine Dateien an sich. Sie sind eine E / A-Schnittstelle zur Verwendung der Geräte in Unix-ähnlichen Betriebssystemen. Sie verwenden keinen Speicherplatz auf der Festplatte, verwenden jedoch weiterhin einen Inode, wie vom stat
Befehl gemeldet :
$ stat /dev/sda
File: /dev/sda
Size: 0 Blocks: 0 IO Block: 4096 block special file
Device: 6h/6d Inode: 14628 Links: 1 Device type: 8,0
Verwenden Gerätedateien physische Inodes im Dateisystem und warum benötigen sie diese überhaupt?
filesystems
devices
inode
stat
Direprobs
quelle
quelle
Antworten:
Die kurze Antwort lautet, dass dies nur dann der Fall ist, wenn Sie über ein physisches Dateisystem verfügen
/dev
(und wenn Sie eine moderne Linux-Distribution verwenden, tun Sie dies wahrscheinlich nicht).Die lange Antwort lautet:
Dies alles geht auf die ursprüngliche UNIX-Philosophie zurück, dass alles eine Datei ist. Diese Philosophie ist Teil dessen, was UNIX so vielseitig gemacht hat, da Sie direkt mit Geräten aus dem Benutzerbereich interagieren können, ohne dass in Ihrer Anwendung spezieller Code erforderlich ist, um direkt mit der physischen Hardware zu kommunizieren.
Ursprünglich
/dev
war es nur ein weiteres Verzeichnis mit einem bekannten Namen, in dem Sie Ihre Gerätedateien ablegen. Einige UNIX-Systeme verfolgen diesen Ansatz immer noch (ich glaube, OpenBSD tut dies immer noch), und Sie können normalerweise feststellen, ob ein System so ist, da es viele Gerätedateien für Geräte enthält, über die das System nicht verfügt (z. B. Dateien für alle mögliche Partition auf jeder möglichen Festplatte). Dies spart Speicherplatz und Zeit beim Booten auf Kosten der Verwendung von etwas mehr Speicherplatz, was für frühe Systeme ein guter Kompromiss war, da sie im Allgemeinen sehr speicherbeschränkt und nicht sehr schnell waren. Dies wird allgemein als statisch bezeichnet/dev
.Auf modernen Linux-Systemen (und ich glaube auch an FreeBSD und möglicherweise neueren Versionen von Solaris)
/dev
handelt es sich um ein temporäres In-Memory-Dateisystem, das vom Kernel gefüllt wird (oder udev, wenn Sie Systemd verwenden, weil sie dem Kernel nicht vertrauen, fast alles zu tun). . Dies spart Speicherplatz zum Preis von etwas Speicher (normalerweise weniger als ein paar MB) und einen sehr geringen Verarbeitungsaufwand. Es hat auch eine Reihe anderer Vorteile, wobei einer der größten darin besteht, dass es einfacher ist, Hot-Plug-Hardware zu erkennen. Dies wird allgemein als dynamisch bezeichnet/dev
.In beiden Fällen wird auf Geräteknoten jedoch über die reguläre VFS-Schicht zugegriffen, was per Definition bedeutet, dass sie über einen Inode verfügen müssen (auch wenn es sich um einen virtuellen handelt, der nur vorhanden ist, damit solche Dinge wie vorgesehen
stat()
funktionieren. Aus praktischer Sicht Dies hat keine Auswirkungen auf Systeme, die eine Dynamik verwenden,/dev
da sie die Inodes nur im Speicher speichern oder nach Bedarf generieren, und nahezu keine Auswirkungen, wenn sie/dev
statisch sind, da Inodes nahezu keinen Speicherplatz auf der Festplatte belegen und die meisten Dateisysteme entweder keine Obergrenze haben sie oder Vorsorge weit mehr als irgendjemand jemals brauchen wird.quelle
Gerätedateien haben ebenfalls Berechtigungen, die in einem Inode gespeichert sind.
quelle
Verzeichnisse sind einfach eine Zuordnung von Dateinamen zu Inodes. Alles, was sich auf den Namen bezieht (eine Datei, ein Symlink, ein Gerät, ein FIFO, ein Socket), muss sich im Inode befinden.
Informationen zum Gerät werden im Inode gespeichert. Dort befinden sich die Haupt- und Nebengerätenummern sowie Berechtigungen, Zeitstempel usw. Dort wird das Typfeld gespeichert, das besagt, dass es sich eher um ein Block- oder Zeichengerät als um eine reguläre Datei handelt.
Der Inode für Geräte verwendet einfach nicht die Felder, die die Blockzuordnung der Datei enthalten.
quelle
Ohne Inode hätten Sie nur den Dateinamen, um alle Informationen über das betreffende Gerät zu speichern. Dies bedeutet, dass "nette" Gerätenamen
/dev/sda
nicht in Frage kommen: Sie benötigen einen Namen, der an einen bestimmten Treiber gebunden sein kann, wie z/dev/ohci/sda
.Noch wichtiger ist , alle Werkzeuge , die auf Inodes verlassen (wie
stat
,ls
und so weiter) müßten geändert werden , um zu behandeln Wege unter/dev
in besonderer Weise. Das wäre eine unerschwinglich große Menge an Arbeit ohne offensichtlichen Nutzen im Vergleich zum gegenwärtigen Stand der Dinge.quelle