Hardware-Geräte unter Linux erkunden

CompTIACompTIABeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einleitung

In diesem Labor lernen Sie die wesentlichen Fähigkeiten, um Hardware-Geräte in einer Linux-Umgebung zu erkunden, zu identifizieren und zu inspizieren. Sie werden praktische Erfahrungen mit leistungsstarken Kommandozeilen-Dienstprogrammen sammeln, um zu verstehen, wie das Betriebssystem mit physischen Komponenten interagiert. Ziel ist es, ein grundlegendes Verständnis des Hardware-Managements unter Linux aufzubauen, das für die Systemadministration, Leistungsoptimierung und Fehlerbehebung unerlässlich ist.

Sie beginnen mit dem Auflisten von Blockgeräten mit lsblk und lshw, um einen Überblick über die Speichermedien zu erhalten. Anschließend verwenden Sie udevadm, um detaillierte Geräteeigenschaften und Regeln zu inspizieren. Das Labor führt Sie dann durch die Anzeige der PCI- und SCSI-Bus-Hierarchien, um zu sehen, wie Geräte verbunden sind. Abschließend tauchen Sie in Low-Level-Systeminformationen ein, indem Sie die virtuellen Dateisysteme /proc und /sys untersuchen, was Ihnen eine umfassende Sicht auf die Hardware Ihres Systems aus der Perspektive des Kernels bietet.

Block-Geräte mit lsblk und lshw auflisten

In diesem Schritt lernen Sie, wie Sie die an Ihr System angeschlossenen Block-Geräte identifizieren und auflisten. Block-Geräte sind Speichergeräte, die Daten in Blöcken fester Größe übertragen, wie z. B. Festplatten, Solid-State-Laufwerke und USB-Speichersticks. Wir werden zu diesem Zweck zwei gängige Befehle verwenden: lsblk und lshw.

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

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

lsblk

Sie sehen eine Ausgabe, die der folgenden ähnelt und die Geräte und alle von ihnen enthaltenen Partitionen auflistet.

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: Wechselbares Gerät (1, wenn ja, 0, wenn nein).
  • SIZE: Die Größe des Geräts.
  • RO: Nur-Lese-Gerät (1, wenn ja, 0, wenn nein).
  • TYPE: Der Gerätetyp (z. B. disk, part, loop).
  • MOUNTPOINTS: Wo das Gerät im Dateisystem eingehängt ist.

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

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

Nach Abschluss der Installation können Sie lshw verwenden, um detaillierte Informationen über bestimmte Hardwareklassen zu erhalten. Um beispielsweise Details zu Speichercontrollern (wie Ihrem SATA- oder NVMe-Controller) anzuzeigen, können Sie die Option -class storage verwenden.

sudo lshw -class storage

Die Ausgabe zeigt Informationen über die Speicher-Schnittstelle selbst.

  *-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 die Partitionen und logischen Volumes zu erhalten, die mit lsblk vergleichbar, aber detaillierter sind, verwenden Sie die Option -class volume.

sudo lshw -class volume

Dieser Befehl liefert eine Fülle von Informationen, einschließlich logischer Namen, Seriennummern und Fähigkeiten 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 können Sie sowohl eine High-Level- als auch eine detaillierte Low-Level-Ansicht der Speichergeräte auf Ihrem Linux-System erhalten.

Geräte-Eigenschaften mit udevadm inspizieren

Im vorherigen Schritt haben Sie gelernt, wie Sie Block-Geräte auflisten. Nun tauchen Sie tiefer ein und inspizieren die spezifischen Eigenschaften dieser Geräte mit dem Befehl udevadm. udev ist der Geräte-Manager für den Linux-Kernel, der dynamisch Geräteknoten im Verzeichnis /dev 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 inspizieren, 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 von der Reihenfolge, in der 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 im /sys-Dateisystem:

/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 zum angegebenen Gerät anzuzeigen. Dies liefert 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 Block-Gerät selbst sowie für sein übergeordnetes Virtio-Gerät und den PCI-Controller anzeigt. Dieser Detailgrad ist für fortgeschrittenes Gerätemanagement und Fehlerbehebung unerlässlich. Wir zeigen die vollständige Ausgabe hier aufgrund ihrer Länge nicht, aber Sie können sie gerne 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, wie Geräte wie Ihre Festplatte mit dem System verbunden sind.

Zuerst untersuchen wir den PCI-Bus, der die meisten Hochgeschwindigkeitskomponenten auf dem Motherboard 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 dann 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, was die Geräte sind. Um ihn nützlicher zu machen, fügen Sie die Option -v (verbose) hinzu. Dies schließt Gerätenamen und den verwendeten Kernel-Treiber für jedes Gerät ein. Da die Ausgabe lang sein kann, leiten wir sie an more weiter, damit Sie sie durchscrollen können. Drücken Sie die Leertaste, um nach unten zu scrollen, und q, um zu 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

Aus dieser Ausgabe können Sie die spezifischen Hardwarekomponenten erkennen, die an den PCI-Bus angeschlossen sind, wie z. B. den IDE-Controller und Virtio-Geräte.

Als Nächstes betrachten wir den SCSI-Bus. In unserer virtuellen Umgebung wird die Festplatte /dev/vda als Virtio-Blockgerät dargestellt, aber wir können immer noch SCSI-Geräte untersuchen, falls welche vorhanden sind. Eine benutzerfreundliche Möglichkeit, diese Informationen anzuzeigen, ist der Befehl systool. Lassen Sie uns das Paket sysfsutils installieren, das ihn bereitstellt.

sudo apt-get install -y sysfsutils

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

systool -b scsi

Dieser Befehl listet die an den SCSI-Bus angeschlossenen Geräte auf:

Bus = "scsi"

  Device = "host0"
  Device = "host1"

Niedrigstufige Systemressourcen in /proc untersuchen

In diesem Schritt tauchen Sie in das virtuelle Dateisystem /proc ein, um niedrigstufige Systemressourcen zu untersuchen. 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 E/A-Ports verwaltet.

Zuerst betrachten wir Direct Memory Access (DMA)-Kanäle. DMA ermöglicht es bestimmten Hardwaregeräten, direkt auf den Systemspeicher zuzugreifen, ohne die CPU zu involvieren, 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 typischerweise sehr einfach, besonders auf modernen oder virtualisierten Systemen.

 4: cascade

Diese Ausgabe zeigt die registrierten DMA-Kanäle. Der cascade-Kanal wird verwendet, um ältere Interrupt-Controller zu verketten, und ist auf moderner Hardware oft der einzige aufgeführte.

Als Nächstes untersuchen wir Interrupt-Anforderungen (IRQs). Wenn ein Hardwaregerä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
...

Hier ist die Bedeutung der Spalten:

  • Die erste Spalte ist die IRQ-Nummer.
  • Die Spalte CPU0 (und andere CPU-Spalten, falls vorhanden) zeigt die Anzahl der von diesem CPU-Kern verarbeiteten Interrupts.
  • Die letzte Spalte zeigt den Namen des Gerätetreibers, der mit diesem Interrupt verbunden ist. Dies ist sehr nützlich zur Fehlerbehebung bei Hardwarekonflikten.

Schließlich betrachten wir die E/A-Ports (I/O ports). Dies sind spezielle Speicheradressen, die die CPU verwendet, um direkt mit Hardwaregeräten zu kommunizieren. Die Datei /proc/ioports listet die E/A-Port-Bereiche auf, die derzeit für Geräte reserviert sind. Da die Liste lang sein kann, ist es am besten, sie mit less anzuzeigen. Sie können mit den Pfeiltasten scrollen und q drücken, um zu beenden.

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. Sie sehen beispielsweise 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 gemountet ist. Während /proc Informationen über Prozesse und einige Hardware-Ressourcen bereitstellt, bietet /sys eine strukturiertere Ansicht des Gerätemodells des Systems. Es exportiert eine hierarchische Darstellung von Kernel-Objekten, Geräten und Treibern. Viele der Werkzeuge, die Sie in früheren Schritten verwendet haben, wie lsblk und udevadm, beziehen ihre Informationen durch Lesen aus /sys.

Zuerst sehen wir uns an, wie Blockgeräte dargestellt werden. Das Verzeichnis /sys/block enthält ein Unterverzeichnis für jedes vom System erkannte Blockgerät.

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

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

Nun inspizieren wir das Verzeichnis für das vda-Gerät. Dieses Verzeichnis enthält verschiedene Dateien, die die Attribute des Geräts darstellen.

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 spezifische Informationen. Um beispielsweise die Größe der Festplatte zu ermitteln, können Sie die Datei size lesen.

cat /sys/block/vda/size

Die Ausgabe ist eine Zahl:

83886080

Diese Zahl repräsentiert die Größe des Geräts in 512-Byte-Sektoren. Sie können auch Verzeichnisse für jede Partition sehen, wie z. B. vda1, vda2 und vda3, die ihre eigenen Attributsätze enthalten.

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

ls /sys/bus

Sie sehen eine Liste verschiedener Bustypen, die vom Kernel unterstützt werden:

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. Dies sind ebenfalls symbolische Links, die zurück zum 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 die Erkundung von /sys können Sie direkt auf die Rohdaten zugreifen, die höherstufige Werkzeuge zur Berichterstattung über Systemhardware verwenden. Es ist eine leistungsstarke Methode, um zu verstehen, wie der Linux-Kernel Geräte sieht und organisiert.

Zusammenfassung

In diesem Lab haben Sie gelernt, Hardwaregeräte in einer Linux-Umgebung zu identifizieren und zu inspizieren. Sie haben die Verwendung des Befehls lsblk geübt, um Blockgeräte und ihre Partitionen in einem baumartigen Format aufzulisten, und den Befehl lshw, um detailliertere Hardware-Spezifikationen zu erhalten. Das Lab deckte auch die Verwendung von udevadm zur Inspektion von Geräte-Eigenschaften ab, die vom udev-Subsystem verwaltet werden, und wie die Bus-Hierarchien des Systems für PCI- und SCSI-Geräte angezeigt werden.

Darüber hinaus haben Sie die niedrigstufigen Informationen erkundet, die vom Kernel über Pseudo-Dateisysteme bereitgestellt werden. Sie haben das /proc-Dateisystem untersucht, um Rohdaten von Systemressourcen anzuzeigen, und sind durch das /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 Hardware-Informationen direkt vom Betriebssystem gefunden und interpretiert werden.