#!/mod/bin/jimsh source /mod/webif/lib/setup require system.class settings.class if {[system model] eq "HD"} exit set disk [system disk] set settings [settings] # Extract overall SMART status. set smart "" set line "" # smartctl uses non-zero exit status to indicate health hence catch. catch { set line [exec /mod/bin/smartctl -H $disk | sed -n 5p] } msg if {$msg ne "" && $line eq ""} { set line $msg } if {$line ne ""} { set smart [string range [lindex [split $line :] 1] 1 end] $settings _tval_setting "SMART_status" $smart } foreach line [split [exec /mod/bin/smartctl -A -f brief $disk] "\n"] { regsub -all -- {[[:space:]]+} $line " " line regsub -all -- {^[[:space:]]+} $line "" line lassign [split $line] id name flags val worst thresh when rval if {![string is integer $id]} continue set attrs($id) $rval } #puts "Attrs: ($attrs)" puts "SMART: ($smart)" foreach a { {5 "realloc"} {10 "spinretry"} {197 "pending"} {198 "offline"} } { lassign $a id attr if {![dict exists $attrs $id]} continue puts "$attr: $attrs($id)" $settings _nval_setting "SMART_$attr" $attrs($id) if {$attrs($id) < [$settings _nval_setting "SMART_ack_$attr"]} { $settings _nval_setting "SMART_ack_$attr" $attrs($id) } }