From 3793b279585638e38ca23b17ff401f4db767eb5a Mon Sep 17 00:00:00 2001 From: FlintyLemming Date: Fri, 10 Apr 2026 03:50:59 +0800 Subject: [PATCH] fix(agent): use `nvme_total_capacity` fallback for NVMe disk size (#1899) Some enterprise NVMe drives (e.g. Dell Ent NVMe CM7 U.2) report capacity via nvme_total_capacity instead of user_capacity.bytes in smartctl output. The NVMe SMART parser now falls back to nvme_total_capacity when user_capacity.bytes is zero. --- agent/smart.go | 3 +++ internal/entities/smart/smart.go | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/agent/smart.go b/agent/smart.go index 9de1e8f4..a8c0c52e 100644 --- a/agent/smart.go +++ b/agent/smart.go @@ -1118,6 +1118,9 @@ func (sm *SmartManager) parseSmartForNvme(output []byte) (bool, int) { smartData.SerialNumber = data.SerialNumber smartData.FirmwareVersion = data.FirmwareVersion smartData.Capacity = data.UserCapacity.Bytes + if smartData.Capacity == 0 { + smartData.Capacity = data.NVMeTotalCapacity + } if smartData.Capacity == 0 && (runtime.GOOS == "darwin" || sm.darwinNvmeProvider != nil) { smartData.Capacity = sm.lookupDarwinNvmeCapacity(data.SerialNumber) } diff --git a/internal/entities/smart/smart.go b/internal/entities/smart/smart.go index 42a64df2..24c7eac2 100644 --- a/internal/entities/smart/smart.go +++ b/internal/entities/smart/smart.go @@ -494,7 +494,7 @@ type SmartInfoForNvme struct { FirmwareVersion string `json:"firmware_version"` // NVMePCIVendor NVMePCIVendor `json:"nvme_pci_vendor"` // NVMeIEEEOUIIdentifier uint32 `json:"nvme_ieee_oui_identifier"` - // NVMeTotalCapacity uint64 `json:"nvme_total_capacity"` + NVMeTotalCapacity uint64 `json:"nvme_total_capacity"` // NVMeUnallocatedCapacity uint64 `json:"nvme_unallocated_capacity"` // NVMeControllerID uint16 `json:"nvme_controller_id"` // NVMeVersion VersionStringInfo `json:"nvme_version"`