Bối cảnh: Tôi đang cố tự động cài đặt Linux được chèn sẵn trên một máy chủ hỗ trợ Redfish. Lý tưởng nhất là tôi muốn giữ điều này ở mức không liên quan đến nhà cung cấp nhất có thể để tôi có thể hỗ trợ nhiều loại máy chủ (tức là Dell, HP, Cisco, v.v.), nhưng tôi đang làm việc trên Dell R430 (iDRAC 8 với phần sụn mới nhất).
Mô tả: Tôi đang cố gắng tìm một số cách đáng tin cậy để lấy thông tin về dung lượng lưu trữ từ Redfish và ánh xạ thiết bị này tới một thiết bị khối mà Linux có thể hiểu được để tôi có thể cho trình cài đặt của mình biết nên cài đặt thiết bị nào.
Ví dụ: Tôi lấy hai ổ đĩa và sử dụng Redfish để tạo cho mình một mảng RAID-1. Bây giờ tôi có đối tượng "Âm lượng" này:
{
"@Redfish.Settings": {
"@odata.context": "/redfish/v1/$metadata#Settings.Settings",
"@odata.type": "#Settings.v1_1_0.Settings",
"Cài đặt đối tượng": {
"@odata.id": "/redfish/v1/Systems/System.Embedded.1/Storage/Volumes/Disk.Virtual.0:RAID.Integrated.1-1/Settings"
},
"Thời gian áp dụng được hỗ trợ": [
"Ngay tức khắc",
"Đặt lại",
"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",
"Hành động": {
"#Volume.CheckConsistency": {
"mục tiêu": "/redfish/v1/Systems/System.Embedded.1/Storage/Volumes/Disk.Virtual.0:RAID.Integrated.1-1/Actions/Volume.CheckConsistency"
},
"#Volume.Initialize": {
"[email protected]": [
"Nhanh",
"Chậm"
],
"mục tiêu": "/redfish/v1/Systems/System.Embedded.1/Storage/Volumes/Disk.Virtual.0:RAID.Integrated.1-1/Actions/Volume.Initialize"
}
},
"BlockSizeByte": 512,
"Bytes dung lượng": 199447543808,
"Mô tả": "Đĩa ảo 0",
"Mã hóa": sai,
"Kiểu mã hóa": [
"Mã hóa NativeDrive"
],
"Id": "Disk.Virtual.0:RAID.Integrated.1-1",
"Định danh": [],
"Liên kết": {
"Ổ đĩa": [
{
"@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
},
"Tên": "Đĩa ảo 0",
"Hoạt động": [],
"OptimumIOSizeBytes": 65536,
"Trạng thái": {
"Sức khỏe": "OK",
"HealthRollup": "OK",
"Trạng thái": "Đã bật"
},
"Loại âm lượng": "Được nhân đôi"
}
Có điều gì ở đây mà tôi có thể sử dụng một cách đáng tin cậy để tìm ra đường dẫn thiết bị khối trong Linux không? Trong trường hợp này, tôi biết đó là:
$ lsblk /dev/sdc
TÊN MAJ:KÍCH THƯỚC RM TỐI THIỂU RO LOẠI NÚI
sdc 8:32 0 185,8G 0 đĩa
$ ls -al /dev/đĩa/by-id/ | grep sdc
scsi-361866da08170ff0026091a95033dd20a
wwn-0x61866da08170ff0026091a95033dd20a
$ ls -al /dev/đĩa/theo đường dẫn/ | grep sdc
pci-0000:01:00.0-scsi-0:2:0:0
Nhưng cho đến nay tôi không thấy có cách rõ ràng nào để chuyển từ đầu ra của Redfish sang bất kỳ giá trị nào trong số đó. Có lẽ có một số định danh khác ở phía Linux có thể giúp tôi tiến gần hơn để tôi có thể làm việc ngược lại? Hoặc ở một nơi nào khác trong Redfish, tôi có thể truy vấn đường dẫn PCIe? Tôi biết iDRAC 9 có thể cung cấp các đường dẫn PCIe ở cấp Khung gầm nhưng iDRAC 8 thì không thể, nhưng ngay cả khi đó chúng dường như không ánh xạ theo bất kỳ cách nào tới các đường dẫn trong Linux này.
Chỉnh sửa đầu tiên: Tôi đã xem xét việc sử dụng các công cụ khác nhau ở phía Linux để thẩm vấn bộ điều khiển RAID (megacli, perccli, một số tập lệnh Python trình bao bọc cho các tập lệnh này như megaclisas.py
), nhưng cho đến nay không có gì ở đây giúp giải quyết vấn đề lập bản đồ.