Hardware-Geräte in Linux erkunden

CompTIABeginner
Jetzt üben

Einführung

In diesem Lab erlernen Sie die grundlegenden Fähigkeiten, um Hardware-Geräte innerhalb einer Linux-Umgebung zu finden, zu identifizieren und zu überprüfen. Sie werden praktische Erfahrungen mit leistungsstarken Kommandozeilenwerkzeugen sammeln, um zu verstehen, wie das Betriebssystem mit den physischen Komponenten kommuniziert. Ziel ist es, ein fundiertes Verständnis der Hardware-Verwaltung in Linux aufzubauen, was für die Systemadministration, Leistungsoptimierung und Fehlerbehebung unerlässlich ist.

Sie beginnen mit der Auflistung von Blockgeräten mittels lsblk und lshw, um einen Überblick über den Speicher zu erhalten. Danach verwenden Sie udevadm, um detaillierte Geräteeigenschaften und Regeln zu inspizieren. Das Lab führt Sie anschließend durch die Anzeige der PCI- und SCSI-Bus-Hierarchien, um zu sehen, wie die Geräte verbunden sind. Schließlich tauchen Sie in systemnahe Informationen ein, indem Sie die virtuellen Dateisysteme /proc und /sys untersuchen, was Ihnen einen umfassenden Blick auf die Hardware Ihres Systems aus der Perspektive des Kernels ermöglicht.

Dies ist ein geführtes Lab (Guided Lab), das Schritt-für-Schritt-Anleitungen bietet, um Ihnen beim Lernen und Üben zu helfen. Folgen Sie den Anweisungen sorgfältig, um jeden Schritt abzuschließen und praktische Erfahrung zu sammeln. Historische Daten zeigen, dass dies ein Lab für Anfänger mit einer Abschlussquote von 90% ist. Es hat eine positive Bewertungsrate von 98% von Lernenden erhalten.

Blockgeräte mit lsblk und lshw auflisten

In diesem Schritt lernen Sie, wie Sie die an Ihr System angeschlossenen Blockgeräte identifizieren und auflisten. Blockgeräte sind Speichergeräte, die Daten in Blöcken fester Größe übertragen, wie z. B. Festplatten, Solid-State-Drives (SSDs) und USB-Sticks. Wir werden für diesen Zweck zwei gängige Befehle verwenden: lsblk und lshw.

Zuerst verwenden wir den Befehl lsblk, um eine baumartige Ansicht aller verfügbaren Blockgeräte zu erhalten. Dieser Befehl liest das sysfs-Dateisystem und die udev-Datenbank aus, um Informationen zu sammeln.

Führen Sie den Befehl lsblk in Ihrem Terminal aus:

lsblk

Sie sehen eine Ausgabe ähnlich der folgenden, in der die Geräte und die darin enthaltenen Partitionen aufgelistet sind.

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0    7:0    0  89.4M  1 loop /snap/lxd/31333
loop1    7:1    0     4K  1 loop /snap/bare/5
loop2    7:2    0  63.9M  1 loop /snap/core20/2318
loop3    7:3    0 242.9M  1 loop /snap/firefox/2710
loop4    7:4    0 244.5M  1 loop /snap/firefox/2800
loop5    7:5    0 349.7M  1 loop /snap/gnome-3-38-2004/140
loop6    7:6    0 349.7M  1 loop /snap/gnome-3-38-2004/143
loop7    7:7    0  91.7M  1 loop /snap/gtk-common-themes/1535
loop9    7:9    0    87M  1 loop /snap/lxd/28373
loop10   7:10   0  73.9M  1 loop /snap/core22/2010
loop11   7:11   0  38.8M  1 loop /snap/snapd/21759
loop12   7:12   0  50.9M  1 loop /snap/snapd/24718
loop13   7:13   0  63.8M  1 loop /snap/core20/2599
vda    252:0    0    40G  0 disk
├─vda1 252:1    0     1M  0 part
├─vda2 252:2    0   200M  0 part /boot/efi
└─vda3 252:3    0  39.8G  0 part /var/snap/firefox/common/host-hunspell
                                 /

Hier ist eine kurze Erklärung der Spalten:

  • NAME: Der Gerätename.
  • MAJ:MIN: Die Major- und Minor-Gerätenummern, die vom Kernel zur Identifizierung des Geräts verwendet werden.
  • RM: Wechselmedium (1 falls ja, 0 falls nein).
  • SIZE: Die Größe des Geräts.
  • RO: Schreibgeschütztes Gerät (1 falls ja, 0 falls nein).
  • TYPE: Der Typ des Geräts (z. B. disk, part, loop).
  • MOUNTPOINTS: Wo das Gerät im Dateisystem eingehängt ist.

Während lsblk hervorragend für einen schnellen Überblick geeignet ist, kann der Befehl lshw (list hardware) wesentlich detailliertere Informationen liefern. Der Befehl lshw ist möglicherweise nicht standardmäßig installiert. Lassen Sie ihn uns zuerst installieren.

sudo apt-get update && sudo apt-get install -y lshw

Sobald die Installation abgeschlossen ist, können Sie lshw verwenden, um detaillierte Informationen über bestimmte Hardwareklassen zu erhalten. Um beispielsweise Details über Speicher-Controller (wie Ihren SATA- oder NVMe-Controller) zu sehen, können Sie die Option -class storage verwenden.

sudo lshw -class storage

Die Ausgabe zeigt Informationen über die Speicherschnittstelle selbst an.

  *-pnp00:03
       product: PnP device PNP0700
       physical id: 3
       capabilities: pnp
  *-ide
       description: IDE interface
       product: 82371SB PIIX3 IDE [Natoma/Triton II]
       vendor: Intel Corporation
       physical id: 1.1
       bus info: pci@0000:00:01.1
       version: 00
       width: 32 bits
       clock: 33MHz
       capabilities: ide isa_compat_mode bus_master
       configuration: driver=ata_piix latency=0
       resources: irq:0 ioport:1f0(size=8) ioport:3f6 ioport:170(size=8) ioport:376 ioport:c060(size=16)
  *-scsi
       description: SCSI storage controller
       product: Virtio block device
       vendor: Red Hat, Inc.
       physical id: 4
       bus info: pci@0000:00:04.0
       version: 00
       width: 64 bits
       clock: 33MHz
       capabilities: scsi msix bus_master cap_list
       configuration: driver=virtio-pci latency=0
       resources: irq:0 memory:fe000000-fe000fff memory:fe001000-fe001fff

Um detailliertere Informationen über Partitionen und logische Volumes zu erhalten, was vergleichbar mit lsblk, aber ausführlicher ist, verwenden Sie die Option -class volume.

sudo lshw -class volume

Dieser Befehl liefert eine Fülle von Informationen, einschließlich logischer Namen, Seriennummern und Funktionen jeder Partition.

  *-volume:0
       description: BIOS Boot partition
       vendor: EFI
       physical id: 1
       bus info: scsi@0:0.0.0,1
       logical name: /dev/vda1
       serial: xxxx-xxxx
       size: 1MiB
       capacity: 1MiB
       capabilities: primary
  *-volume:1
       description: EFI partition
       vendor: EFI
       physical id: 2
       bus info: scsi@0:0.0.0,2
       logical name: /dev/vda2
       serial: XXXX-XXXX
       size: 200MiB
       capacity: 200MiB
       capabilities: boot fat initialized
       configuration: FATs=32 filesystem=fat mount.fstype=vfat mount.options=rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro state=mounted
  *-volume:2
       description: Linux filesystem
       physical id: 3
       bus info: scsi@0:0.0.0,3
       logical name: /dev/vda3
       size: 39GiB
       capacity: 39GiB
       capabilities: primary ext4 initialized
       configuration: filesystem=ext4 lastmountpoint=/ modified=2024-xx-xx mounted=2024-xx-xx state=mounted

Durch die Verwendung von lsblk und lshw erhalten Sie sowohl einen groben Überblick als auch eine detaillierte, tiefgehende Ansicht der Speichergeräte auf Ihrem Linux-System.

Geräteeigenschaften mit udevadm inspizieren

Im vorherigen Schritt haben Sie gelernt, wie man Blockgeräte auflistet. Jetzt gehen wir tiefer ins Detail und untersuchen die spezifischen Eigenschaften dieser Geräte mit dem Befehl udevadm. udev ist der Gerätemanager für den Linux-Kernel, der Geräteknoten im Verzeichnis /dev dynamisch verwaltet. Der Befehl udevadm ist das Steuerungswerkzeug für udev und ermöglicht es Ihnen, die udev-Datenbank nach detaillierten Geräteinformationen abzufragen. Dies ist besonders nützlich, bevor Sie benutzerdefinierte udev-Regeln erstellen, um Geräte automatisch zu verwalten.

Lassen Sie uns die Eigenschaften der Hauptfestplatte /dev/vda untersuchen, die Sie im vorherigen Schritt identifiziert haben.

Um die Eigenschaften von /dev/vda in einem einfachen Schlüssel-Wert-Format anzuzeigen, führen Sie den folgenden Befehl aus. Das Flag -q property weist udevadm an, die Datenbank nach allen bekannten Eigenschaften des Geräts abzufragen, und -n /dev/vda gibt den Namen des Geräteknotens an.

udevadm info -q property -n /dev/vda

Die Ausgabe ist eine Liste von Umgebungsvariablen, die das Gerät beschreiben:

DEVPATH=/devices/pci0000:00/0000:00:04.0/virtio1/block/vda
DEVNAME=/dev/vda
DEVTYPE=disk
MAJOR=252
MINOR=0
SUBSYSTEM=block
USEC_INITIALIZED=xxxxxxxxx
ID_VENDOR=Virtio
ID_MODEL=Block_Device
ID_MODEL_ENC=Block\x20Device\x20\x20\x20\x20\x20\x20\x20
ID_REVISION=
ID_SERIAL=Virtio_Block_Device
ID_SERIAL_SHORT=Block_Device
ID_TYPE=disk
ID_BUS=virtio
ID_PATH=pci-0000:00:04.0-virtio-1
ID_PATH_TAG=pci-0000_00_04_0-virtio-1
DEVLINKS=/dev/disk/by-id/virtio-Block_Device /dev/disk/by-path/pci-0000:00:04.0-virtio-1
TAGS=:systemd:

Diese Ausgabe liefert wertvolle Details wie ID_MODEL, ID_VENDOR und eine eindeutige ID_SERIAL. Diese Eigenschaften werden oft verwendet, um udev-Regeln zu schreiben, die für ein bestimmtes Gerät gelten, unabhängig davon, in welcher Reihenfolge es vom Kernel erkannt wurde.

Für eine noch detailliertere, hierarchische Ansicht können Sie das Gerät über seinen sysfs-Pfad abfragen. Finden Sie zuerst den sysfs-Pfad für /dev/vda:

udevadm info -q path -n /dev/vda

Die Ausgabe ist der Pfad des Geräts innerhalb des /sys-Dateisystems:

/devices/pci0000:00/0000:00:04.0/virtio1/block/vda

Verwenden Sie nun diesen Pfad mit den Flags -a (Attribute Walk) und -p (Path), um alle Geräteattribute von den übergeordneten Geräten bis hin zum angegebenen Gerät zu sehen. Dies vermittelt ein vollständiges Bild des Geräts und seiner übergeordneten Controller.

udevadm info -a -p $(udevadm info -q path -n /dev/vda)

Dieser Befehl erzeugt eine wesentlich längere Ausgabe, die Attribute für das Blockgerät selbst sowie für das übergeordnete Virtio-Gerät und den PCI-Controller anzeigt. Diese Detailtiefe ist für die fortgeschrittene Geräteverwaltung und Fehlerbehebung unerlässlich. Wir zeigen hier aufgrund der Länge nicht die vollständige Ausgabe, aber Sie können sie gerne selbst erkunden.

PCI- und SCSI-Bus-Hierarchie anzeigen

In diesem Schritt untersuchen Sie, wie Geräte auf Systembussen organisiert sind. Ein Bus ist ein Kommunikationssystem, das Daten zwischen Komponenten innerhalb eines Computers überträgt. Wir konzentrieren uns auf zwei wichtige Busse: PCI (Peripheral Component Interconnect) und SCSI (Small Computer System Interface). Das Verständnis ihrer Hierarchie hilft bei der Diagnose von Hardwareproblemen und beim Verständnis darüber, wie Geräte wie Ihre Festplatte mit dem System verbunden sind.

Lassen Sie uns zuerst den PCI-Bus untersuchen, der die meisten Hochgeschwindigkeitskomponenten auf dem Mainboard verbindet. Der Befehl lspci ist das Standardwerkzeug dafür. Das Paket pciutils, das diesen Befehl bereitstellt, ist normalerweise vorinstalliert, aber wir stellen sicher, dass es vorhanden ist.

sudo apt-get update && sudo apt-get install -y pciutils

Um nun die PCI-Bus-Hierarchie in einer baumartigen Struktur anzuzeigen, verwenden Sie den Befehl lspci mit der Option -t.

lspci -t

Die Ausgabe sieht in etwa so aus und zeigt die Verbindungen zwischen Bussen und Geräten:

-[0000:00]-+-00.0
           +-01.0
           +-01.1
           +-01.3
           +-04.0
           \-05.0

Dieser Baum zeigt die Verbindungen, aber nicht, um welche Geräte es sich handelt. Um ihn nützlicher zu machen, fügen Sie die Option -v (verbose) hinzu. Dies schließt Gerätenamen und den für jedes Gerät verwendeten Kernel-Treiber ein. Da die Ausgabe lang sein kann, leiten wir sie an more weiter, damit Sie darin blättern können. Drücken Sie die Leertaste zum Herunterscrollen und q zum Beenden.

lspci -tv | more

Die Ausgabe wird wesentlich detaillierter sein:

-[0000:00]-+-00.0  Intel Corporation 440FX - 82441FX PMC [Natoma]
           +-01.0  Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
           +-01.1  Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II]
           +-01.3  Intel Corporation 82371AB/EB/MB PIIX4 ACPI
           +-04.0  Red Hat, Inc. Virtio block device
           \-05.0  Red Hat, Inc. Virtio network device

In dieser Ausgabe sehen Sie die spezifischen Hardwarekomponenten, die am PCI-Bus angeschlossen sind, wie den IDE-Controller und die Virtio-Geräte.

Als Nächstes schauen wir uns den SCSI-Bus an. In unserer virtuellen Umgebung wird die Festplatte /dev/vda als Virtio-Blockgerät dargestellt, aber wir können dennoch SCSI-Geräte untersuchen, falls welche vorhanden sind. Eine benutzerfreundliche Methode, diese Informationen anzuzeigen, ist der Befehl systool. Installieren wir das Paket sysfsutils, das diesen Befehl enthält.

sudo apt-get install -y sysfsutils

Verwenden Sie nun systool mit der Option -b scsi, um Geräte am SCSI-Bus aufzulisten.

systool -b scsi

Dieser Befehl zeigt die am SCSI-Bus angeschlossenen Geräte an:

Bus = "scsi"

  Device = "host0"
  Device = "host1"

Systemressourcen auf niedriger Ebene in /proc untersuchen

In diesem Schritt tauchen Sie in das virtuelle Dateisystem /proc ein, um systemnahe Ressourcen zu inspizieren. Das /proc-Dateisystem enthält keine echten Dateien auf der Festplatte; stattdessen ist es eine direkte Schnittstelle zu den Datenstrukturen des Kernels. Durch das Lesen von Dateien in /proc erhalten Sie einen Echtzeit-Einblick, wie das System Hardware-Ressourcen wie DMA-Kanäle, Interrupts und I/O-Ports verwaltet.

Schauen wir uns zuerst die Direct Memory Access (DMA)-Kanäle an. DMA ermöglicht es bestimmten Hardware-Geräten, direkt auf den Systemspeicher zuzugreifen, ohne die CPU zu belasten, was die Leistung verbessert. Um zu sehen, welche DMA-Kanäle derzeit verwendet werden, können Sie den Inhalt der Datei /proc/dma anzeigen.

cat /proc/dma

Die Ausgabe ist in der Regel sehr einfach, insbesondere auf modernen oder virtualisierten Systemen.

 4: cascade

Diese Ausgabe zeigt die registrierten DMA-Kanäle. Der cascade-Kanal wird verwendet, um Interrupt-Controller älteren Typs zu verketten, und ist auf moderner Hardware oft der einzige gelistete Eintrag.

Untersuchen wir als Nächstes die Interrupt-Anforderungen (IRQs). Wenn ein Hardware-Gerät die Aufmerksamkeit der CPU benötigt, sendet es ein Interrupt-Signal. Die Datei /proc/interrupts liefert Statistiken darüber, wie viele Interrupts für jede IRQ-Nummer empfangen wurden.

cat /proc/interrupts

Die Ausgabe zeigt eine detaillierte Aufschlüsselung der Interrupt-Aktivität pro CPU-Kern.

           CPU0
  0:         10   IO-APIC   2-edge      timer
  1:          2   IO-APIC   1-edge      i8042
  8:          1   IO-APIC   8-edge      rtc0
  9:          0   IO-APIC   9-fasteoi   acpi
 11:        ...   IO-APIC  11-fasteoi   ata_piix, uhci_hcd
 12:          4   IO-APIC  12-edge      i8042
NMI:          0   Non-maskable interrupts
LOC:      ...   Local timer interrupts
...

Das bedeuten die Spalten:

  • Die erste Spalte ist die IRQ-Nummer.
  • Die Spalte CPU0 (und weitere CPU-Spalten, falls vorhanden) zeigt die Anzahl der von diesem CPU-Kern verarbeiteten Interrupts.
  • Die letzte Spalte zeigt den Namen des Gerätetreibers, der diesem Interrupt zugeordnet ist. Dies ist sehr nützlich für die Fehlersuche bei Hardware-Konflikten.

Schauen wir uns schließlich die I/O-Ports an. Dies sind spezielle Speicheradressen, die die CPU verwendet, um direkt mit Hardware-Geräten zu kommunizieren. Die Datei /proc/ioports listet die I/O-Port-Bereiche auf, die derzeit für Geräte reserviert sind. Da die Liste lang sein kann, empfiehlt es sich, sie mit less anzuzeigen. Sie können mit den Pfeiltasten scrollen und q zum Beenden drücken.

less /proc/ioports

Sie sehen eine Liste von Speicherbereichen und den Geräten, die sie verwenden.

0000-0cf7 : PCI Bus 0000:00
  0020-0021 : PIC1
  0040-0043 : timer0
  0050-0053 : timer1
  0060-0060 : keyboard
  0064-0064 : keyboard
  0070-0077 : rtc0
  0080-008f : dma page reg
  00a0-00a1 : PIC2
  00c0-00df : dma2
  00f0-00ff : fpu
0170-0177 : 0000:00:01.1
  0170-0177 : ata_piix
01f0-01f7 : 0000:00:01.1
  01f0-01f7 : ata_piix
...

Diese Ausgabe zeigt den Speicheradressbereich und das Gerät, das ihn beansprucht hat. Beispielsweise sehen Sie Bereiche für die Tastatur, Timer und den ata_piix-Festplattencontroller, den wir im vorherigen Schritt gesehen haben.

Geräteinformationen im /sys-Dateisystem erkunden

In diesem letzten Schritt erkunden Sie das sysfs-Dateisystem, das unter /sys eingehängt ist. Während /proc Informationen über Prozesse und einige Hardware-Ressourcen liefert, bietet /sys eine strukturiertere Ansicht des Gerätemodells des Systems. Es exportiert eine hierarchische Darstellung von Kernel-Objekten, Geräten und Treiben. Viele der Werkzeuge, die Sie in den vorherigen Schritten verwendet haben, wie lsblk und udevadm, beziehen ihre Informationen durch das Auslesen von /sys.

Schauen wir uns zuerst an, wie Blockgeräte dargestellt werden. Das Verzeichnis /sys/block enthält ein Unterverzeichnis für jedes dem System bekannte Blockgerät.

Listen Sie den Inhalt von /sys/block auf, um die Geräte zu sehen:

ls -l /sys/block

Die Ausgabe zeigt die Blockgeräte, einschließlich der Loop-Geräte und unserer Hauptfestplatte vda. Beachten Sie, dass dies symbolische Links sind, die auf ihre tatsächlichen Speicherorte innerhalb der /sys/devices-Hierarchie verweisen.

total 0
lrwxrwxrwx 1 root root 0 Jan  1 00:00 loop0 -> ../devices/virtual/block/loop0
lrwxrwxrwx 1 root root 0 Jan  1 00:00 loop1 -> ../devices/virtual/block/loop1
...
lrwxrwxrwx 1 root root 0 Jan  1 00:00 vda -> ../devices/pci0000:00/0000:00:04.0/virtio1/block/vda

Untersuchen wir nun das Verzeichnis für das Gerät vda. Dieses Verzeichnis enthält verschiedene Dateien, die die Attribute des Geräts repräsentieren.

ls /sys/block/vda

Sie sehen eine Liste von Dateien und Verzeichnissen:

alignment_offset  bdi  capability  dev  device  discard_alignment  events  events_async  events_poll_msecs  ext_range  holders  inflight  integrity  power  queue  range  removable  ro  vda1  vda2  vda3  size  slaves  stat  subsystem  trace  uevent

Jede Datei enthält eine spezifische Information. Um beispielsweise die Größe der Festplatte herauszufinden, können Sie die Datei size lesen.

cat /sys/block/vda/size

Die Ausgabe ist eine Zahl:

83886080

Diese Zahl stellt die Größe des Geräts in 512-Byte-Sektoren dar. Sie sehen auch Verzeichnisse für jede Partition, wie vda1, vda2 und vda3, die ihre eigenen Sätze von Attributen enthalten.

Als Nächstes erkunden wir, wie Geräte nach Bustyp im Verzeichnis /sys/bus organisiert sind. Dies bietet eine alternative Möglichkeit, durch die Gerätehierarchie zu navigieren.

ls /sys/bus

Sie sehen eine Liste verschiedener vom Kernel unterstützter Bustypen:

acpi  amba  clocksource  container  cpu  event_source  hid  i2c  i8042  ide  mdio_bus  memory  pci  pci_express  platform  scsi  serial  serio  soc  system  usb  virtio  workqueue

Da wir wissen, dass unsere Festplatte /dev/vda ein Virtio-Blockgerät ist, schauen wir in das Verzeichnis /sys/bus/virtio/devices. Dies listet alle erkannten Virtio-Geräte auf.

ls -l /sys/bus/virtio/devices

Die Ausgabe zeigt die Virtio-Geräte, identifiziert durch ihre Geräte-IDs. Auch dies sind symbolische Links, die zurück auf den Hauptgerätebaum verweisen.

total 0
lrwxrwxrwx 1 root root 0 Jan  1 00:00 virtio0 -> ../../../devices/pci0000:00/0000:00:05.0/virtio0
lrwxrwxrwx 1 root root 0 Jan  1 00:00 virtio1 -> ../../../devices/pci0000:00/0000:00:04.0/virtio1

Durch das Erkunden von /sys können Sie direkt auf die Rohdaten zugreifen, die höherwertige Werkzeuge verwenden, um über die Systemhardware zu berichten. Es ist ein mächtiger Weg, um zu verstehen, wie der Linux-Kernel Geräte sieht und organisiert.

Zusammenfassung

In diesem Lab haben Sie gelernt, Hardware-Geräte in einer Linux-Umgebung zu identifizieren und zu inspizieren. Sie haben geübt, den Befehl lsblk zu verwenden, um Blockgeräte und ihre Partitionen in einem Baumformat aufzulisten, sowie den Befehl lshw, um detailliertere Hardware-Spezifikationen zu erhalten. Das Lab behandelte auch die Verwendung von udevadm zur Untersuchung von Geräteeigenschaften, die vom udev-Subsystem verwaltet werden, und wie man die Bus-Hierarchien des Systems für PCI- und SCSI-Geräte anzeigt.

Darüber hinaus haben Sie die systemnahen Informationen erkundet, die der Kernel über Pseudo-Dateisysteme bereitstellt. Sie haben das /proc-Dateisystem untersucht, um Rohdaten zu Systemressourcen einzusehen, und im /sys-Dateisystem navigiert, um eine strukturierte Darstellung der Geräte des Systems und ihrer Attribute zu erkunden. Dies vermittelte ein umfassendes Verständnis dafür, wie man Hardware-Informationen direkt aus dem Betriebssystem findet und interpretiert.