#!/bin/bash IQN=$1 HOST=$2 if [ -z "${IQN}" ]; then echo "usage: $0 TargetIQN [Host]" echo "" exit fi 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 &> /dev/null RETURNCODE=$? fi sleep 0.5 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) 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 MOUNTPOINT="/mnt/iSCSI_${IQN}" mkdir -p ${MOUNTPOINT} FILESYSTEM=$(blkid ${BLOCKDEVICE}) if [ -z "${FILESYSTEM}" ]; then echo "No Filesystem found, initialize using following command:" echo "mkfs.ext4 ${BLOCKDEVICE}" echo "" echo "And mount afterwards using:" echo "mount ${BLOCKDEVICE} ${MOUNTPOINT}" else 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 ""