Как быстро вытащить всю подноготную о железе сервера в Linux
Подключаешься по SSH к незнакомому серверу и пытаешься понять, что там вообще внутри. Какая материнская плата, сколько планок памяти занято, на какой частоте они работают, в каком режиме висит диск.
Обычно в ход идет привычный набор разрозненных команд: lspci, lsusb, dmidecode, lscpu или чтение файлов в /proc. В итоге сидишь и склеиваешь общую картину в голове по кусочкам.
Утилита lshw (Hardware Lister) решает эту рутину целиком. Она собирает данные о конфигурации компьютера в единое дерево оборудования. Причем делает это не только в консоли, но и выгружает всё в готовые форматы вроде XML или HTML.
Что умеет lshw
Программа сканирует систему через несколько источников: опрашивает DMI (SMBIOS) на x86 и EFI, заглядывает в CPUID, парсит списки шин PCI/AGP, USB, SCSI, IDE/ATA, а на архитектуре PowerPC читает дерево устройств OpenFirmware.
В результате на выходе получается детальный отчет, где расписано железо:
- Точная раскладка оперативной памяти: тайминги, объем каждого модуля, занятые слоты и поддерживаемый максимум.
- Версия прошивки BIOS/UEFI и ревизия материнской платы.
- Конфигурация процессора, поддерживаемые инструкции, частота шины и размеры кэшей всех уровней.
- Контроллеры накопителей, сетевые карты и подключенная периферия с указанием используемых драйверов ядра.
Отдельный плюс в том, что утилита не просто выдает сырой ID устройства, а подтягивает понятные названия из локальных баз hwdata и /usr/share/misc/.
Форматы вывода и практические сценарии
Обычный текстовый вывод lshw иногда кажется слишком длинным, если запустить команду без параметров. Но у нее есть гибкие флаги, которые сильно упрощают жизнь администраторам и разработчикам инфраструктуры.
Компактная сводка
Когда нужно быстро оценить общую картину без бесконечной простыни текста, выручает краткий режим:
sudo lshw -short
Он выведет аккуратную таблицу со статусом каждого узла, путями устройств и кратким описанием компонентов.
Генерация отчетов в HTML
Если нужно передать инвентаризацию коллегам или прикрепить состояние сервера к тикету, можно собрать красивый HTML-файл одной командой:
sudo lshw -html > server_spec.html
Такой отчет сразу готов к просмотру в браузере, содержит понятные сворачиваемые блоки и визуально разделяет контроллеры и дочерние девайсы.
Автоматизация через XML и JSON
Для скриптов инвентаризации или автоматического аудита машин утилита умеет отдавать сырые структурированные данные:
sudo lshw -xml > hardware.xml
Этот XML легко распарсить на Python или загнать в базу данных CMDB при настройке нового сервера.
Сборка и особенности под капотом
Проект написан на C++ и существует очень давно. Код компилируется даже старыми версиями компиляторов и не требует тяжелых зависимостей.
Собрать бинарник из исходников можно буквально за пару секунд:
make
sudo make install
Если вы собираете минималистичный образ для восстановления системы (rescue disk), lshw можно скомпилировать статически или сжать через UPX, чтобы бинарник весил копейки:
make static
make compressed
Для любителей графического интерфейса доступна сборка lshw-gtk (собирается через make gui), но на практике консольной версии более чем достаточно.
Кому пригодится
Утилита вряд ли нужна тем, кто работает исключительно с контейнерами или серверлесс-функциями. Но если вы настраиваете bare-metal серверы, собираете домашний сервер, диагностируете проблемы с определением планок памяти или пишете скрипты для инвентаризации парка машин, lshw экономит кучу времени. Достаточно один раз запустить ее с правами root, чтобы не гадать, какая именно железка установлена в корпусе.
