henrygd/beszel · warning

no SMART data in response

Error message

no SMART data in response

What it means

unmarshalLegacyResponse returns this when a GetSmartData response has resp.SmartData == nil for either dest type (*map[string]smart.SmartData or *smart.SmartDataResponse). The agent responded but included no S.M.A.R.T. data.

Source

Thrown at internal/hub/transport/transport.go:94

			return errors.New("no logs in response")
		}
		*d = *resp.String
		return nil
	case common.GetContainerInfo:
		d, ok := dest.(*string)
		if !ok {
			return fmt.Errorf("unexpected dest type for GetContainerInfo: %T", dest)
		}
		if resp.String == nil {
			return errors.New("no info in response")
		}
		*d = *resp.String
		return nil
	case common.GetSmartData:
		switch d := dest.(type) {
		case *map[string]smart.SmartData:
			if resp.SmartData == nil {
				return errors.New("no SMART data in response")
			}
			*d = resp.SmartData
			return nil
		case *smart.SmartDataResponse:
			if resp.SmartData == nil {
				return errors.New("no SMART data in response")
			}
			d.Data = resp.SmartData
			d.Complete = resp.SmartComplete
			return nil
		default:
			return fmt.Errorf("unexpected dest type for GetSmartData: %T", dest)
		}
	case common.GetSystemdInfo:
		d, ok := dest.(*systemd.ServiceDetails)
		if !ok {
			return fmt.Errorf("unexpected dest type for GetSystemdInfo: %T", dest)
		}

View on GitHub (pinned to b38fb7dafa)

Solutions

  1. Verify smartctl is installed and runnable (sudo smartctl --scan) on the agent host
  2. Remove nonexistent disks from the hub's disk configuration, or add matching disks
  3. Update the agent to a version supporting SMART data
  4. Grant the agent permission to run smartctl (sudoers / capabilities)
  5. If SMART is genuinely unavailable (VM), disable SMART monitoring for that system
Defensive patterns

Strategy: validation

Validate before calling

// only request SMART data for hosts/disks that support it
if !hostSupportsSmart(host) { // e.g. bare metal with smartctl installed
    return nil
}

Try / catch

if err := UnmarshalResponse(resp, common.GetSmartData, dest); err != nil {
    if strings.Contains(err.Error(), "no SMART data") {
        return nil // disable SMART panel for this system
    }
    return err
}

Prevention

When it happens

Trigger: UnmarshalResponse on a GetSmartData request where the legacy AgentResponse's SmartData field is nil.

Common situations: Host has no disks supporting SMART (VMs, containers); smartctl not installed or lacking permissions on the agent host; agent version not supporting SMART data; disks in the hub config that don't exist.

Related errors


AI-assisted analysis of henrygd/beszel@b38fb7dafa (2026-08-31). Data as JSON: /api/errors/fe906adce5e0feb6. Report an issue: GitHub.