Введение
В этой лабораторной работе вы освоите ключевые навыки исследования, идентификации и проверки аппаратных устройств в среде Linux. Вы получите практический опыт работы с мощными утилитами командной строки, чтобы понять принципы взаимодействия операционной системы с физическими компонентами. Цель работы — сформировать базовое понимание управления оборудованием в Linux, что критически важно для системного администрирования, настройки производительности и поиска неисправностей.
Вы начнете с вывода списка блочных устройств с помощью lsblk и lshw, чтобы получить общее представление о хранилищах данных. После этого вы воспользуетесь udevadm для детального изучения свойств устройств и правил их обработки. Затем руководство поможет вам изучить иерархию шин PCI и SCSI, чтобы увидеть, как устройства подключены к системе. Наконец, вы погрузитесь в низкоуровневую системную информацию, исследуя виртуальные файловые системы /proc и /sys, что даст вам полное представление об аппаратном обеспечении вашего компьютера с точки зрения ядра.
Просмотр списка блочных устройств с помощью lsblk и lshw
На этом этапе вы научитесь идентифицировать и выводить список блочных устройств, подключенных к вашей системе. Блочные устройства — это устройства хранения, которые передают данные блоками фиксированного размера, такие как жесткие диски, твердотельные накопители (SSD) и USB-флешки. Для этой цели мы будем использовать две популярные команды: lsblk и lshw.
Сначала воспользуемся командой lsblk, чтобы получить древовидное представление всех доступных блочных устройств. Эта команда считывает данные из файловой системы sysfs и базы данных udev.
Выполните команду lsblk в терминале:
lsblk
Вы увидите вывод, похожий на этот, со списком устройств и их разделов:
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
/
Краткое пояснение столбцов:
NAME: Имя устройства.MAJ:MIN: Основной и второстепенный номера устройства, используемые ядром для идентификации.RM: Съемное устройство (1 — да, 0 — нет).SIZE: Размер устройства.RO: Устройство только для чтения (1 — да, 0 — нет).TYPE: Тип устройства (например, disk — диск, part — раздел, loop — петлевое устройство).MOUNTPOINTS: Точки монтирования устройства в файловой системе.
Хотя lsblk отлично подходит для быстрого обзора, команда lshw (list hardware) предоставляет гораздо более подробную информацию. Команда lshw может быть не установлена по умолчанию. Давайте сначала установим ее.
sudo apt-get update && sudo apt-get install -y lshw
После завершения установки вы можете использовать lshw для получения подробных сведений о конкретных классах оборудования. Например, чтобы увидеть информацию о контроллерах хранения (таких как SATA или NVMe), используйте опцию -class storage.
sudo lshw -class storage
В выводе будет представлена информация о самом интерфейсе хранения.
*-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
Чтобы получить более детальную информацию о разделах и логических томах (аналогично lsblk, но подробнее), используйте опцию -class volume.
sudo lshw -class volume
Эта команда предоставляет массу данных, включая логические имена, серийные номера и возможности каждого раздела.
*-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
Используя lsblk и lshw, вы можете получить как высокоуровневый обзор, так и детальное низкоуровневое представление устройств хранения в вашей системе Linux.
Проверка свойств устройств с помощью udevadm
На предыдущем этапе вы научились выводить список блочных устройств. Теперь мы углубимся и изучим специфические свойства этих устройств с помощью команды udevadm. udev — это менеджер устройств для ядра Linux, который динамически управляет узлами устройств в каталоге /dev. Команда udevadm является инструментом управления для udev, позволяющим запрашивать подробную информацию из базы данных udev. Это особенно полезно перед созданием пользовательских правил udev для автоматического управления устройствами.
Давайте проверим свойства основного диска /dev/vda, который вы идентифицировали ранее.
Чтобы отобразить свойства /dev/vda в простом формате «ключ-значение», выполните следующую команду. Флаг -q property указывает udevadm запросить в базе данных все известные свойства устройства, а -n /dev/vda задает имя узла устройства.
udevadm info -q property -n /dev/vda
Выводом будет список переменных окружения, описывающих устройство:
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:
Этот вывод содержит ценные сведения, такие как ID_MODEL, ID_VENDOR и уникальный ID_SERIAL. Эти свойства часто используются для написания правил udev, которые применяются к конкретному устройству независимо от порядка его обнаружения ядром.
Для еще более детального иерархического представления можно запросить устройство, используя его путь в sysfs. Сначала найдите путь sysfs для /dev/vda:
udevadm info -q path -n /dev/vda
Выводом будет путь устройства внутри файловой системы /sys:
/devices/pci0000:00/0000:00:04.0/virtio1/block/vda
Теперь используйте этот путь с флагами -a (обход атрибутов) и -p (путь), чтобы увидеть все атрибуты устройства, начиная от родительских устройств и заканчивая указанным. Это дает полную картину устройства и его родительских контроллеров.
udevadm info -a -p $(udevadm info -q path -n /dev/vda)
Эта команда генерирует гораздо более длинный вывод, показывая атрибуты самого блочного устройства, а также родительского устройства virtio и контроллера PCI. Такой уровень детализации необходим для продвинутого управления устройствами и устранения неполадок. Мы не приводим здесь полный вывод из-за его объема, но вы можете изучить его самостоятельно.
Просмотр иерархии шин PCI и SCSI
На этом этапе вы узнаете, как устройства организованы на системных шинах. Шина — это коммуникационная система, которая передает данные между компонентами внутри компьютера. Мы сосредоточимся на двух важных шинах: PCI (Peripheral Component Interconnect) и SCSI (Small Computer System Interface). Понимание их иерархии помогает в диагностике проблем с оборудованием и понимании того, как устройства (например, ваш жесткий диск) подключены к системе.
Сначала изучим шину PCI, к которой подключено большинство высокоскоростных компонентов на материнской плате. Стандартным инструментом для этого является команда lspci. Пакет pciutils, предоставляющий эту команду, обычно предустановлен, но мы убедимся в этом.
sudo apt-get update && sudo apt-get install -y pciutils
Теперь, чтобы отобразить иерархию шины PCI в виде дерева, используйте команду lspci с опцией -t.
lspci -t
Вывод будет выглядеть примерно так, показывая связи между шинами и устройствами:
-[0000:00]-+-00.0
+-01.0
+-01.1
+-01.3
+-04.0
\-05.0
Это дерево показывает соединения, но не указывает, что это за устройства. Чтобы сделать его более информативным, добавьте опцию -v (подробно). Это позволит включить имена устройств и используемый драйвер ядра для каждого из них. Поскольку вывод может быть длинным, мы перенаправим его в more, чтобы вы могли прокручивать текст. Нажимайте пробел для прокрутки вниз и q для выхода.
lspci -tv | more
Вывод станет гораздо более детальным:
-[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
Из этого вывода вы можете увидеть конкретные аппаратные компоненты, подключенные к шине PCI, такие как IDE-контроллер и устройства Virtio.
Далее рассмотрим шину SCSI. В нашей виртуальной среде жесткий диск /dev/vda представлен как блочное устройство Virtio, но мы все равно можем исследовать устройства SCSI, если они присутствуют. Удобный способ просмотра этой информации — команда systool. Установим пакет sysfsutils, который ее содержит.
sudo apt-get install -y sysfsutils
Теперь используйте systool с опцией -b scsi, чтобы вывести список устройств на шине SCSI.
systool -b scsi
Эта команда покажет устройства, подключенные к шине SCSI:
Bus = "scsi"
Device = "host0"
Device = "host1"
Изучение низкоуровневых системных ресурсов в /proc
На этом этапе вы погрузитесь в виртуальную файловую систему /proc для проверки низкоуровневых системных ресурсов. Файловая система /proc не содержит реальных файлов на диске; вместо этого она является прямым интерфейсом к структурам данных ядра. Читая файлы в /proc, вы можете в реальном времени наблюдать, как система управляет аппаратными ресурсами, такими как каналы DMA, прерывания и порты ввода-вывода (I/O).
Сначала рассмотрим каналы прямого доступа к памяти (DMA). DMA позволяет определенным аппаратным устройствам обращаться к системной памяти напрямую, минуя центральный процессор, что повышает производительность. Чтобы увидеть, какие каналы DMA используются в данный момент, просмотрите содержимое файла /proc/dma.
cat /proc/dma
Вывод обычно очень прост, особенно в современных или виртуализированных системах.
4: cascade
Здесь показаны зарегистрированные каналы DMA. Канал cascade используется для каскадирования контроллеров прерываний старого типа и часто является единственным в списке на современном оборудовании.
Затем изучим запросы на прерывание (IRQ). Когда аппаратному устройству требуется внимание процессора, оно посылает сигнал прерывания. Файл /proc/interrupts предоставляет статистику о том, сколько прерываний было получено для каждого номера IRQ.
cat /proc/interrupts
Вывод показывает подробную разбивку активности прерываний по ядрам процессора.
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
...
Значение столбцов:
- Первый столбец — номер IRQ.
- Столбец
CPU0(и другие столбцы CPU, если они есть) показывает количество прерываний, обработанных этим ядром процессора. - Последний столбец показывает имя драйвера устройства, связанного с этим прерыванием. Это очень полезно для отладки конфликтов оборудования.
Наконец, взглянем на порты ввода-вывода (I/O ports). Это специальные адреса памяти, которые процессор использует для прямой связи с аппаратными устройствами. Файл /proc/ioports перечисляет области портов ввода-вывода, зарезервированные в данный момент для устройств. Поскольку список может быть длинным, лучше просматривать его с помощью less. Вы можете прокручивать список стрелками и нажать q для выхода.
less /proc/ioports
Вы увидите список диапазонов памяти и использующих их устройств.
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
...
Этот вывод показывает диапазон адресов памяти и устройство, которое его заняло. Например, вы можете увидеть диапазоны для клавиатуры, таймеров и дискового контроллера ata_piix, который мы видели на предыдущем этапе.
Исследование информации об устройствах в файловой системе /sys
На этом заключительном этапе вы изучите файловую систему sysfs, смонтированную в /sys. В то время как /proc предоставляет информацию о процессах и некоторых аппаратных ресурсах, /sys предлагает более структурированное представление модели устройств системы. Она экспортирует иерархическое представление объектов ядра, устройств и драйверов. Многие инструменты, которые вы использовали ранее, такие как lsblk и udevadm, получают информацию именно из /sys.
Сначала посмотрим, как представлены блочные устройства. Каталог /sys/block содержит подкаталог для каждого блочного устройства, известного системе.
Выведите содержимое /sys/block, чтобы увидеть устройства:
ls -l /sys/block
В выводе отобразятся блочные устройства, включая петлевые устройства (loop) и наш основной диск vda. Обратите внимание, что это символические ссылки, указывающие на их реальное расположение в иерархии /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
Теперь изучим каталог устройства vda. Этот каталог содержит различные файлы, представляющие атрибуты устройства.
ls /sys/block/vda
Вы увидите список файлов и каталогов:
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
Каждый файл содержит определенную информацию. Например, чтобы узнать размер диска, можно прочитать файл size.
cat /sys/block/vda/size
Выводом будет число:
83886080
Это число представляет размер устройства в 512-байтовых секторах. Вы также можете увидеть каталоги для каждого раздела, такие как vda1, vda2 и vda3, которые содержат свои собственные наборы атрибутов.
Далее изучим, как устройства организованы по типам шин в каталоге /sys/bus. Это альтернативный способ навигации по иерархии устройств.
ls /sys/bus
Вы увидите список различных типов шин, поддерживаемых ядром:
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
Поскольку мы знаем, что наш диск /dev/vda является блочным устройством Virtio, заглянем в каталог /sys/bus/virtio/devices. Там перечислены все обнаруженные устройства Virtio.
ls -l /sys/bus/virtio/devices
Вывод показывает устройства Virtio, идентифицированные по их ID. Это также символические ссылки, указывающие обратно на основное дерево устройств.
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
Исследуя /sys, вы получаете прямой доступ к необработанным данным, которые инструменты более высокого уровня используют для отчетов об оборудовании системы. Это мощный способ понять, как ядро Linux видит и организует устройства.
Резюме
В этой лабораторной работе вы научились идентифицировать и проверять аппаратные устройства в среде Linux. Вы попрактиковались в использовании команды lsblk для вывода списка блочных устройств и их разделов в древовидном формате, а также команды lshw для получения более подробных технических характеристик оборудования. Лабораторная работа также охватила использование udevadm для проверки свойств устройств, управляемых подсистемой udev, и способы просмотра иерархий системных шин для устройств PCI и SCSI.
Кроме того, вы изучили низкоуровневую информацию, предоставляемую ядром через псевдофайловые системы. Вы исследовали файловую систему /proc для просмотра необработанных данных о системных ресурсах и перемещались по файловой системе /sys, чтобы изучить структурированное представление устройств системы и их атрибутов. Это дало вам всестороннее понимание того, как находить и интерпретировать информацию об оборудовании непосредственно из операционной системы.



