From 580b66711903619b3e47f8bef05b2e1ea2c6ba34 Mon Sep 17 00:00:00 2001 From: Lucas Serverhost Date: Wed, 14 Oct 2026 17:42:52 +0200 Subject: [PATCH] node exporter: counter corretion for samsung hdd --- network/node-exporter-smartmon.sh | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/network/node-exporter-smartmon.sh b/network/node-exporter-smartmon.sh index 3baf5f5..1c8fbac 100755 --- a/network/node-exporter-smartmon.sh +++ b/network/node-exporter-smartmon.sh @@ -8,24 +8,32 @@ for dev in $(smartctl --scan-open | awk '{print $1}'); do name=$(basename "$dev") LAST=0 if [[ "$dev" == *nvme* ]]; then -# POWER_ON=$(smartctl -a "$dev" | awk -F': *' '/Power On Hours:/ {print $2}') + POWER_ON=$(smartctl -a "$dev" | awk -F': *' '/Power On Hours:/ {print $2}') LAST=$(smartctl -l selftest "$dev" 2>/dev/null \ | grep "Completed" \ | head -1 \ | awk '{print $(NF-5)}') elif [[ "$dev" == *sd* ]]; then -# POWER_ON=$(smartctl -a "$dev" | awk '/Power_On_Hours/ {print $10}') + POWER_ON=$(smartctl -a "$dev" | awk '/Power_On_Hours/ {print $10}') LAST=$(smartctl -l selftest "$dev" 2>/dev/null \ | grep "Completed" \ | head -1 \ | awk '{print $(NF-1)}') + MODEL=$(smartctl -i "$dev" | awk -F': *' '/Device Model/ {print $2}') + # ST2000LM003 self-test hour counter rolls over at 65536 + if [[ "$MODEL" == "ST2000LM003 HN-M201RAD" ]] && \ + [[ "$LAST" =~ ^[0-9]+$ ]] && \ + [[ "$POWER_ON" =~ ^[0-9]+$ ]] && \ + (( POWER_ON > 65535 && LAST < 65536 )); then + LAST=$((LAST + 65536)) + fi else POWER_ON=99999999999 echo $dev fi # Skip devices without self-test history - echo $name: ${LAST} + echo $name: Last: ${LAST}, PowerOn: ${POWER_ON} echo "smart_last_selftest_poweron_hours{device=\"$name\"} $LAST" >> "$OUT" done