Set of scripts used for various projects.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

79 lines
1.8 KiB

  1. #!/bin/sh
  2. # | egrep $(zpool list -v ztank | grep label | awk 'BEGIN { j="" } { printf "%s%s", j, substr($1, 7, length($1) - 10); j="|" } END { print "" }' )
  3. # state=0 parsing diskinfo
  4. # state=1 parsing glabel
  5. (diskinfo $(ls /dev/ada*[0-9] | egrep '^/dev/ada[0-9]+$'); glabel status) | awk -v state=0 '
  6. BEGIN {
  7. }
  8. function printdiskinfo(lblname, devname) {
  9. cmd = "smartctl -a /dev/" devname " | egrep '"'"'Temperature_Celsius|Airflow_Temperature_Cel|Device Model:|Power_On_Hours|Current_Pending_Sector|Offline_Uncorrectable'"'"'"
  10. r = cmd | getline
  11. #print "xfoox" r "x" $0 "xbarx"
  12. model = "unknown"
  13. hours = 0
  14. temp = "unkn"
  15. if (r) {
  16. for (i = 0; i < 5; i++) {
  17. if ($1 == "Device" && $2 == "Model:") {
  18. $1 = ""
  19. $2 = ""
  20. model = sprintf("%-*s", 4*8 - 1, $0)
  21. } else if ($2 == "Temperature_Celsius" || $2 == "Airflow_Temperature_Cel") {
  22. temp = $10
  23. } else if ($2 == "Power_On_Hours") {
  24. hours = $10
  25. } else if ($2 == "Current_Pending_Sector") {
  26. pending = $10
  27. } else if ($2 == "Offline_Uncorrectable") {
  28. offline = $10
  29. }
  30. r = cmd | getline
  31. }
  32. }
  33. close(cmd)
  34. years = sprintf("%.4g", ( hours / 24. / 365 ))
  35. print lblname "\t->\t" devname "\t->\t" disksize[devname] " TB\t->\t" years "\t" model "\t" temp "\t" pending "\t" offline
  36. delete disksize[devname]
  37. }
  38. $0 ~ "Name" {
  39. state=1
  40. }
  41. state == 0 {
  42. ncomp = split($1, comp, "/")
  43. basecomp = comp[ncomp]
  44. if (basecomp !~ "p") {
  45. tb = int($3 / 1000 / 1000 / 1000 / 1000)
  46. if (tb != 0)
  47. disksize[basecomp] = tb
  48. if (tb == 0)
  49. disksize[basecomp] = sprintf("%.2f", int($3 / 1000 / 1000 / 1000) / 1000)
  50. }
  51. }
  52. state == 1 {
  53. ncomp = split($1, comp, "/")
  54. basecomp = comp[ncomp]
  55. devname = $3
  56. if (comp[1] != "label") {
  57. next
  58. }
  59. printdiskinfo(basecomp, devname)
  60. }
  61. END {
  62. for (i in disksize) {
  63. printdiskinfo("xxx", i)
  64. }
  65. }
  66. ' - | sort
  67. echo