diff --git a/driveAtlas.sh b/driveAtlas.sh index c9b93df..bfc879e 100644 --- a/driveAtlas.sh +++ b/driveAtlas.sh @@ -758,24 +758,21 @@ parse_smart_data() { # Priority: 1) NVMe by name, 2) Rotation Rate field, 3) Model name hints, 4) Default HDD if [[ "$device" == nvme* ]]; then type="NVMe" - elif echo "$smart_info" | grep -qE "^Rotation Rate:"; then - # Check the Rotation Rate field value + elif echo "$smart_info" | grep -qE "Rotation Rate:"; then + # Check the Rotation Rate field value (may have leading whitespace) local rotation_rate - rotation_rate="$(echo "$smart_info" | grep -E "^Rotation Rate:" | head -1)" - if echo "$rotation_rate" | grep -qiE "solid state|0 rpm"; then + rotation_rate="$(echo "$smart_info" | grep -E "Rotation Rate:" | head -1)" + if echo "$rotation_rate" | grep -qiE "solid state"; then type="SSD" elif echo "$rotation_rate" | grep -qE "[0-9]+ rpm"; then # Has actual RPM value (e.g., "7200 rpm") - it's an HDD type="HDD" else + # Unknown rotation rate, default to HDD type="HDD" fi - elif echo "$smart_info" | grep -qE "^Device Model:.*SSD|^Model Number:.*SSD"; then - # Only match SSD in the model name field, not anywhere in output - type="SSD" - elif echo "$smart_info" | grep -qE "^Form Factor:.*2\.5"; then - # 2.5" drives without rotation rate specified are likely SSDs - # But large capacity 2.5" could be HDD, so check capacity + elif echo "$smart_info" | grep -qE "Device Model:.*SSD|Model Number:.*SSD"; then + # Match SSD in the model name field type="SSD" else # Default to HDD for spinning rust