Verwalten von Systemgeräten mit dem udev Device Manager
Überblick darüber, wie der udev Device Manager Hardware erkennt, Geräteknoten verwaltet und in systemd unter Oracle Linux integriert.
Der udev device manager wird als systemd service ausgeführt, um software mit vorhersehbarem und verwaltetem zugriff auf systemgeräte zu bieten, die vom kernel bereitgestellt werden. In der Regel verwaltet udev die Berechtigungen von Geräteknoten und erstellt symbolische Links im Verzeichnis /dev/, um Gerätenamen vorhersehbarer zu machen und Netzwerkschnittstellen leichter zu identifizieren oder umzubenennen.
Der udev-Gerätemanager erstellt oder entfernt Geräteknotendateien beim Booten dynamisch. Beim Erstellen eines Geräteknotens liest udev das Verzeichnis /sys des Geräts für Attribute wie Label, Seriennummer und Busgerätenummer.
udev kann persistente Gerätenamen verwenden, um eine konsistente Benennung von Geräten nach einem Neustart zu gewährleisten, unabhängig von ihrer Erkennungsreihenfolge. Persistente Gerätenamen sind besonders wichtig bei der Verwendung externer Speichergeräte.
udev verarbeitet auch Gerätetreiberereignisse, die vom Kernel ausgelöst werden, und verwendet die in seiner Konfiguration definierten Regeln, um bestimmte Aktionen auszulösen. Wenn beispielsweise ein USB-Speichergerät mit dem System verbunden ist, benachrichtigt der Kernel udev und udev den entsprechenden Handler, damit das Gerät gemountet werden kann. Wenn ein Netzwerkkabel mit einer Netzwerkschnittstellenkarte verbunden ist, benachrichtigt der Kernel udev über die Statusänderung und udev benachrichtigt NetworkManager, damit die entsprechende Aktion für die Verbindung mit dem Netzwerk ausgeführt werden kann.
Die Konfigurationsdatei für udev ist /etc/udev/udev.conf, in der Sie die Loggingpriorität udev_log definieren können, die auf err, info und debug gesetzt werden kann. Der Standardwert ist err. Die weitere Konfiguration der von udev verwendeten Regeln wird in einzelnen Laderegeln in /etc/udev/rules.d/ behandelt.
Weitere Informationen finden Sie im Handbuch udev(7).
udev ist eine Komponente von systemd. Weitere Informationen finden Sie in den Release-spezifischen Systemd Guides.
Weitere Informationen zu systemd-Konzepten, die von udev in Oracle Linux-Releases verwendet werden, finden Sie unter System mit systemd verwalten.
Weitere Informationen zu den virtuellen Kernel-Dateisystemen und Gerätetreibermodulen finden Sie in den folgenden Release-spezifischen Ressourcen.
Weitere Informationen zu den virtuellen Kernel-Dateisystemen und Gerätetreibermodulen für alle Oracle Linux-Releases finden Sie unter Kernels verwalten und Systemstart unter Oracle Linux.
Informationen zu Gerätedateien
Erläutert, wie Oracle Linux Hardware als Gerätedateien darstellt, einschließlich Block-, Zeichen- und Pseudogeräten.
Das Verzeichnis /dev enthält Gerätedateien oder Geräteknoten, die Zugriff auf Peripheriegeräte wie Festplatten, auf Ressourcen auf Peripheriegeräten, wie Festplattenpartitionen, und auf Pseudogeräten, wie einem Zufallszahlengenerator, gewähren.
Das Verzeichnis /dev verfügt über mehrere Unterverzeichnishierarchien, von denen jede Gerätedateien enthält, die sich auf einen bestimmten Gerätetyp beziehen. Der Inhalt dieser Unterverzeichnisse wird jedoch als symbolischer Link zu entsprechenden Dateien in /dev implementiert. Somit können die Dateien entweder über die verknüpfte Datei in /dev oder die entsprechende Datei im Unterverzeichnis aufgerufen werden.
Mit dem Befehl ls -l /dev werden Dateien aufgelistet, von denen einige als b (für block) oder c (für character) gekennzeichnet sind. Diesen Geräten ist ein Nummernpaar zugeordnet, das das Gerät für das System kennzeichnet.
ls -l /dev
total 0
crw-r--r--. 1 root root 10, 235 Aug 20 08:36 autofs
drwxr-xr-x. 2 root root 240 Sep 20 07:37 block
drwxr-xr-x. 2 root root 100 Aug 20 08:36 bsg
drwxr-xr-x. 3 root root 60 Nov 4 2019 bus
lrwxrwxrwx. 1 root root 3 Aug 20 08:36 cdrom -> sr0
drwxr-xr-x. 2 root root 2720 Sep 20 07:37 char
crw-------. 1 root root 5, 1 Aug 20 08:36 console
lrwxrwxrwx. 1 root root 11 Aug 20 08:36 core -> /proc/kcore
drwxr-xr-x. 3 root root 60 Nov 4 2019 cpu
crw-------. 1 root root 10, 62 Aug 20 08:36 cpu_dma_latency
drwxr-xr-x. 7 root root 140 Aug 20 08:36 disk
brw-rw----. 1 root disk 253, 0 Aug 20 08:36 dm-0
brw-rw----. 1 root disk 253, 1 Aug 20 08:36 dm-1
brw-rw----. 1 root disk 253, 2 Aug 20 08:36 dm-2
lrwxrwxrwx. 1 root root 13 Aug 20 08:36 fd -> /proc/self/fd
crw-rw-rw-. 1 root root 1, 7 Aug 20 08:36 full
crw-rw-rw-. 1 root root 10, 229 Aug 20 08:36 fuse
crw-------. 1 root root 10, 228 Aug 20 08:36 hpet
drwxr-xr-x. 2 root root 0 Aug 20 08:36 hugepages
crw-------. 1 root root 10, 183 Aug 20 08:36 hwrng
lrwxrwxrwx. 1 root root 12 Aug 20 08:36 initctl -> /run/initctl
drwxr-xr-x. 3 root root 220 Aug 20 08:36 input
crw-r--r--. 1 root root 1, 11 Aug 20 08:36 kmsg
lrwxrwxrwx. 1 root root 28 Aug 20 08:36 log -> /run/systemd/journal/dev-log
brw-rw----. 1 root disk 7, 0 Sep 23 01:28 loop0
crw-rw----. 1 root disk 10, 237 Sep 20 07:37 loop-control
drwxr-xr-x. 2 root root 120 Aug 20 08:36 mapper
crw-------. 1 root root 10, 227 Aug 20 08:36 mcelog
crw-r-----. 1 root kmem 1, 1 Aug 20 08:36 mem
crw-------. 1 root root 10, 59 Aug 20 08:36 memory_bandwidth
drwxrwxrwt. 2 root root 40 Nov 4 2019 mqueue
drwxr-xr-x. 2 root root 60 Aug 20 08:36 net
crw-------. 1 root root 10, 61 Aug 20 08:36 network_latency
crw-------. 1 root root 10, 60 Aug 20 08:36 network_throughput
crw-rw-rw-. 1 root root 1, 3 Aug 20 08:36 null
crw-------. 1 root root 10, 144 Aug 20 08:36 nvram
drwxr-xr-x. 2 root root 100 Aug 20 08:36 ol_ca-virtdoc-oltest1
crw-r-----. 1 root kmem 1, 4 Aug 20 08:36 port
crw-------. 1 root root 108, 0 Aug 20 08:36 ppp
crw-rw-rw-. 1 root tty 5, 2 Oct 7 08:10 ptmx
drwxr-xr-x. 2 root root 0 Aug 20 08:36 pts
crw-rw-rw-. 1 root root 1, 8 Aug 20 08:36 random
drwxr-xr-x. 2 root root 60 Nov 4 2019 raw
lrwxrwxrwx. 1 root root 4 Aug 20 08:36 rtc -> rtc0
crw-------. 1 root root 251, 0 Aug 20 08:36 rtc0
brw-rw----. 1 root disk 8, 0 Aug 20 08:36 sda
brw-rw----. 1 root disk 8, 1 Aug 20 08:36 sda1
brw-rw----. 1 root disk 8, 2 Aug 20 08:36 sda2
brw-rw----. 1 root disk 8, 16 Aug 20 08:36 sdb
brw-rw----. 1 root disk 8, 17 Aug 20 08:36 sdb1
crw-rw----. 1 root cdrom 21, 0 Aug 20 08:36 sg0
Blockgeräte
Blockgeräte ermöglichen den zufälligen Zugriff auf Daten, suchen nach Medien für Daten und puffern in der Regel Daten, während Daten geschrieben oder gelesen werden. Beispiele für Blockgeräte sind Festplatten, CD-ROM-Laufwerke, Flash-Speicher und andere adressierbare Speichergeräte.
Zeichengeräte
Zeichengeräte ermöglichen das Streaming von Daten zu oder von einem Gerät. Die Daten werden normalerweise nicht gepuffert, und es wird auch kein zufälliger Zugriff auf Daten auf einem Gerät gewährt. Der Kernel schreibt Daten in oder liest Daten von einem Zeichengerät 1 Byte gleichzeitig. Beispiele für Zeichengeräte sind Tastaturen, Mäuse, Terminals, Pseudoterminale und Bandlaufwerke. tty0 und tty1 sind zeichenorientierte Gerätedateien, die Terminalgeräten entsprechen, sodass sich Benutzer von seriellen Terminals oder Terminalemulatoren anmelden können.
Pseudo-Terminal-Zeichengeräte
Pseudo-terminale sekundäre Geräte emulieren echte Endgeräte, damit sie mit Software interagieren können. Beispiel: Ein Benutzer kann sich bei einem Terminalgerät wie /dev/tty1 anmelden, das dann das Pseudoterminal-Primärgerät /dev/pts/ptmx verwendet, um mit einem zugrunde liegenden Pseudoterminalgerät zu interagieren. Die zeichenorientierten Gerätedateien für sekundäre und primäre Pseudoterminalsysteme befinden sich im Verzeichnis /dev/pts, wie im folgenden Beispiel dargestellt:
ls -l /dev/pts
total 0
crw--w----. 1 guest tty 136, 0 Mar 17 10:11 0
crw--w----. 1 guest tty 136, 1 Mar 17 10:53 1
crw--w----. 1 guest tty 136, 2 Mar 17 10:11 2
c---------. 1 root root 5, 2 Mar 17 08:16 ptmx
Einige Geräteeinträge, wie stdin für die Standardeingabe, werden symbolisch über das Unterverzeichnis self des proc-Dateisystems verknüpft. Die pseudo-terminale Gerätedatei, auf die sie zeigt, hängt vom Kontext des Prozesses ab.
ls -l /proc/self/fd/[012]
lrwx------. 1 root root 64 Oct 7 08:23 /proc/self/fd/0 -> /dev/pts/0
lrwx------. 1 root root 64 Oct 7 08:23 /proc/self/fd/1 -> /dev/pts/0
lrwx------. 1 root root 64 Oct 7 08:23 /proc/self/fd/2 -> /dev/pts/0
Null-, Zufalls-, Urandom- und Nullzeichen-Geräte
Zeichengeräte, wie null, random, urandom und zero, sind Beispiele für Pseudogeräte, die Zugriff auf virtuelle Funktionen bieten, die in Software und nicht auf physische Hardware implementiert sind.
/dev/null ist eine Datensenke. Daten, die Sie in /dev/null schreiben, werden zwar nicht mehr angezeigt, aber der Schreibvorgang ist erfolgreich. Beim Lesen aus /dev/null wird EOF (End-of-file) zurückgegeben.
/dev/zero ist eine Datenquelle einer unbegrenzten Anzahl von 0-Wert-Byte.
/dev/random und /dev/urandom sind Datenquellen von Streams von Pseudozufallsbytes. Um die High-Entropieausgabe aufrechtzuerhalten, blockiert /dev/random, wenn der Entropiepool nicht genügend Rauschen enthält. /dev/urandom blockiert nicht, und daher ist die Entropie der Ausgabe möglicherweise nicht so konsistent hoch wie die von /dev/random. Weder /dev/random noch /dev/urandom gelten jedoch als zufällig genug für die Zwecke der sicheren Kryptographie, wie z. B. militärische Verschlüsselung.
Die Größe des Entropiepools und der Entropiewert für /dev/random finden Sie in den virtuellen Dateien unter /proc/sys/kernel/random:
cat /proc/sys/kernel/random/poolsize
4096
cat /proc/sys/kernel/random/entropy_avail
3467
Weitere Informationen finden Sie in den Handbuchseiten null(4), pts(4) und random(4).