**Issue**: osd.2 is a USB-connected 1TB drive that couldn't read SMART
Error was: "Read Device Identity failed: scsi error unsupported field"
This is typical for USB-attached drives that need bridge-specific flags.
**Solution**: Added USB transport detection and multiple fallback methods:
- SAT (SCSI-ATA Translation) - most common USB bridges
- usbjmicron - JMicron USB bridge chipsets
- usbcypress - Cypress USB bridge chipsets
- Generic USB fallback
- SCSI passthrough
Also added USB/SAT attempt to unknown transport types as fallback.
**Debug Enhancement**:
- Now shows detected transport type in debug output
- Helps diagnose why SMART fails
**Note**: USB drives in Ceph clusters are unconventional but functional.
This OSD appears to be temporary/supplemental storage capacity.
If SMART still fails after this update, the USB bridge may be incompatible
with smartmontools, which is acceptable for temporary storage.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
**Root Cause Found**: All 6 NVMe SMART failures were due to parsing bug!
Ceph's `device query-daemon-health-metrics` returns data in nested format:
```json
{
"DEVICE_ID": {
"nvme_smart_health_information_log": { ... }
}
}
```
Script was checking for `nvme_smart_health_information_log` at top level,
so it always failed and fell back to SSH smartctl (which also failed).
**Fix**:
- Extract first device entry from nested dict structure
- Maintain backward compatibility for direct format
- Now correctly parses NVMe SMART from Ceph's built-in metrics
**Expected Impact**:
- All 6 NVMe drives will now successfully read SMART data
- Should drop from "CRITICAL: No SMART data" to proper health scores
- Only truly healthy NVMe drives will show 100/100 health
- Failing NVMe drives will be properly detected and ranked
**Testing**:
Verified `ceph device query-daemon-health-metrics osd.0` returns full
NVMe SMART data including:
- available_spare: 100%
- percentage_used: 12%
- media_errors: 0
- temperature: 38°C
This data was always available but wasn't being parsed!
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>