check 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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. if [[ -z "${MOUNTPOINT}" || ! -d "${MOUNTPOINT}" ]]; then
  37. fsck ${BLOCKDEVICE}
  38. else
  39. fsck -n ${BLOCKDEVICE}
  40. fi
  41. }
  42. if [[ -z "${IQN}" ]]; then
  43. IQNLIST=$(cat /sys/class/iscsi_session/*/targetname | sort -u)
  44. for IQN in ${IQNLIST}; do
  45. CheckIQN ${IQN}
  46. done
  47. else
  48. CheckIQN ${IQN}
  49. fi