mountVolume 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. #!/bin/bash
  2. IQN=$1
  3. HOST=$2
  4. if [ -z "${IQN}" ]; then
  5. echo "usage: $0 TargetIQN [Host]"
  6. echo ""
  7. exit
  8. fi
  9. if [ ! -z "${HOST}" ]; then
  10. iscsiadm -m discovery -t sendtargets -o update -p ${HOST} &> /dev/null
  11. iscsiadm -m node -T ${IQN} -p ${HOST} -l &> /dev/null
  12. RETURNCODE=$?
  13. else
  14. iscsiadm -m node -T ${IQN} -l &> /dev/null
  15. RETURNCODE=$?
  16. fi
  17. sleep 0.5
  18. MULTIPATH=0
  19. IQNTESTLIST=$(grep -h ${IQN} /sys/class/iscsi_session/*/targetname)
  20. for IQNTEST in ${IQNTESTLIST}; do
  21. if [ "${IQNTEST}" != "${IQN}" ]; then
  22. echo "IQN login failed"
  23. echo ""
  24. exit
  25. fi
  26. MULTIPATH=$((MULTIPATH + 1))
  27. done
  28. SESSIONFOLDERLIST=$(grep -l ${IQN} /sys/class/iscsi_session/*/targetname | xargs realpath)
  29. declare -A ADDRESSES
  30. declare -A BLOCKDEVICES
  31. for SESSIONFOLDER in ${SESSIONFOLDERLIST}; do
  32. SESSION=$(echo "${SESSIONFOLDER}" | sed 's/.*session\([0-9]*\).*/\1/g')
  33. HOST=$(echo "${SESSIONFOLDER}" | sed 's/.*host\([0-9]*\).*/\1/g')
  34. SCSIADDRESS=$(echo "${SESSIONFOLDER}" | sed 's/\(.*\)\/iscsi_session.*/\1/g' | xargs ls -1 | grep "target${HOST}" | sed 's/target//g')
  35. MAJOR=$(echo "${SCSIADDRESS}" | cut -d ":" -f 2)
  36. MINOR=$(echo "${SCSIADDRESS}" | cut -d ":" -f 3)
  37. FULLSCSIADDRESS=$(echo "${SESSIONFOLDER}" | sed "s/\(.*\)\/iscsi_session.*/\1\/target${SCSIADDRESS}/g" | xargs ls -1 | grep ":")
  38. LUN=$(echo "${FULLSCSIADDRESS}" | cut -d ":" -f 4)
  39. ADDRESS="[${SESSION}]:scsi$HOST:${MAJOR}:${MINOR}:${LUN}"
  40. ADDRESSES+="${ADDRESS} "
  41. BLOCKDEVICE=$(echo "${SESSIONFOLDER}" | sed "s/\(.*\)\/iscsi_session.*/\1\/target${SCSIADDRESS}\/${FULLSCSIADDRESS}\/block/g" | xargs ls -1 | xargs printf "/dev/%s")
  42. BLOCKDEVICES+="${BLOCKDEVICE} "
  43. done
  44. multipath -r
  45. MULTIPATHDEVICE=$(multipath -l ${BLOCKDEVICES[0]} | grep 'mpath' | sed -e 's/^\([a-z]*\) .*/\1/g')
  46. if [ ! -z "${MULTIPATHDEVICE}" ]; then
  47. BLOCKDEVICE="/dev/mapper/${MULTIPATHDEVICE}"
  48. fi
  49. MOUNTPOINT="/mnt/iSCSI_${IQN}"
  50. mkdir -p ${MOUNTPOINT}
  51. FILESYSTEM=$(blkid ${BLOCKDEVICE})
  52. if [ -z "${FILESYSTEM}" ]; then
  53. echo "No Filesystem found, initialize using following command:"
  54. echo "mkfs.ext4 ${BLOCKDEVICE}"
  55. echo ""
  56. echo "And mount afterwards using:"
  57. echo "mount ${BLOCKDEVICE} ${MOUNTPOINT}"
  58. else
  59. mount -o discard ${BLOCKDEVICE} ${MOUNTPOINT}
  60. RETURNCODE=$?
  61. if [ "${RETURNCODE}" != "0" ]; then
  62. echo "IQN: ${IQN}"
  63. for ADDRESS in ${ADDRESSES}; do
  64. echo "Address: ${ADDRESS}"
  65. done
  66. echo "Device: ${BLOCKDEVICE}"
  67. echo "Mountpoint: ${MOUNTPOINT}"
  68. echo "Mounting failed"
  69. else
  70. echo "IQN: ${IQN}"
  71. for ADDRESS in ${ADDRESSES}; do
  72. echo "Address: ${ADDRESS}"
  73. done
  74. echo "Device: ${BLOCKDEVICE}"
  75. echo "Mountpoint: ${MOUNTPOINT}"
  76. echo "Mounting succeeded"
  77. fi
  78. fi
  79. echo ""