info 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #!/bin/bash
  2. IQN=$1
  3. PrintIQN() {
  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 "IQN: ${IQN}"
  37. #echo " Session: ${SESSION}";
  38. #echo " Host: ${HOST}";
  39. #echo " Channel: ${MAJOR}";
  40. #echo " Id: ${MINOR}";
  41. #echo " LUN: ${LUN}";
  42. for ADDRESS in ${ADDRESSES}; do
  43. echo " Address: ${ADDRESS}"
  44. done
  45. echo " Device: ${BLOCKDEVICE}";
  46. echo " Mountpoint: ${MOUNTPOINT}";
  47. echo
  48. }
  49. if [[ -z "${IQN}" ]]; then
  50. IQNLIST=$(cat /sys/class/iscsi_session/*/targetname | sort -u)
  51. for IQN in ${IQNLIST}; do
  52. PrintIQN ${IQN}
  53. done
  54. else
  55. PrintIQN ${IQN}
  56. fi