check_osx_smart.sh 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #!/usr/bin/env bash
  2. # Nagios Exit Codes
  3. OK=0
  4. WARNING=1
  5. CRITICAL=2
  6. UNKNOWN=3
  7. usage()
  8. {
  9. cat <<EOF
  10. Check the S.M.A.R.T status for a disk on OSX.
  11. Options:
  12. -d <disk> Specify volume a disk
  13. -l List available disks
  14. Usage: $0 -d disk0
  15. EOF
  16. }
  17. argcheck() {
  18. # if less than n argument
  19. if [ $ARGC -lt $1 ]; then
  20. echo "Missing arguments! Use \`\`-h'' for help."
  21. exit 1
  22. fi
  23. }
  24. CHECK=0
  25. ARGC=$#
  26. argcheck 1
  27. while getopts "hld:" OPTION
  28. do
  29. case $OPTION in
  30. h)
  31. usage
  32. ;;
  33. l)
  34. diskutil list
  35. exit 0
  36. ;;
  37. d)
  38. CHECK=1
  39. DISK="$OPTARG"
  40. ;;
  41. \?)
  42. exit 1
  43. ;;
  44. esac
  45. done
  46. if [ $CHECK -eq 1 ]; then
  47. if [ -b /dev/${DISK} ]; then
  48. STATUS=$(diskutil info $DISK | awk '/SMART/ { print $3 }')
  49. else
  50. echo "$DISK is not a valid block device"
  51. exit 3
  52. fi
  53. case $STATUS in
  54. [vV]erified)
  55. echo "Disk $DISK is OK."
  56. exit $OK
  57. ;;
  58. *[nN]ot*)
  59. echo "SMART status is not supported for this disk (e.g. externals): $DISK"
  60. exit $OK
  61. ;;
  62. *[fF]ail*)
  63. echo "Disk $DISK is failing."
  64. exit $CRITICAL
  65. ;;
  66. *)
  67. echo "Unknown status for $DISK: $STATUS"
  68. exit $UNKNOWN
  69. ;;
  70. esac
  71. fi