在此鸣谢@hichina大佬
适用于服务器Raid内信息读取
#!/bin/bash
echo "=== 硬盘基本信息 + SMART 健康简表 ==="
# 打印表头
printf "%-20s %-12s %-24s %-10s %-8s %-8s %-12s\n" "设备" "驱动" "型号" "容量" "状态" "温度" "通电小时"
echo "----------------------------------------------------------------------------------------------------------"
smartctl --scan | while read -r line; do
DEVICE=$(echo "$line" | awk '{print $1}')
if echo "$line" | grep -q -- '-d'; then
DRIVER=$(echo "$line" | sed -n 's/.*-d \([^ ]*\).*/\1/p')
else
DRIVER="auto"
fi
OUTPUT=$(smartctl -a -d "$DRIVER" "$DEVICE" 2>/dev/null)
# 提取字段
MODEL=$(echo "$OUTPUT" | grep -m1 "Device Model:" | cut -d: -f2 | xargs)
[ -z "$MODEL" ] && MODEL=$(echo "$OUTPUT" | grep -m1 "Product:" | cut -d: -f2 | xargs)
[[ ${#MODEL} -gt 23 ]] && MODEL="${MODEL:0:21}.." # 防止太长撑破列
SIZE=$(echo "$OUTPUT" | grep -m1 "User Capacity:" | sed -E 's/.*\[([0-9.]+ [A-Z]+)\].*/\1/')
STATUS=$(echo "$OUTPUT" | grep -m1 "overall-health self-assessment test result:" | awk -F: '{print $2}' | xargs)
[ -z "$STATUS" ] && STATUS=$(echo "$OUTPUT" | grep -m1 "SMART Health Status:" | awk -F: '{print $2}' | xargs)
[ -z "$STATUS" ] && STATUS="Unknown"
TEMP=$(echo "$OUTPUT" | grep -m1 -E "Temperature_Celsius|Temperature_Internal" | awk '{print $10}')
if [[ "$TEMP" =~ ^[0-9]+$ ]]; then
TEMP="${TEMP}°C"
else
TEMP="--"
fi
POWER_ON=$(echo "$OUTPUT" | grep -i "Power_On_Hours" | awk '{print $10}')
[[ "$POWER_ON" =~ ^[0-9]+$ ]] && POWER_ON="${POWER_ON}h" || POWER_ON="--"
# 格式化输出
printf "%-20s %-12s %-24s %-10s %-8s %-8s %-12s\n" "$DEVICE" "$DRIVER" "$MODEL" "$SIZE" "$STATUS" "$TEMP" "$POWER_ON"
done
如盘温度Unknown请使用sudo运行
效果如下
