check 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #!/bin/bash
  2. IQN=$1
  3. CheckIQN() {
  4. IQN=$1
  5. MULTIPATH=0
  6. IQNTESTLIST=$(grep -h ${IQN} /sys/class/iscsi_session/*/targetname)
  7. for IQNTEST in ${IQNTESTLIST}; do
  8. if [ "${IQNTEST}" != "${IQN}" ]; then
  9. echo "IQN not found"
  10. echo ""
  11. exit
  12. fi
  13. MULTIPATH=$((MULTIPATH + 1))
  14. done
  15. SESSIONFOLDERLIST=$(grep -l ${IQN} /sys/class/iscsi_session/*/targetname | xargs realpath)
  16. declare -A ADDRESSES
  17. declare -A BLOCKDEVICES
  18. for SESSIONFOLDER in ${SESSIONFOLDERLIST}; do
  19. SESSION=$(echo "${SESSIONFOLDER}" | sed 's/.*session\([0-9]*\).*/\1/g')
  20. HOST=$(echo "${SESSIONFOLDER}" | sed 's/.*host\([0-9]*\).*/\1/g')
  21. SCSIADDRESS=$(echo "${SESSIONFOLDER}" | sed 's/\(.*\)\/iscsi_session.*/\1/g' | xargs ls -1 | grep "target${HOST}" | sed 's/target//g')
  22. MAJOR=$(echo "${SCSIADDRESS}" | cut -d ":" -f 2)
  23. MINOR=$(echo "${SCSIADDRESS}" | cut -d ":" -f 3)
  24. FULLSCSIADDRESS=$(echo "${SESSIONFOLDER}" | sed "s/\(.*\)\/iscsi_session.*/\1\/target${SCSIADDRESS}/g" | xargs ls -1 | grep ":")
  25. LUN=$(echo "${FULLSCSIADDRESS}" | cut -d ":" -f 4)
  26. ADDRESS="[${SESSION}]:scsi$HOST:${MAJOR}:${MINOR}:${LUN}"
  27. ADDRESSES+="${ADDRESS} "
  28. BLOCKDEVICE=$(echo "${SESSIONFOLDER}" | sed "s/\(.*\)\/iscsi_session.*/\1\/target${SCSIADDRESS}\/${FULLSCSIADDRESS}\/block/g" | xargs ls -1 | xargs printf "/dev/%s")
  29. BLOCKDEVICES+="${BLOCKDEVICE} "
  30. done
  31. MULTIPATHDEVICE=$(multipath -l ${BLOCKDEVICES[0]} | grep 'mpath' | sed -e 's/^\([a-z]*\) .*/\1/g')
  32. if [ ! -z "${MULTIPATHDEVICE}" ]; then
  33. BLOCKDEVICE="/dev/mapper/${MULTIPATHDEVICE}"
  34. fi
  35. MOUNTPOINT=$(grep "${BLOCKDEVICE}" /proc/mounts | head -n 1 | cut -d " " -f 2)
  36. echo -n "${IQN}: "
  37. RETURNCODE=0
  38. if [[ -z "${MOUNTPOINT}" || ! -d "${MOUNTPOINT}" ]]; then
  39. fsck -f ${BLOCKDEVICE} &> /dev/null
  40. RETURNCODE=$?
  41. else
  42. fsck -nf ${BLOCKDEVICE} &> /dev/null
  43. RETURNCODE=$?
  44. fi
  45. if [ "${RETURNCODE}" -ne "0" ]; then
  46. echo "ERROR"
  47. echo " ${BLOCKDEVICE} contains errors, please check the filesystem"
  48. else
  49. echo "OK"
  50. fi
  51. }
  52. if [[ -z "${IQN}" ]]; then
  53. IQNLIST=$(cat /sys/class/iscsi_session/*/targetname | sort -u)
  54. for IQN in ${IQNLIST}; do
  55. CheckIQN ${IQN}
  56. done
  57. else
  58. CheckIQN ${IQN}
  59. fi