Add Multipath support
This commit is contained in:
@@ -5,26 +5,46 @@ IQN=$1
|
|||||||
PrintIQN() {
|
PrintIQN() {
|
||||||
IQN=$1
|
IQN=$1
|
||||||
|
|
||||||
IQNTEST=$(grep -h ${IQN} /sys/class/iscsi_session/*/targetname)
|
MULTIPATH=0
|
||||||
if [ "${IQNTEST}" != "${IQN}" ]; then
|
IQNTESTLIST=$(grep -h ${IQN} /sys/class/iscsi_session/*/targetname)
|
||||||
echo "IQN not found"
|
for IQNTEST in ${IQNTESTLIST}; do
|
||||||
echo ""
|
if [ "${IQNTEST}" != "${IQN}" ]; then
|
||||||
|
echo "IQN not found"
|
||||||
|
echo ""
|
||||||
|
|
||||||
exit
|
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
|
||||||
|
|
||||||
|
MULTIPATHDEVICE=$(multipath -l ${BLOCKDEVICES[0]} | grep 'mpath' | sed -e 's/^\([a-z]*\) .*/\1/g')
|
||||||
|
if [ ! -z "${MULTIPATHDEVICE}" ]; then
|
||||||
|
BLOCKDEVICE="/dev/mapper/${MULTIPATHDEVICE}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
SESSIONFOLDER=$(grep -l ${IQN} /sys/class/iscsi_session/*/targetname | xargs realpath)
|
|
||||||
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)
|
|
||||||
|
|
||||||
BLOCKDEVICE=$(echo "${SESSIONFOLDER}" | sed "s/\(.*\)\/iscsi_session.*/\1\/target${SCSIADDRESS}\/${FULLSCSIADDRESS}\/block/g" | xargs ls -1 | xargs printf "/dev/%s")
|
|
||||||
MOUNTPOINT=$(grep "${BLOCKDEVICE}" /proc/mounts | head -n 1 | cut -d " " -f 2)
|
MOUNTPOINT=$(grep "${BLOCKDEVICE}" /proc/mounts | head -n 1 | cut -d " " -f 2)
|
||||||
|
|
||||||
echo "IQN: ${IQN}"
|
echo "IQN: ${IQN}"
|
||||||
@@ -33,17 +53,19 @@ PrintIQN() {
|
|||||||
#echo " Channel: ${MAJOR}";
|
#echo " Channel: ${MAJOR}";
|
||||||
#echo " Id: ${MINOR}";
|
#echo " Id: ${MINOR}";
|
||||||
#echo " LUN: ${LUN}";
|
#echo " LUN: ${LUN}";
|
||||||
echo " Address: [${SESSION}] scsi$HOST:${MAJOR}:${MINOR}:${LUN}"
|
for ADDRESS in ${ADDRESSES}; do
|
||||||
|
echo " Address: ${ADDRESS}"
|
||||||
|
done
|
||||||
echo " Device: ${BLOCKDEVICE}";
|
echo " Device: ${BLOCKDEVICE}";
|
||||||
echo " Mountpoint: ${MOUNTPOINT}";
|
echo " Mountpoint: ${MOUNTPOINT}";
|
||||||
echo
|
echo
|
||||||
}
|
}
|
||||||
|
|
||||||
if [[ -z "${IQN}" ]]; then
|
if [[ -z "${IQN}" ]]; then
|
||||||
IQNLIST=$(cat /sys/class/iscsi_session/*/targetname)
|
IQNLIST=$(cat /sys/class/iscsi_session/*/targetname | sort -u)
|
||||||
for IQN in ${IQNLIST}; do
|
for IQN in ${IQNLIST}; do
|
||||||
PrintIQN ${IQN}
|
PrintIQN ${IQN}
|
||||||
done;
|
done
|
||||||
else
|
else
|
||||||
PrintIQN ${IQN}
|
PrintIQN ${IQN}
|
||||||
fi
|
fi
|
||||||
|
|||||||
+70
-14
@@ -3,33 +3,68 @@
|
|||||||
IQN=$1
|
IQN=$1
|
||||||
HOST=$2
|
HOST=$2
|
||||||
|
|
||||||
if [[ -z "${IQN}" ]]; then
|
if [ -z "${IQN}" ]; then
|
||||||
echo "usage: $0 TargetIQN [Host]"
|
echo "usage: $0 TargetIQN [Host]"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
iscsiadm -m discovery -t sendtargets -o update -p ${HOST} &> /dev/null
|
if [ ! -z "${HOST}" ]; then
|
||||||
|
iscsiadm -m discovery -t sendtargets -o update -p ${HOST} &> /dev/null
|
||||||
if [[ ! -z "${HOST}" ]]; then
|
iscsiadm -m node -T ${IQN} -p ${HOST} -l &> /dev/null
|
||||||
iscsiadm -m node -T ${IQN} -p ${HOST} -l
|
RETURNCODE=$?
|
||||||
else
|
else
|
||||||
iscsiadm -m node -T ${IQN} -l
|
iscsiadm -m node -T ${IQN} -l &> /dev/null
|
||||||
|
RETURNCODE=$?
|
||||||
fi
|
fi
|
||||||
|
|
||||||
sleep 0.5
|
sleep 0.5
|
||||||
|
|
||||||
SESSIONID=$(iscsiadm -m session | grep "${IQN}" | head -n 1 | sed -e 's/.*\[\(.*\)\].*/\1/g')
|
MULTIPATH=0
|
||||||
DEVICE=$(iscsiadm -m session -r ${SESSIONID} -P 3 | grep "Attached scsi disk" | sed -e 's/.*Attached scsi disk \([^\t]*\).*/\/dev\/\1/g')
|
IQNTESTLIST=$(grep -h ${IQN} /sys/class/iscsi_session/*/targetname)
|
||||||
BLOCKDEVICE=${DEVICE}
|
for IQNTEST in ${IQNTESTLIST}; do
|
||||||
|
if [ "${IQNTEST}" != "${IQN}" ]; then
|
||||||
|
echo "IQN login failed"
|
||||||
|
echo ""
|
||||||
|
|
||||||
MULTIPATHDEVICE=$(multipath -l ${DEVICE} | grep 'mpath' | sed -e 's/^\([a-z]*\) .*/\1/g')
|
exit
|
||||||
if [[ ! -z "${MULTIPATHDEVICE}" ]]; then
|
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}"
|
BLOCKDEVICE="/dev/mapper/${MULTIPATHDEVICE}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
mkdir -p /mnt/iSCSI_${IQN}
|
MOUNTPOINT="/mnt/iSCSI_${IQN}"
|
||||||
|
|
||||||
|
mkdir -p ${MOUNTPOINT}
|
||||||
|
|
||||||
FILESYSTEM=$(blkid ${BLOCKDEVICE})
|
FILESYSTEM=$(blkid ${BLOCKDEVICE})
|
||||||
if [ -z "${FILESYSTEM}" ]; then
|
if [ -z "${FILESYSTEM}" ]; then
|
||||||
@@ -37,8 +72,29 @@ if [ -z "${FILESYSTEM}" ]; then
|
|||||||
echo "mkfs.ext4 ${BLOCKDEVICE}"
|
echo "mkfs.ext4 ${BLOCKDEVICE}"
|
||||||
echo ""
|
echo ""
|
||||||
echo "And mount afterwards using:"
|
echo "And mount afterwards using:"
|
||||||
echo "mount ${BLOCKDEVICE} /mnt/iSCSI_${IQN}"
|
echo "mount ${BLOCKDEVICE} ${MOUNTPOINT}"
|
||||||
else
|
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
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
|||||||
+47
-5
@@ -9,16 +9,58 @@ if [[ -z "${IQN}" ]]; then
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ! -d "/mnt/iSCSI_${IQN}" ]]; then
|
MULTIPATH=0
|
||||||
|
IQNTESTLIST=$(grep -h ${IQN} /sys/class/iscsi_session/*/targetname)
|
||||||
|
for IQNTEST in ${IQNTESTLIST}; do
|
||||||
|
if [ "${IQNTEST}" != "${IQN}" ]; then
|
||||||
|
echo "IQN not found"
|
||||||
|
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
|
||||||
|
|
||||||
|
MULTIPATHDEVICE=$(multipath -l ${BLOCKDEVICES[0]} | grep 'mpath' | sed -e 's/^\([a-z]*\) .*/\1/g')
|
||||||
|
if [ ! -z "${MULTIPATHDEVICE}" ]; then
|
||||||
|
BLOCKDEVICE="/dev/mapper/${MULTIPATHDEVICE}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
MOUNTPOINT=$(grep "${BLOCKDEVICE}" /proc/mounts | head -n 1 | cut -d " " -f 2)
|
||||||
|
|
||||||
|
if [[ -z "${MOUNTPOINT}" || ! -d "${MOUNTPOINT}" ]]; then
|
||||||
echo "IQN ${IQN} is not mounted"
|
echo "IQN ${IQN} is not mounted"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dd if=/dev/zero of=/mnt/iSCSI_${IQN}/test1.img bs=1G count=1 oflag=dsync
|
dd if=/dev/zero of=${MOUNTPOINT}/test1.img bs=1G count=1 oflag=dsync
|
||||||
dd if=/dev/zero of=/mnt/iSCSI_${IQN}/test2.img bs=512 count=1000 oflag=dsync
|
dd if=/dev/zero of=${MOUNTPOINT}/test2.img bs=512 count=1000 oflag=dsync
|
||||||
|
|
||||||
rm -f /mnt/iSCSI_${IQN}/test1.img
|
rm -f ${MOUNTPOINT}/test1.img
|
||||||
rm -f /mnt/iSCSI_${IQN}/test2.img
|
rm -f ${MOUNTPOINT}/test2.img
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user