Explorar o código

Added smart status script.

Yannick Boetzel %!s(int64=7) %!d(string=hai) anos
pai
achega
743cee4cbe
Modificáronse 1 ficheiros con 54 adicións e 0 borrados
  1. 54 0
      34-smartd

+ 54 - 0
34-smartd

@@ -0,0 +1,54 @@
+#!/bin/bash
+
+# config
+MAX_TEMP=40
+# set column width
+COLUMNS=2
+# colors
+white="\e[39m"
+green="\e[1;32m"
+red="\e[1;31m"
+dim="\e[2m"
+undim="\e[0m"
+
+# disks to check
+disks=(sda sdb sdc sdd sde sdf sdg sdi)
+logfiles='/var/log/syslog /var/log/syslog.1'
+
+# get all lines with smartd entries from syslog
+mapfile -t lines < <(grep -hiP 'smartd\[[[:digit:]]+\]:' $logfiles | grep -iP "(Temperature_Celsius|previous self-test)" | sort -r)
+
+out=""
+for i in "${!disks[@]}"; do
+    disk=${disks[$i]}
+    uuid=$(blkid -s UUID -o value "/dev/${disk}")
+    #mapfile -t disklines < <(printf -- '%s\n' "${lines[@]}" | grep "${uuid}")
+    temp=$(printf -- '%s\n' "${lines[@]}" | grep "${uuid}" | grep -m 1 "Temperature_Celsius" | awk '{ print $NF }')
+    status=$(printf -- '%s\n' "${lines[@]}" | grep "${uuid}" | grep -m 1 "previous self-test" | awk '{ print $(NF-1),$NF }')
+    # color green if temp <= MAX_TEMP, else red
+    if [[ "${temp}" -gt "${MAX_TEMP}" ]]; then
+        color=$red
+    else
+        color=$green
+    fi
+    # if temp > 80 assume reading is wrong and set temp to "--"
+    if [[ "${temp}" -gt 80 ]]; then
+        temp="--"
+    fi
+    # color green if status is "without error", else red
+    if [[ "${status}" == "without error" ]]; then
+        status_color=$green
+    else
+        status_color=$red
+    fi
+    # print temp & smartd error
+    out+="${disk}:,${color}${temp}°C${undim} | ${status_color}${status}${undim},"
+    # insert \n every $COLUMNS column
+    if [ $((($i+1) % $COLUMNS)) -eq 0 ]; then
+        out+="\n"
+    fi
+done
+out+="\n"
+
+printf "\nsmartd status:\n"
+printf "$out" | column -ts $',' | sed -e 's/^/  /'