背景:我正在尝试在支持 Redfish 的服务器上自动进行预置 Linux 安装。理想情况下,我希望尽可能保持与供应商无关,以便我可以支持多种类型的服务器(例如 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.Settings",
"SettingsObject": {
"@odata.id": "/redfish/v1/Systems/System.Embedded.1/Storage/Volumes/Disk.Virtual.0:RAID.Integrated.1-1/Settings"
},
"SupportedApplyTimes": [
"Immediate",
"OnReset",
"AtMaintenanceWindowStart",
"InMaintenanceWindowOnReset"
]
},
"@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",
"Actions": {
"#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]": [
"Fast",
"Slow"
],
"target": "/redfish/v1/Systems/System.Embedded.1/Storage/Volumes/Disk.Virtual.0:RAID.Integrated.1-1/Actions/Volume.Initialize"
}
},
"BlockSizeBytes": 512,
"CapacityBytes": 199447543808,
"Description": "Virtual Disk 0",
"Encrypted": false,
"EncryptionTypes": [
"NativeDriveEncryption"
],
"Id": "Disk.Virtual.0:RAID.Integrated.1-1",
"Identifiers": [],
"Links": {
"Drives": [
{
"@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"
}
],
"[email protected]": 2
},
"Name": "Virtual Disk 0",
"Operations": [],
"OptimumIOSizeBytes": 65536,
"Status": {
"Health": "OK",
"HealthRollup": "OK",
"State": "Enabled"
},
"VolumeType": "Mirrored"
}
这里有什么可以可靠地用来找出 Linux 中的块设备路径吗? 在这种情况下,我知道它是:
$ lsblk /dev/sdc
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdc 8:32 0 185.8G 0 disk
$ 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
),但到目前为止,没有任何工具可以帮助解决映射问题。