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.
 
 

61 lines
1.2 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 /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 '"'"'Device Model|Power_On_Hours'"'"'"
  10. cmd | getline
  11. $1 = ""
  12. $2 = ""
  13. model = $0
  14. cmd | getline
  15. hours = $10
  16. close(cmd)
  17. years = sprintf("%.4g", ( hours / 24. / 365 ))
  18. print lblname "\t->\t" devname "\t->\t" disksize[devname] " TB\t->\t" years "\t" model
  19. delete disksize[devname]
  20. }
  21. $0 ~ "Name" {
  22. state=1
  23. }
  24. state == 0 {
  25. ncomp = split($1, comp, "/")
  26. basecomp = comp[ncomp]
  27. if (basecomp !~ "p") {
  28. tb = int($3 / 1000 / 1000 / 1000 / 1000)
  29. if (tb != 0)
  30. disksize[basecomp] = tb
  31. if (tb == 0)
  32. disksize[basecomp] = sprintf("%.2f", int($3 / 1000 / 1000 / 1000) / 1000)
  33. }
  34. }
  35. state == 1 {
  36. ncomp = split($1, comp, "/")
  37. basecomp = comp[ncomp]
  38. devname = $3
  39. if (comp[1] != "label") {
  40. next
  41. }
  42. printdiskinfo(basecomp, devname)
  43. }
  44. END {
  45. for (i in disksize) {
  46. printdiskinfo("xxx", i)
  47. }
  48. }
  49. ' - | sort
  50. echo