|
|
@@ -3,33 +3,68 @@
|
|
|
IQN=$1
|
|
|
HOST=$2
|
|
|
|
|
|
-if [[ -z "${IQN}" ]]; then
|
|
|
+if [ -z "${IQN}" ]; then
|
|
|
echo "usage: $0 TargetIQN [Host]"
|
|
|
echo ""
|
|
|
|
|
|
exit
|
|
|
fi
|
|
|
|
|
|
-iscsiadm -m discovery -t sendtargets -o update -p ${HOST} &> /dev/null
|
|
|
-
|
|
|
-if [[ ! -z "${HOST}" ]]; then
|
|
|
- iscsiadm -m node -T ${IQN} -p ${HOST} -l
|
|
|
+if [ ! -z "${HOST}" ]; then
|
|
|
+ iscsiadm -m discovery -t sendtargets -o update -p ${HOST} &> /dev/null
|
|
|
+ iscsiadm -m node -T ${IQN} -p ${HOST} -l &> /dev/null
|
|
|
+ RETURNCODE=$?
|
|
|
else
|
|
|
- iscsiadm -m node -T ${IQN} -l
|
|
|
+ iscsiadm -m node -T ${IQN} -l &> /dev/null
|
|
|
+ RETURNCODE=$?
|
|
|
fi
|
|
|
|
|
|
sleep 0.5
|
|
|
|
|
|
-SESSIONID=$(iscsiadm -m session | grep "${IQN}" | head -n 1 | sed -e 's/.*\[\(.*\)\].*/\1/g')
|
|
|
-DEVICE=$(iscsiadm -m session -r ${SESSIONID} -P 3 | grep "Attached scsi disk" | sed -e 's/.*Attached scsi disk \([^\t]*\).*/\/dev\/\1/g')
|
|
|
-BLOCKDEVICE=${DEVICE}
|
|
|
+MULTIPATH=0
|
|
|
+IQNTESTLIST=$(grep -h ${IQN} /sys/class/iscsi_session/*/targetname)
|
|
|
+for IQNTEST in ${IQNTESTLIST}; do
|
|
|
+ if [ "${IQNTEST}" != "${IQN}" ]; then
|
|
|
+ echo "IQN login failed"
|
|
|
+ echo ""
|
|
|
+
|
|
|
+ exit
|
|
|
+ fi
|
|
|
+
|
|
|
+ MULTIPATH=$((MULTIPATH + 1))
|
|
|
+done
|
|
|
+
|
|
|
+SESSIONFOLDERLIST=$(grep -l ${IQN} /sys/class/iscsi_session/*/targetname | xargs realpath)
|
|
|
+
|
|
|
+declare -A ADDRESSES
|
|
|
+declare -A BLOCKDEVICES
|
|
|
+for SESSIONFOLDER in ${SESSIONFOLDERLIST}; do
|
|
|
+ SESSION=$(echo "${SESSIONFOLDER}" | sed 's/.*session\([0-9]*\).*/\1/g')
|
|
|
+ HOST=$(echo "${SESSIONFOLDER}" | sed 's/.*host\([0-9]*\).*/\1/g')
|
|
|
+
|
|
|
+ SCSIADDRESS=$(echo "${SESSIONFOLDER}" | sed 's/\(.*\)\/iscsi_session.*/\1/g' | xargs ls -1 | grep "target${HOST}" | sed 's/target//g')
|
|
|
+ MAJOR=$(echo "${SCSIADDRESS}" | cut -d ":" -f 2)
|
|
|
+ MINOR=$(echo "${SCSIADDRESS}" | cut -d ":" -f 3)
|
|
|
|
|
|
-MULTIPATHDEVICE=$(multipath -l ${DEVICE} | grep 'mpath' | sed -e 's/^\([a-z]*\) .*/\1/g')
|
|
|
-if [[ ! -z "${MULTIPATHDEVICE}" ]]; then
|
|
|
+ FULLSCSIADDRESS=$(echo "${SESSIONFOLDER}" | sed "s/\(.*\)\/iscsi_session.*/\1\/target${SCSIADDRESS}/g" | xargs ls -1 | grep ":")
|
|
|
+ LUN=$(echo "${FULLSCSIADDRESS}" | cut -d ":" -f 4)
|
|
|
+
|
|
|
+ ADDRESS="[${SESSION}]:scsi$HOST:${MAJOR}:${MINOR}:${LUN}"
|
|
|
+ ADDRESSES+="${ADDRESS} "
|
|
|
+
|
|
|
+ BLOCKDEVICE=$(echo "${SESSIONFOLDER}" | sed "s/\(.*\)\/iscsi_session.*/\1\/target${SCSIADDRESS}\/${FULLSCSIADDRESS}\/block/g" | xargs ls -1 | xargs printf "/dev/%s")
|
|
|
+ BLOCKDEVICES+="${BLOCKDEVICE} "
|
|
|
+done
|
|
|
+
|
|
|
+multipath -r
|
|
|
+MULTIPATHDEVICE=$(multipath -l ${BLOCKDEVICES[0]} | grep 'mpath' | sed -e 's/^\([a-z]*\) .*/\1/g')
|
|
|
+if [ ! -z "${MULTIPATHDEVICE}" ]; then
|
|
|
BLOCKDEVICE="/dev/mapper/${MULTIPATHDEVICE}"
|
|
|
fi
|
|
|
|
|
|
-mkdir -p /mnt/iSCSI_${IQN}
|
|
|
+MOUNTPOINT="/mnt/iSCSI_${IQN}"
|
|
|
+
|
|
|
+mkdir -p ${MOUNTPOINT}
|
|
|
|
|
|
FILESYSTEM=$(blkid ${BLOCKDEVICE})
|
|
|
if [ -z "${FILESYSTEM}" ]; then
|
|
|
@@ -37,8 +72,29 @@ if [ -z "${FILESYSTEM}" ]; then
|
|
|
echo "mkfs.ext4 ${BLOCKDEVICE}"
|
|
|
echo ""
|
|
|
echo "And mount afterwards using:"
|
|
|
- echo "mount ${BLOCKDEVICE} /mnt/iSCSI_${IQN}"
|
|
|
+ echo "mount ${BLOCKDEVICE} ${MOUNTPOINT}"
|
|
|
else
|
|
|
- mount -o discard ${BLOCKDEVICE} /mnt/iSCSI_${IQN}
|
|
|
+ mount -o discard ${BLOCKDEVICE} ${MOUNTPOINT}
|
|
|
+ RETURNCODE=$?
|
|
|
+
|
|
|
+ if [ "${RETURNCODE}" != "0" ]; then
|
|
|
+ echo "IQN: ${IQN}"
|
|
|
+ for ADDRESS in ${ADDRESSES}; do
|
|
|
+ echo "Address: ${ADDRESS}"
|
|
|
+ done
|
|
|
+ echo "Device: ${BLOCKDEVICE}"
|
|
|
+ echo "Mountpoint: ${MOUNTPOINT}"
|
|
|
+ echo "Mounting failed"
|
|
|
+ else
|
|
|
+ echo "IQN: ${IQN}"
|
|
|
+ for ADDRESS in ${ADDRESSES}; do
|
|
|
+ echo "Address: ${ADDRESS}"
|
|
|
+ done
|
|
|
+ echo "Device: ${BLOCKDEVICE}"
|
|
|
+ echo "Mountpoint: ${MOUNTPOINT}"
|
|
|
+ echo "Mounting succeeded"
|
|
|
+ fi
|
|
|
fi
|
|
|
|
|
|
+echo ""
|
|
|
+
|