Контекст: я пытаюсь автоматизировать предварительную установку Linux на сервере с поддержкой Redfish. В идеале я хочу, чтобы это было как можно более независимым от производителя, чтобы я мог поддерживать несколько типов серверов (например, Dell, HP, Cisco и т. д.), но я работаю над Dell R430 (iDRAC 8 с последней прошивкой).
Описание: я пытаюсь найти какой-нибудь надежный способ получить информацию о томе хранилища от Redfish и сопоставить ее с блочным устройством, которое может понять Linux, чтобы я мог указать своему установщику, на какое устройство установить.
Пример: я беру два диска и с помощью Redfish создаю себе массив RAID-1. Теперь у меня есть этот объект "Объем":
{
"@Redfish.Settings": {
"@odata.context": "/redfish/v1/$metadata#Settings.Settings",
"@odata.type": "#Settings.v1_1_0.Настройки",
"Объект Настройки": {
"@odata.id": "/redfish/v1/Systems/System.Embedded.1/Storage/Volumes/Disk.Virtual.0:RAID.Integrated.1-1/Settings"
},
«Суппортедапплитаймс»: [
"Немедленный",
"При сбросе",
«На старте окна обслуживания»,
"ИнМаинтенансвиндовонресет"
]
},
"@odata.context": "/redfish/v1/$metadata#Volume.Volume",
"@odata.id": "/redfish/v1/Systems/System.Embedded.1/Storage/Volumes/Disk.Virtual.0:RAID.Integrated.1-1",
"@odata.type": "#Volume.v1_0_3.Volume",
"Действия": {
"#Volume.CheckConsistency": {
"target": "/redfish/v1/Systems/System.Embedded.1/Storage/Volumes/Disk.Virtual.0:RAID.Integrated.1-1/Actions/Volume.CheckConsistency"
},
"#Volume.Initialize": {
"[email protected]": [
"Быстрый",
"Медленный"
],
"target": "/redfish/v1/Systems/System.Embedded.1/Storage/Volumes/Disk.Virtual.0:RAID.Integrated.1-1/Actions/Volume.Initialize"
}
},
«Размер блока»: 512,
"CapacityBytes": 199447543808,
"Описание": "Виртуальный диск 0",
«Зашифровано»: ложь,
«Типы шифрования»: [
«Нативдрайвэнкриптион»
],
"Id": "Диск.Виртуальный.0:RAID.Интегрированный.1-1",
«Идентификаторы»: [],
"Ссылки": {
"Драйвы": [
{
"@odata.id": "/redfish/v1/Systems/System.Embedded.1/Storage/Drives/Disk.Bay.0:Enclosure.Internal.0-1:RAID.Integrated.1-1"
},
{
"@odata.id": "/redfish/v1/Systems/System.Embedded.1/Storage/Drives/Disk.Bay.1:Enclosure.Internal.0-1:RAID.Integrated.1-1"
}
],
"Диски@odata.count": 2
},
"Имя": "Виртуальный диск 0",
"Операции": [],
"Оптимиосайзебайт": 65536,
"Положение дел": {
«Здоровье»: «ОК»,
"HealthRollup": "ОК",
"Состояние": "Включено"
},
"VolumeType": "Зеркальный"
}
Есть ли здесь что-нибудь, что я могу надежно использовать, чтобы выяснить, каким будет путь к блочному устройству в Linux? В данном случае я знаю, что это:
$ lsblk /dev/sdc
НАИМЕНОВАНИЕ MAJ:MIN RM РАЗМЕР RO ТИП ТОЧКА КРЕПЛЕНИЯ
sdc 8:32 0 185.8G 0 диск
$ ls -al /dev/disk/by-id/ | grep sdc
scsi-361866da08170ff0026091a95033dd20a
wwn-0x61866da08170ff0026091a95033dd20a
$ ls -al /dev/disk/by-path/ | grep sdc
PCI-0000:01:00.0-SCSI-0:2:0:0
Но пока я не вижу очевидного способа получить от вывода Redfish какое-либо из этих значений. Возможно, есть какой-то другой идентификатор на стороне Linux, который мог бы приблизить меня, чтобы я мог работать в обратном направлении? Или где-то еще в Redfish я могу запросить путь PCIe? Я знаю, что iDRAC 9 может предоставлять пути PCIe на уровне шасси, а iDRAC 8 — нет, но даже в этом случае они, похоже, никак не сопоставляются с этими путями в Linux.
Первое редактирование: я изучил использование различных инструментов на стороне Linux для опроса контроллера RAID (megacli, perccli, несколько сценариев-оболочек Python для таких, как megaclisas.py
), но пока здесь ничего не помогает с проблемой отображения.