Introduction
Dans cet atelier, vous allez acquérir les compétences fondamentales pour explorer, identifier et inspecter les périphériques matériels au sein d'un environnement Linux. Vous manipulerez des utilitaires en ligne de commande performants afin de comprendre les interactions entre le système d'exploitation et les composants physiques. L'objectif est de bâtir une base solide en gestion du matériel sous Linux, une compétence cruciale pour l'administration système, l'optimisation des performances et le dépannage.
Vous commencerez par lister les périphériques de bloc à l'aide de lsblk et lshw pour obtenir une vue d'ensemble du stockage. Ensuite, vous utiliserez udevadm pour inspecter les propriétés détaillées et les règles relatives aux périphériques. L'atelier vous guidera ensuite dans l'examen des hiérarchies des bus PCI et SCSI pour visualiser la connectivité des composants. Enfin, vous plongerez dans les informations système de bas niveau en explorant les systèmes de fichiers virtuels /proc et /sys, ce qui vous offrira une vision exhaustive du matériel de votre système du point de vue du noyau.
Lister les périphériques de bloc avec lsblk et lshw
Dans cette étape, vous apprendrez à identifier et à lister les périphériques de bloc connectés à votre système. Les périphériques de bloc sont des unités de stockage qui transfèrent des données par blocs de taille fixe, comme les disques durs, les disques SSD et les clés USB. Nous utiliserons deux commandes courantes à cet effet : lsblk et lshw.
Tout d'abord, utilisons la commande lsblk pour obtenir une vue arborescente de tous les périphériques de bloc disponibles. Cette commande lit le système de fichiers sysfs et la base de données udev pour collecter les informations.
Exécutez la commande lsblk dans votre terminal :
lsblk
Vous verrez une sortie similaire à celle-ci, listant les périphériques et les partitions qu'ils contiennent.
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
/
Voici une brève explication des colonnes :
NAME: Le nom du périphérique.MAJ:MIN: Les numéros majeur et mineur du périphérique, utilisés par le noyau pour l'identifier.RM: Périphérique amovible (1 si oui, 0 si non).SIZE: La taille du périphérique.RO: Périphérique en lecture seule (1 si oui, 0 si non).TYPE: Le type de périphérique (ex: disk, part, loop).MOUNTPOINTS: Point de montage du périphérique dans le système de fichiers.
Bien que lsblk soit idéal pour un aperçu rapide, la commande lshw (list hardware) peut fournir des informations beaucoup plus détaillées. La commande lshw n'est pas toujours installée par défaut. Installons-la d'abord.
sudo apt-get update && sudo apt-get install -y lshw
Une fois l'installation terminée, vous pouvez utiliser lshw pour obtenir des détails sur des classes spécifiques de matériel. Par exemple, pour voir les détails des contrôleurs de stockage (comme votre contrôleur SATA ou NVMe), utilisez l'option -class storage.
sudo lshw -class storage
La sortie affichera des informations sur l'interface de stockage elle-même.
*-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
Pour obtenir des informations plus précises sur les partitions et les volumes logiques, ce qui est comparable mais plus détaillé que lsblk, utilisez l'option -class volume.
sudo lshw -class volume
Cette commande fournit une mine d'informations, incluant les noms logiques, les numéros de série et les capacités de chaque 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
En utilisant lsblk et lshw, vous pouvez obtenir à la fois une vue d'ensemble et une vue technique détaillée des périphériques de stockage de votre système Linux.
Inspecter les propriétés des périphériques avec udevadm
Dans l'étape précédente, vous avez appris à lister les périphériques de bloc. À présent, vous allez approfondir l'inspection des propriétés spécifiques de ces périphériques à l'aide de la commande udevadm. udev est le gestionnaire de périphériques du noyau Linux, qui gère dynamiquement les nœuds de périphériques dans le répertoire /dev. La commande udevadm est l'outil de contrôle de udev, vous permettant d'interroger sa base de données pour obtenir des informations détaillées. C'est particulièrement utile avant de créer des règles udev personnalisées pour automatiser la gestion du matériel.
Inspectons les propriétés du disque principal, /dev/vda, que vous avez identifié précédemment.
Pour afficher les propriétés de /dev/vda dans un format simple de type clé-valeur, exécutez la commande suivante. Le drapeau -q property indique à udevadm d'interroger la base de données pour toutes les propriétés connues du périphérique, et -n /dev/vda spécifie le nom du nœud de périphérique.
udevadm info -q property -n /dev/vda
La sortie sera une liste de variables d'environnement décrivant le périphérique :
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:
Cette sortie fournit des détails précieux tels que ID_MODEL, ID_VENDOR et un ID_SERIAL unique. Ces propriétés sont souvent utilisées pour rédiger des règles udev s'appliquant à un périphérique spécifique, quel que soit l'ordre dans lequel il a été détecté par le noyau.
Pour une vue hiérarchique encore plus détaillée, vous pouvez interroger le périphérique en utilisant son chemin sysfs. Trouvez d'abord le chemin sysfs pour /dev/vda :
udevadm info -q path -n /dev/vda
La sortie sera le chemin du périphérique au sein du système de fichiers /sys :
/devices/pci0000:00/0000:00:04.0/virtio1/block/vda
Maintenant, utilisez ce chemin avec les drapeaux -a (parcours d'attributs) et -p (chemin) pour voir tous les attributs du périphérique, en remontant des périphériques parents jusqu'au périphérique spécifié. Cela donne une image complète du composant et de ses contrôleurs parents.
udevadm info -a -p $(udevadm info -q path -n /dev/vda)
Cette commande produit une sortie beaucoup plus longue, montrant les attributs du périphérique de bloc lui-même, ainsi que ceux du périphérique virtio parent et du contrôleur PCI. Ce niveau de détail est essentiel pour la gestion avancée des périphériques et le dépannage. Nous n'afficherons pas l'intégralité de la sortie ici en raison de sa longueur, mais n'hésitez pas à l'explorer.
Visualiser la hiérarchie des bus PCI et SCSI
Dans cette étape, vous allez explorer l'organisation des périphériques sur les bus système. Un bus est un système de communication qui transfère des données entre les composants à l'intérieur d'un ordinateur. Nous nous concentrerons sur deux bus importants : PCI (Peripheral Component Interconnect) et SCSI (Small Computer System Interface). Comprendre leur hiérarchie aide à diagnostiquer les problèmes matériels et à comprendre comment des périphériques comme votre disque dur sont connectés au système.
Tout d'abord, examinons le bus PCI, qui connecte la plupart des composants haute vitesse sur la carte mère. La commande lspci est l'outil standard pour cela. Le paquet pciutils qui fournit cette commande est généralement pré-installé, mais nous allons nous en assurer.
sudo apt-get update && sudo apt-get install -y pciutils
Maintenant, pour afficher la hiérarchie du bus PCI sous forme d'arborescence, utilisez la commande lspci avec l'option -t.
lspci -t
La sortie ressemblera à ceci, montrant les connexions entre les bus et les périphériques :
-[0000:00]-+-00.0
+-01.0
+-01.1
+-01.3
+-04.0
\-05.0
Cet arbre montre les connexions, mais pas la nature des périphériques. Pour le rendre plus utile, ajoutez l'option -v (verbeux). Cela inclura les noms des périphériques et le pilote du noyau utilisé pour chacun. Comme la sortie peut être longue, nous la redirigerons vers more pour que vous puissiez la faire défiler. Appuyez sur la barre d'espace pour descendre et sur q pour quitter.
lspci -tv | more
La sortie sera beaucoup plus détaillée :
-[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
À partir de cette sortie, vous pouvez voir les composants matériels spécifiques connectés au bus PCI, tels que le contrôleur IDE et les périphériques Virtio.
Ensuite, regardons le bus SCSI. Dans notre environnement virtuel, le disque dur /dev/vda est présenté comme un périphérique de bloc Virtio, mais nous pouvons toujours explorer les périphériques SCSI s'il y en a. Un moyen convivial de visualiser ces informations est d'utiliser la commande systool. Installons le paquet sysfsutils qui la contient.
sudo apt-get install -y sysfsutils
Maintenant, utilisez systool avec l'option -b scsi pour lister les périphériques sur le bus SCSI.
systool -b scsi
Cette commande affichera les périphériques attachés au bus SCSI :
Bus = "scsi"
Device = "host0"
Device = "host1"
Examiner les ressources système de bas niveau dans /proc
Dans cette étape, vous allez plonger dans le système de fichiers virtuel /proc pour inspecter les ressources système de bas niveau. Le système de fichiers /proc ne contient pas de fichiers réels sur le disque ; il s'agit plutôt d'une interface directe vers les structures de données du noyau. En lisant les fichiers dans /proc, vous pouvez obtenir un aperçu en temps réel de la manière dont le système gère les ressources matérielles telles que les canaux DMA, les interruptions et les ports d'E/S.
Tout d'abord, examinons les canaux d'accès direct à la mémoire (DMA). Le DMA permet à certains périphériques matériels d'accéder directement à la mémoire système sans solliciter le processeur, ce qui améliore les performances. Pour voir quels canaux DMA sont actuellement utilisés, vous pouvez consulter le contenu du fichier /proc/dma.
cat /proc/dma
La sortie est généralement très simple, surtout sur les systèmes modernes ou virtualisés.
4: cascade
Cette sortie montre les canaux DMA enregistrés. Le canal cascade est utilisé pour chaîner les anciens contrôleurs d'interruption et est souvent le seul listé sur le matériel moderne.
Ensuite, examinons les requêtes d'interruption (IRQ). Lorsqu'un périphérique matériel a besoin de l'attention du processeur, il envoie un signal d'interruption. Le fichier /proc/interrupts fournit des statistiques sur le nombre d'interruptions reçues pour chaque numéro d'IRQ.
cat /proc/interrupts
La sortie montre une ventilation détaillée de l'activité des interruptions par cœur de processeur.
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
...
Voici la signification des colonnes :
- La première colonne est le numéro d'IRQ.
- La colonne
CPU0(et les autres colonnes CPU si présentes) indique le nombre d'interruptions traitées par ce cœur de processeur. - La dernière colonne affiche le nom du pilote de périphérique associé à cette interruption. C'est très utile pour déboguer les conflits matériels.
Enfin, regardons les ports d'E/S (I/O ports). Ce sont des adresses mémoire spéciales que le processeur utilise pour communiquer directement avec les périphériques matériels. Le fichier /proc/ioports liste les régions de ports d'E/S qui sont actuellement réservées aux périphériques. Comme la liste peut être longue, il est préférable de la consulter avec less. Vous pouvez faire défiler avec les touches fléchées et appuyer sur q pour quitter.
less /proc/ioports
Vous verrez une liste de plages de mémoire et les périphériques qui les utilisent.
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
...
Cette sortie montre la plage d'adresses mémoire et le périphérique qui l'a revendiquée. Par exemple, vous pouvez voir des plages pour le clavier, les minuteries et le contrôleur de disque ata_piix que nous avons vu à l'étape précédente.
Explorer les informations sur les périphériques dans le système de fichiers /sys
Dans cette dernière étape, vous explorerez le système de fichiers sysfs, monté sur /sys. Alors que /proc fournit des informations sur les processus et certaines ressources matérielles, /sys offre une vue plus structurée du modèle de périphériques du système. Il exporte une représentation hiérarchique des objets du noyau, des périphériques et des pilotes. De nombreux outils que vous avez utilisés précédemment, comme lsblk et udevadm, obtiennent leurs informations en lisant dans /sys.
Tout d'abord, regardons comment les périphériques de bloc sont représentés. Le répertoire /sys/block contient un sous-répertoire pour chaque périphérique de bloc connu du système.
Listez le contenu de /sys/block pour voir les périphériques :
ls -l /sys/block
La sortie montre les périphériques de bloc, y compris les périphériques loop et notre disque principal vda. Notez qu'il s'agit de liens symboliques pointant vers leurs emplacements réels dans la hiérarchie /sys/devices.
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
Maintenant, inspectons le répertoire du périphérique vda. Ce répertoire contient divers fichiers qui représentent les attributs du périphérique.
ls /sys/block/vda
Vous verrez une liste de fichiers et de répertoires :
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
Chaque fichier contient une information spécifique. Par exemple, pour connaître la taille du disque, vous pouvez lire le fichier size.
cat /sys/block/vda/size
La sortie sera un nombre :
83886080
Ce nombre représente la taille du périphérique en secteurs de 512 octets. Vous pouvez également voir des répertoires pour chaque partition, tels que vda1, vda2 et vda3, qui contiennent leurs propres ensembles d'attributs.
Ensuite, explorons comment les périphériques sont organisés par type de bus dans le répertoire /sys/bus. Cela offre une autre façon de naviguer dans la hiérarchie des périphériques.
ls /sys/bus
Vous verrez une liste des différents types de bus pris en charge par le noyau :
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
Puisque nous savons que notre disque /dev/vda est un périphérique de bloc Virtio, regardons à l'intérieur du répertoire /sys/bus/virtio/devices. Cela listera tous les périphériques Virtio détectés.
ls -l /sys/bus/virtio/devices
La sortie montre les périphériques Virtio, identifiés par leurs identifiants de périphérique. Ce sont également des liens symboliques pointant vers l'arborescence principale des périphériques.
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
En explorant /sys, vous pouvez accéder directement aux données brutes que les outils de haut niveau utilisent pour rendre compte du matériel système. C'est un moyen puissant de comprendre comment le noyau Linux perçoit et organise les périphériques.
Résumé
Dans cet atelier, vous avez appris à identifier et à inspecter les périphériques matériels dans un environnement Linux. Vous vous êtes exercé à utiliser la commande lsblk pour lister les périphériques de bloc et leurs partitions sous forme d'arborescence, ainsi que la commande lshw pour obtenir des spécifications matérielles plus détaillées. L'atelier a également abordé l'utilisation de udevadm pour inspecter les propriétés des périphériques gérées par le sous-système udev, et comment visualiser les hiérarchies de bus du système pour les périphériques PCI et SCSI.
De plus, vous avez exploré les informations de bas niveau présentées par le noyau via les pseudo-systèmes de fichiers. Vous avez examiné le système de fichiers /proc pour visualiser les données brutes des ressources système et navigué dans le système de fichiers /sys pour explorer une représentation structurée des périphériques du système et de leurs attributs. Cela vous a permis d'acquérir une compréhension globale de la manière de trouver et d'interpréter les informations matérielles directement depuis le système d'exploitation.



