Вопрос или проблема
В прошлом я использовал скрипт в Solaris 11. В этом скрипте я использовал команду croinfo -hO Dc
(croinfo означает информация о шасси, разъеме и занятых местах). Он генерировал следующий вывод:
root@my-host:~# croinfo -hO Dc
/dev/chassis/SYS/DBP/HDD0/NVME/disk:c2t1d0
/dev/chassis/SYS/DBP/HDD0/NVME/hba:
/dev/chassis/SYS/DBP/HDD1/NVME/disk:c1t1d0
/dev/chassis/SYS/DBP/HDD1/NVME/hb
.... дальше ...
Теперь мне нужно запустить этот скрипт в Linux. Скрипт не сработает, потому что команда croinfo
не существует в Linux. Мне точно нужен вывод, похожий на croinfo -hO Dc
, чтобы проанализировать его и получить необходимую информацию.
Существует ли аналог команды Solaris “croinfo” в Linux? Я не смог найти такую команду. Можно ли использовать несколько команд Linux, чтобы получить вывод, похожий на croinfo -hO Dc
(где -O Dc
запрашивает информацию типа devchassis и occupant-compdev в виде, пригодном для разбора, а -h
подавляет заголовки)?
В Linux нет прямого аналога croinfo
. Многие из этих данных можно найти в /sys и /dev, а затем вы можете отформатировать их как вам угодно. Например, чтобы получить информацию NVMe, как показано в вашем вопросе, вы можете посмотреть, что находится в /sys/class/nvme/
. Точно так же, для определения устройств с конкретными данными о их слотах или контроллерах, вы можете исследовать пути в /sys/class/scsi_host
, /sys/class/block
или /sys/class/scsi_disk
.
Например, предположим, что вы хотите найти детали о конкретном NVMe-устройстве. Вы можете найти информацию о его контроллере и других деталях в /sys/class/nvme
:
ls /sys/class/nvme/nvme0/
Этот каталог содержит ссылки на подкаталоги, которые предоставляют детали о контроллере NVMe устройства, пространстве имен и такой информации, как информация PCI.
В качестве примера, который вы можете экстраполировать на другие виды аппаратного обеспечения, чтобы определить слот или информацию PCI для nvme0n1, следуйте символической ссылке от /sys/class/nvme/nvme0/device к его PCI слоту:
% readlink -f /sys/class/nvme/nvme0/device
/sys/devices/pci0000:00/0000:00:1f.0/0000:02:00.0
Путь показывает точный PCI адрес, который вы можете использовать для поиска дополнительных деталей, включая такие вещи, как расположение слота.
Для SCSI-дисков (например, /dev/sda
) вы можете найти больше информации в /sys/class/scsi_disk
, и так далее для других аппаратных устройств.
Используя такие данные, вы можете имитировать вывод croinfo, извлекая данные и форматируя их соответственно.
Ответ или решение
Вопрос о том, как получить эквивалент команды Solaris croinfo -hO Dc
в Linux, требует более глубокого анализа возможностей операционной системы, так как Linux не имеет прямого аналога данной команды. Однако с помощью нескольких встроенных инструментов и доступных директорий можно получить информацию, подобную той, что генерируется в Solaris.
1. Понимание команды croinfo
Команда croinfo
в Solaris позволяет получить информацию о шасси, разъемах и их содержимом. Параметры -h
и -O Dc
указывают на необходимость подавления заголовков и форматирования вывода в парсируемом виде соответственно. Поэтому перед нами стоит задача извлечь такие же данные из Linux.
2. Использование команд Linux для аналогичного вывода
В Linux информация о подключенных устройствах и их конфигурации хранится в виртуальной файловой системе /sys
. Ниже перечислены несколько команд и подходов, которые можно использовать для получения подобной информации.
2.1 Доступ к информации о NVMe-устройствах
Для получения информации о NVMe-устройствах можно использовать следующие команды:
ls /sys/class/nvme/
Это выведет список всех NVMe-устройств. Подкаталоги содержат ссылки на процессоры и пространства имен:
readlink -f /sys/class/nvme/nvme0/device
Эта команда покажет путь к PCI-устройству, что позволит вам выяснить информации о его слоте.
2.2 Получение информации о SCSI устройствах
Для SCSI-накопителей можно использовать следующие команды:
ls /sys/class/block/
Эта команда покажет все блочные устройства, включая SCSI-диски, например, /dev/sda
. Далее вы можете воспользоваться:
cat /sys/class/block/sda/device/scsi_device
Это позволит посчитать уникальный идентификатор SCSI, который предоставит информацию об устройстве.
2.3 Объединение данных
Теперь, чтобы получить данные, аналогичные croinfo -hO Dc
, нужно объединить информацию из разных команд и отформатировать вывод. Например, можем использовать awk
или sed
для обработки строк с информацией или написать простой bash-скрипт, чтобы обобщить и вывести информацию в нужном формате. Пример простого скрипта:
#!/bin/bash
for nvme in /sys/class/nvme/nvme*/; do
device=$(readlink -f "$nvme/device")
echo "$device"
done
for scsi in /sys/class/scsi_disk/*; do
scsi_id=$(basename "$scsi")
echo "/dev/${scsi_id}"
done
3. Заключение
Хотя Linux не предоставляет аналог croinfo
, используя команды для доступа к /sys/class/nvme/
и /sys/class/scsi_disk/
, вы можете написать скрипты, которые предоставят аналогичную информацию. Данный подход требует дополнительной работы по формату вывода, однако это реалистичная и полезная альтернатива, учитывая гнучкость Linux и доступность данных о системе.
В будущем, возможно, стоит рассмотреть использование инструментов и библиотек, таких как udev
, lsblk
, и lshw
, которые могут предоставить информацию о конфигурации системы в более удобной и парсируемой форме.