Fix SCSI/SAS drive identity fields (model, wwn, firmware)

This commit is contained in:
2026-03-07 03:29:32 +00:00
parent 78556bbfee
commit 4a2cbcaaec

View File

@@ -75,20 +75,21 @@ def _parse_smart_json(device: str, data: dict) -> dict:
"""Extract relevant fields from smartctl JSON output.""" """Extract relevant fields from smartctl JSON output."""
result: dict = {"device": device, "smart_supported": True} result: dict = {"device": device, "smart_supported": True}
# Identity # Identity — ATA vs SCSI field names
result["model"] = data.get("model_name") result["model"] = data.get("model_name") or data.get("scsi_model_name")
result["serial"] = data.get("serial_number") result["serial"] = data.get("serial_number")
result["firmware"] = data.get("firmware_version") result["firmware"] = data.get("firmware_version") or data.get("scsi_revision_level")
result["capacity_bytes"] = data.get("user_capacity", {}).get("bytes") result["capacity_bytes"] = data.get("user_capacity", {}).get("bytes")
# WWN # WWN — ATA uses structured wwn{}, SCSI uses logical_unit_id string
wwn_data = data.get("wwn") wwn_data = data.get("wwn")
if wwn_data: if wwn_data:
# Reconstruct WWN string from components
naa = wwn_data.get("naa", 0) naa = wwn_data.get("naa", 0)
oui = wwn_data.get("oui", 0) oui = wwn_data.get("oui", 0)
wwn_id = wwn_data.get("id", 0) wwn_id = wwn_data.get("id", 0)
result["wwn"] = f"{naa:x}{oui:06x}{wwn_id:09x}" result["wwn"] = f"{naa:x}{oui:06x}{wwn_id:09x}"
elif data.get("logical_unit_id"):
result["wwn"] = data["logical_unit_id"]
# SMART health # SMART health
smart_status = data.get("smart_status", {}) smart_status = data.get("smart_status", {})