Merged
调整硬盘厂商为ATA时通过ManufacturerOUI获取对应厂商名的逻辑,修复获取控制器下硬盘列表时,硬盘列表未更新到资源树上的问题 #487
XueyuansongAdd on Jul 10
调整硬盘厂商为ATA时通过ManufacturerOUI获取对应厂商名的逻辑,修复获取控制器下硬盘列表时,硬盘列表未更新到资源树上的问题 #487
Merged
Total: 6 files changed+105-116
| @@ -1,5 +1,9 @@ | |||
| 1 | # Changelog | 1 | # Changelog |
| 2 | All notable changes to this project will be documented in this file. | 2 | All notable changes to this project will be documented in this file. |
| 3 | +## [1.81.27] - 2026-07-10 | ||
| 4 | +调整硬盘厂商为ATA时通过ManufacturerOUI获取对应厂商名的逻辑 | ||
| 5 | +修复获取控制器下硬盘列表时,硬盘列表未更新到资源树上的问题 | ||
| 6 | + | ||
| 3 | ## [1.81.26] - 2026-07-10 | 7 | ## [1.81.26] - 2026-07-10 |
| 4 | 反合BIWIN SS821 SATA SSD 和长江存储PE511 NVMe SSD | 8 | 反合BIWIN SS821 SATA SSD 和长江存储PE511 NVMe SSD |
| 5 | 9 | ||
| @@ -2,7 +2,7 @@ | |||
| 2 | "name": "storage", | 2 | "name": "storage", |
| 3 | "type": "application", | 3 | "type": "application", |
| 4 | "deployConfig": "hardware.service", | 4 | "deployConfig": "hardware.service", |
| 5 | - "version": "1.81.26", | 5 | + "version": "1.81.27", |
| 6 | "author": "Huawei", | 6 | "author": "Huawei", |
| 7 | "license": "Mulan PSL v2", | 7 | "license": "Mulan PSL v2", |
| 8 | "codeGenPolicy": { | 8 | "codeGenPolicy": { |
| @@ -368,32 +368,27 @@ function c_handler_drives:update_hw_info(obj, data) | |||
| 368 | if not is_nil_or_null(data.PowerState) then | 368 | if not is_nil_or_null(data.PowerState) then |
| 369 | obj.PowerState = self:get_val_or_default(data.PowerState, def.INVALID_U8) | 369 | obj.PowerState = self:get_val_or_default(data.PowerState, def.INVALID_U8) |
| 370 | end | 370 | end |
| 371 | - | ||
| 372 | - -- 如果硬盘厂商为ATA则根据硬盘ManufacturerOUI判断厂商名 | ||
| 373 | - if not is_nil_or_null(data.ManufacturerOUI) and obj.Manufacturer == 'ATA' then | ||
| 374 | - obj.Manufacturer = method_misc:get_manufacturer_name_by_oui(data.ManufacturerOUI) | ||
| 375 | - end | ||
| 376 | end | 371 | end |
| 377 | 372 | ||
| 378 | --- 部分不能直接获取到厂商,需要使用ManufacturerOUI转换 | 373 | +-- 对于一些带内获取硬盘厂商为ATA的SATA盘,通过ManufacturerOUI获取对应的厂商名 |
| 379 | -function c_handler_drives:update_drive_manufacture(obj, data) | 374 | +function c_handler_drives:update_drive_manufacturer(obj, data) |
| 380 | - if data.Oem and data.Oem.Huawei and data.Oem.Huawei.ManufacturerOUI then | 375 | + if not is_nil_or_null(data.Manufacturer) and data.Manufacturer ~= 'ATA' then |
| 381 | - local vendor_id = tonumber(data.Oem.Huawei.ManufacturerOUI, 16) | 376 | + obj.Manufacturer = data.Manufacturer |
| 382 | - if vendor_id then | 377 | + return |
| 383 | - local vendor_name = def.PD_VENDOR_ID_NAME_MAP[vendor_id] | ||
| 384 | - if vendor_name then | ||
| 385 | - obj.Manufacturer = vendor_name | ||
| 386 | - return | ||
| 387 | - end | ||
| 388 | - end | ||
| 389 | end | 378 | end |
| 379 | + -- data.Manufacturer 为 nil/null 或 'ATA',尝试通过 OUI 映射 | ||
H | |||
| 380 | + if data.Oem and data.Oem.Huawei and not is_nil_or_null(data.Oem.Huawei.ManufacturerOUI) then | ||
| 381 | + obj.Manufacturer = method_misc:get_manufacturer_name_by_oui(data.Oem.Huawei.ManufacturerOUI) | ||
| 382 | + return | ||
| 383 | + end | ||
| 384 | + -- 无 OUI,用原值 | ||
| 390 | if not is_nil_or_null(data.Manufacturer) then | 385 | if not is_nil_or_null(data.Manufacturer) then |
| 391 | obj.Manufacturer = self:get_val_or_default(data.Manufacturer, def.INVALID_STRING) | 386 | obj.Manufacturer = self:get_val_or_default(data.Manufacturer, def.INVALID_STRING) |
| 392 | end | 387 | end |
| 393 | end | 388 | end |
| 394 | - | 389 | + |
| 395 | function c_handler_drives:update_drive_info(obj, data) | 390 | function c_handler_drives:update_drive_info(obj, data) |
| 396 | - self:update_drive_manufacture(obj, data) | 391 | + self:update_drive_manufacturer(obj, data) |
| 397 | 392 | ||
| 398 | if not is_nil_or_null(data.Model) then | 393 | if not is_nil_or_null(data.Model) then |
| 399 | obj.Model = self:get_val_or_default(data.Model, def.INVALID_STRING) | 394 | obj.Model = self:get_val_or_default(data.Model, def.INVALID_STRING) |
| @@ -136,6 +136,87 @@ local pd_log_defs = { | |||||||||||
| 136 | } | 136 | } | ||||||||
| 137 | } | 137 | } | ||||||||
| 138 | 138 | ||||||||||
| 139 | +local pd_attri_id_wear = { | ||||||||||
| 140 | + ATA_SMART_ATTRIBUTE_ID_MEDIA_WEAROUT_INDICATOR = 233, | ||||||||||
| 141 | + ATA_SMART_ATTRIBUTE_ID_PERCENT_LIFETIME_REMAINING = 202, | ||||||||||
| 142 | + ATA_SMART_ATTRIBUTE_ID_LIFE_REMAINING = 245, | ||||||||||
| 143 | + ATA_SMART_ATTRIBUTE_ID_WEAR_LEVELING_COUNT = 177, | ||||||||||
| 144 | + ATA_SMART_ATTRIBUTE_ID_AVAILABLE_RESERVED_SPACE = 232, | ||||||||||
| 145 | +} | ||||||||||
| 146 | + | ||||||||||
| 147 | +local pd_smart_defs = { | ||||||||||
| 148 | + PD_VENDOR_NAME_INTEL = 'INTEL', | ||||||||||
| 149 | + PD_VENDOR_NAME_SAMSUNG = 'SAMSUNG', | ||||||||||
| 150 | + PD_VENDOR_NAME_HUAWEI = 'HUAWEI', | ||||||||||
| 151 | + PD_VENDOR_NAME_AJ = 'UMIS', | ||||||||||
| 152 | + | ||||||||||
| 153 | + VENDOR_ATTR_ID = { | ||||||||||
| 154 | + ['INTEL'] = 233, | ||||||||||
| 155 | + ['SAMSUNG'] = 177, | ||||||||||
| 156 | + ['MICRON'] = 202, | ||||||||||
| 157 | + ['SANDISK'] = 245, | ||||||||||
| 158 | + ['SEAGATE'] = 0, | ||||||||||
| 159 | + ['FUJITSU'] = 0, | ||||||||||
| 160 | + ['WDC'] = 0, | ||||||||||
| 161 | + ['HGST'] = 0, | ||||||||||
| 162 | + ['SMI'] = 231, | ||||||||||
| 163 | + ['LITEON ER2'] = 231, | ||||||||||
| 164 | + ['LITEON CVZ'] = 231, | ||||||||||
| 165 | + ['LITEON EGT'] = 245, | ||||||||||
| 166 | + ['LITEON'] = 245, | ||||||||||
| 167 | + ['PHISON'] = 231, | ||||||||||
| 168 | + ['SSSTC'] = 231, | ||||||||||
| 169 | + ['HYNIX'] = 231, | ||||||||||
| 170 | + ['HUAWEI'] = 231, | ||||||||||
| 171 | + ['YANGTZE MEMORY'] = 245, | ||||||||||
| 172 | + ['RAMAXEL'] = 231, | ||||||||||
| 173 | + ['UMIS'] = 231, | ||||||||||
| 174 | + ['DERA'] = 248, | ||||||||||
| 175 | + ['DATSSD'] = 233, | ||||||||||
| 176 | + ['HUADIAN'] = 232, | ||||||||||
| 177 | + ['LONGSYS'] = 202, | ||||||||||
| 178 | + ['PETAIO'] = 177, | ||||||||||
| 179 | + ['INNOGRIT'] = 202, | ||||||||||
| 180 | + ['UNIS'] = 232, | ||||||||||
H 🟠 重要
建议:补回 Suggestions
![]() ![]() | |||||||||||
| 181 | + ['BIWIN'] = 233 | ||||||||||
| 182 | + }, | ||||||||||
| 183 | + | ||||||||||
| 184 | + ONE_HUNDRED_PERCENT = 100, | ||||||||||
| 185 | + | ||||||||||
| 186 | + NAND_WRITTEN_ATTR_ID = { | ||||||||||
| 187 | + ['INTEL'] = 243, | ||||||||||
| 188 | + ['SAMSUNG'] = 251, | ||||||||||
| 189 | + ['HUAWEI'] = 245, | ||||||||||
| 190 | + }, | ||||||||||
| 191 | + | ||||||||||
| 192 | + HOST_WRITTEN_ATTR_ID = { | ||||||||||
| 193 | + ['INTEL'] = 241, | ||||||||||
| 194 | + ['SAMSUNG'] = 241, | ||||||||||
| 195 | + ['HUAWEI'] = 241, | ||||||||||
| 196 | + }, | ||||||||||
| 197 | + | ||||||||||
| 198 | + PERCENT_70 = 70, | ||||||||||
| 199 | + PERCENT_50 = 50, | ||||||||||
| 200 | + PERCENT_30 = 30, | ||||||||||
| 201 | + | ||||||||||
| 202 | + HW_DEFINED_SMART_ATTRIBUTE_ID_TLC_HOST_WRITTEN_L = 0x05, -- 用户区写入量低位 | ||||||||||
| 203 | + HW_DEFINED_SMART_ATTRIBUTE_ID_TLC_HOST_WRITTEN_H = 0x06, -- 用户区写入量高位 | ||||||||||
| 204 | + HW_DEFINED_SMART_ATTRIBUTE_ID_TLC_TOTAL_SPARE_BLOCK = 0x31, -- 用户区出厂时冗余块总数 | ||||||||||
| 205 | + HW_DEFINED_SMART_ATTRIBUTE_ID_TLC_VALID_SPARE_BLOCK = 0x33, -- 用户区当前有效冗余块个数 | ||||||||||
| 206 | + HW_DEFINED_SMART_ATTRIBUTE_ID_SLC_TOTAL_SPARE_BLOCK = 0x3A, -- 非用户区出厂时冗余块总数 | ||||||||||
| 207 | + HW_DEFINED_SMART_ATTRIBUTE_ID_SLC_VALID_SPARE_BLOCK = 0x3C, -- 非用户区当前有效冗余块个数 | ||||||||||
| 208 | + HW_DEFINED_SMART_ATTRIBUTE_ID_TLC_USED_LIFESPAN = 0x4E, -- 用户区根据P/E情况评估的已使用寿命 | ||||||||||
| 209 | + HW_DEFINED_SMART_ATTRIBUTE_ID_SLC_USED_LIFESPAN = 0x4F, -- 非用户区根据P/E情况评估的已使用寿命 | ||||||||||
| 210 | + HW_DEFINED_SMART_ATTRIBUTE_ID_TLC_NAND_WRITTEN_L = 0x52, -- 用户区nand flash写入量低位 | ||||||||||
| 211 | + HW_DEFINED_SMART_ATTRIBUTE_ID_TLC_NAND_WRITTEN_H = 0x53, -- 用户区nand flash写入量高位 | ||||||||||
| 212 | + HW_DEFINED_SMART_ATTRIBUTE_ID_TLC_PE_CYCLE = 0x5A, -- 用户区擦除次数规格值 | ||||||||||
| 213 | + HW_DEFINED_SMART_ATTRIBUTE_ID_TLC_ERASE_COUNT = 0x5B, -- 用户区擦除次数(最大,最小,平均) | ||||||||||
| 214 | + HW_DEFINED_SMART_ATTRIBUTE_ID_TLC_WEAROUT = 0x5C, -- 用户区剩余磨损 | ||||||||||
| 215 | + HW_DEFINED_SMART_ATTRIBUTE_ID_SLC_PE_CYCLE = 0x67, -- 非用户区擦除次数规格值 | ||||||||||
| 216 | + HW_DEFINED_SMART_ATTRIBUTE_ID_SLC_ERASE_COUNT = 0x68, -- 非用户区擦除次数(最大,最小,平均) | ||||||||||
| 217 | + HW_DEFINED_SMART_ATTRIBUTE_ID_SLC_WEAROUT = 0x69 -- 非用户区剩余磨损 | ||||||||||
| 218 | +} | ||||||||||
| 219 | + | ||||||||||
| 139 | local pd_vendor_id = { | 220 | local pd_vendor_id = { | ||||||||
| 140 | PD_VENDOR_ID_INNOGRIT = 0xA84397, | 221 | PD_VENDOR_ID_INNOGRIT = 0xA84397, | ||||||||
| 141 | PD_VENDOR_ID_HIKSEMI = 0X4AC03F, | 222 | PD_VENDOR_ID_HIKSEMI = 0X4AC03F, | ||||||||
| @@ -235,86 +316,6 @@ local pd_vendor_id_name_map = { | |||||||||||
| 235 | [pd_vendor_id.PD_VENDOR_ID_BIWIN] = pd_vendor_name.PD_VENDOR_NAME_BIWIN, | 316 | [pd_vendor_id.PD_VENDOR_ID_BIWIN] = pd_vendor_name.PD_VENDOR_NAME_BIWIN, | ||||||||
| 236 | } | 317 | } | ||||||||
| 237 | 318 | ||||||||||
| 238 | -local pd_attri_id_wear = { | ||||||||||
| 239 | - ATA_SMART_ATTRIBUTE_ID_MEDIA_WEAROUT_INDICATOR = 233, | ||||||||||
| 240 | - ATA_SMART_ATTRIBUTE_ID_PERCENT_LIFETIME_REMAINING = 202, | ||||||||||
| 241 | - ATA_SMART_ATTRIBUTE_ID_LIFE_REMAINING = 245, | ||||||||||
| 242 | - ATA_SMART_ATTRIBUTE_ID_WEAR_LEVELING_COUNT = 177, | ||||||||||
| 243 | - ATA_SMART_ATTRIBUTE_ID_AVAILABLE_RESERVED_SPACE = 232, | ||||||||||
| 244 | -} | ||||||||||
| 245 | - | ||||||||||
| 246 | -local pd_smart_defs = { | ||||||||||
| 247 | - PD_VENDOR_NAME_INTEL = 'INTEL', | ||||||||||
| 248 | - PD_VENDOR_NAME_SAMSUNG = 'SAMSUNG', | ||||||||||
| 249 | - PD_VENDOR_NAME_HUAWEI = 'HUAWEI', | ||||||||||
| 250 | - PD_VENDOR_NAME_AJ = 'UMIS', | ||||||||||
| 251 | - | ||||||||||
| 252 | - VENDOR_ATTR_ID = { | ||||||||||
| 253 | - ['INTEL'] = 233, | ||||||||||
| 254 | - ['SAMSUNG'] = 177, | ||||||||||
| 255 | - ['MICRON'] = 202, | ||||||||||
| 256 | - ['SANDISK'] = 245, | ||||||||||
| 257 | - ['SEAGATE'] = 0, | ||||||||||
| 258 | - ['FUJITSU'] = 0, | ||||||||||
| 259 | - ['WDC'] = 0, | ||||||||||
| 260 | - ['HGST'] = 0, | ||||||||||
| 261 | - ['SMI'] = 231, | ||||||||||
| 262 | - ['LITEON ER2'] = 231, | ||||||||||
| 263 | - ['LITEON CVZ'] = 231, | ||||||||||
| 264 | - ['LITEON EGT'] = 245, | ||||||||||
| 265 | - ['LITEON'] = 245, | ||||||||||
| 266 | - ['PHISON'] = 231, | ||||||||||
| 267 | - ['SSSTC'] = 231, | ||||||||||
| 268 | - ['HYNIX'] = 231, | ||||||||||
| 269 | - ['HUAWEI'] = 231, | ||||||||||
| 270 | - ['YANGTZE MEMORY'] = 245, | ||||||||||
| 271 | - ['RAMAXEL'] = 231, | ||||||||||
| 272 | - ['UMIS'] = 231, | ||||||||||
| 273 | - ['DERA'] = 248, | ||||||||||
| 274 | - ['DATSSD'] = 233, | ||||||||||
| 275 | - ['HUADIAN'] = 232, | ||||||||||
| 276 | - ['LONGSYS'] = 202, | ||||||||||
| 277 | - ['PETAIO'] = 177, | ||||||||||
| 278 | - ['INNOGRIT'] = 202, | ||||||||||
| 279 | - ['UNIS'] = 232, | ||||||||||
| 280 | - ['BIWIN'] = 233 | ||||||||||
| 281 | - }, | ||||||||||
| 282 | - | ||||||||||
| 283 | - ONE_HUNDRED_PERCENT = 100, | ||||||||||
| 284 | - | ||||||||||
| 285 | - NAND_WRITTEN_ATTR_ID = { | ||||||||||
| 286 | - ['INTEL'] = 243, | ||||||||||
| 287 | - ['SAMSUNG'] = 251, | ||||||||||
| 288 | - ['HUAWEI'] = 245, | ||||||||||
| 289 | - }, | ||||||||||
| 290 | - | ||||||||||
| 291 | - HOST_WRITTEN_ATTR_ID = { | ||||||||||
| 292 | - ['INTEL'] = 241, | ||||||||||
| 293 | - ['SAMSUNG'] = 241, | ||||||||||
| 294 | - ['HUAWEI'] = 241, | ||||||||||
| 295 | - }, | ||||||||||
| 296 | - | ||||||||||
| 297 | - PERCENT_70 = 70, | ||||||||||
| 298 | - PERCENT_50 = 50, | ||||||||||
| 299 | - PERCENT_30 = 30, | ||||||||||
| 300 | - | ||||||||||
| 301 | - HW_DEFINED_SMART_ATTRIBUTE_ID_TLC_HOST_WRITTEN_L = 0x05, -- 用户区写入量低位 | ||||||||||
| 302 | - HW_DEFINED_SMART_ATTRIBUTE_ID_TLC_HOST_WRITTEN_H = 0x06, -- 用户区写入量高位 | ||||||||||
| 303 | - HW_DEFINED_SMART_ATTRIBUTE_ID_TLC_TOTAL_SPARE_BLOCK = 0x31, -- 用户区出厂时冗余块总数 | ||||||||||
| 304 | - HW_DEFINED_SMART_ATTRIBUTE_ID_TLC_VALID_SPARE_BLOCK = 0x33, -- 用户区当前有效冗余块个数 | ||||||||||
| 305 | - HW_DEFINED_SMART_ATTRIBUTE_ID_SLC_TOTAL_SPARE_BLOCK = 0x3A, -- 非用户区出厂时冗余块总数 | ||||||||||
| 306 | - HW_DEFINED_SMART_ATTRIBUTE_ID_SLC_VALID_SPARE_BLOCK = 0x3C, -- 非用户区当前有效冗余块个数 | ||||||||||
| 307 | - HW_DEFINED_SMART_ATTRIBUTE_ID_TLC_USED_LIFESPAN = 0x4E, -- 用户区根据P/E情况评估的已使用寿命 | ||||||||||
| 308 | - HW_DEFINED_SMART_ATTRIBUTE_ID_SLC_USED_LIFESPAN = 0x4F, -- 非用户区根据P/E情况评估的已使用寿命 | ||||||||||
| 309 | - HW_DEFINED_SMART_ATTRIBUTE_ID_TLC_NAND_WRITTEN_L = 0x52, -- 用户区nand flash写入量低位 | ||||||||||
| 310 | - HW_DEFINED_SMART_ATTRIBUTE_ID_TLC_NAND_WRITTEN_H = 0x53, -- 用户区nand flash写入量高位 | ||||||||||
| 311 | - HW_DEFINED_SMART_ATTRIBUTE_ID_TLC_PE_CYCLE = 0x5A, -- 用户区擦除次数规格值 | ||||||||||
| 312 | - HW_DEFINED_SMART_ATTRIBUTE_ID_TLC_ERASE_COUNT = 0x5B, -- 用户区擦除次数(最大,最小,平均) | ||||||||||
| 313 | - HW_DEFINED_SMART_ATTRIBUTE_ID_TLC_WEAROUT = 0x5C, -- 用户区剩余磨损 | ||||||||||
| 314 | - HW_DEFINED_SMART_ATTRIBUTE_ID_SLC_PE_CYCLE = 0x67, -- 非用户区擦除次数规格值 | ||||||||||
| 315 | - HW_DEFINED_SMART_ATTRIBUTE_ID_SLC_ERASE_COUNT = 0x68, -- 非用户区擦除次数(最大,最小,平均) | ||||||||||
| 316 | - HW_DEFINED_SMART_ATTRIBUTE_ID_SLC_WEAROUT = 0x69 -- 非用户区剩余磨损 | ||||||||||
| 317 | -} | ||||||||||
| 318 | 319 | ||||||||||
| 319 | local common_def = { | 320 | local common_def = { | ||||||||
| 320 | CTRL_OPTION = ctrl_option, | 321 | CTRL_OPTION = ctrl_option, | ||||||||
| @@ -245,23 +245,14 @@ function c_drive_collection:get_drive_by_device_id(ref_controller_id, device_id) | |||
| 245 | }) | 245 | }) |
| 246 | end | 246 | end |
| 247 | 247 | ||
| 248 | --- 以控制器Id为下标,注意不能多线程访问 | ||
| 249 | -local drive_list = {} | ||
| 250 | - | ||
| 251 | function c_drive_collection:get_drives_by_controller_id(controller_id) | 248 | function c_drive_collection:get_drives_by_controller_id(controller_id) |
| 252 | - if drive_list[controller_id] == nil then | 249 | + local result = {} |
| 253 | - drive_list[controller_id] = {} | ||
| 254 | - else | ||
| 255 | - for k, _ in pairs(drive_list[controller_id]) do | ||
| 256 | - drive_list[controller_id][k] = nil | ||
| 257 | - end | ||
| 258 | - end | ||
| 259 | c_drive.collection:fold(function(acc, obj, key) | 250 | c_drive.collection:fold(function(acc, obj, key) |
| 260 | if obj.RefControllerId == controller_id and obj.identify_pd ~= false and obj.presence ~= 0 then | 251 | if obj.RefControllerId == controller_id and obj.identify_pd ~= false and obj.presence ~= 0 then |
| 261 | - table.insert(drive_list[controller_id], obj.Name) | 252 | + table.insert(result, obj.Name) |
| 262 | end | 253 | end |
| 263 | end, {}) | 254 | end, {}) |
| 264 | - return drive_list[controller_id] | 255 | + return result |
| 265 | end | 256 | end |
| 266 | 257 | ||
| 267 | function c_drive_collection:get_drive_objs_by_controller_id(controller_id) | 258 | function c_drive_collection:get_drive_objs_by_controller_id(controller_id) |
| @@ -242,11 +242,9 @@ end | |||
| 242 | 242 | ||
| 243 | -- 根据 ManufacturerOUI 查找 ManufacturerName | 243 | -- 根据 ManufacturerOUI 查找 ManufacturerName |
| 244 | function method_misc:get_manufacturer_name_by_oui(manufacturer_oui) | 244 | function method_misc:get_manufacturer_name_by_oui(manufacturer_oui) |
| 245 | - for _, vendor in ipairs(common_def.DRIVE_VENDOR_TABLE) do | 245 | + local vendor_id = tonumber(manufacturer_oui, 16) |
| 246 | - local vendor_id = string.format("%X", vendor.vendor_id) | 246 | + if vendor_id and common_def.PD_VENDOR_ID_NAME_MAP[vendor_id] then |
| 247 | - if vendor_id == manufacturer_oui then | 247 | + return common_def.PD_VENDOR_ID_NAME_MAP[vendor_id] |
| 248 | - return vendor.vendor_name | ||
| 249 | - end | ||
| 250 | end | 248 | end |
| 251 | return 'ATA' | 249 | return 'ATA' |
| 252 | end | 250 | end |


🟡 需确认
原
update_hw_info中使用顶层data.ManufacturerOUI进行 OUI 查找,新代码仅使用data.Oem.Huawei.ManufacturerOUI。如果部分硬盘仅在顶层提供ManufacturerOUI(Redfish 标准字段)而非 Oem.Huawei 扩展下,新逻辑会跳过 OUI 映射,厂商名保留为 ATA。请确认:是否所有硬盘的
ManufacturerOUI都在data.Oem.Huawei下?如果存在顶层有值但 Oem.Huawei 无值的情况,建议保留对顶层data.ManufacturerOUI的兜底查找。