|
@@ -2,61 +2,66 @@
|
|
|
|
|
|
|
|
IQN=$1
|
|
IQN=$1
|
|
|
|
|
|
|
|
-if [[ -z "${IQN}" ]]; then
|
|
|
|
|
- echo "usage: $0 TargetIQN"
|
|
|
|
|
- echo ""
|
|
|
|
|
|
|
+TrimIQN() {
|
|
|
|
|
+ IQN=$1
|
|
|
|
|
+
|
|
|
|
|
+ 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
|
|
|
|
|
|
|
|
- exit
|
|
|
|
|
-fi
|
|
|
|
|
|
|
+ MOUNTPOINT=$(grep "${BLOCKDEVICE}" /proc/mounts | head -n 1 | cut -d " " -f 2)
|
|
|
|
|
|
|
|
-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 ""
|
|
|
|
|
|
|
+ if [[ -z "${MOUNTPOINT}" || ! -d "${MOUNTPOINT}" ]]; then
|
|
|
|
|
+ echo "IQN ${IQN} is not mounted"
|
|
|
|
|
+ echo ""
|
|
|
|
|
|
|
|
exit
|
|
exit
|
|
|
fi
|
|
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} "
|
|
|
|
|
|
|
+ fstrim -v ${MOUNTPOINT}
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
- 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 ""
|
|
|
|
|
-
|
|
|
|
|
- exit
|
|
|
|
|
|
|
+if [[ -z "${IQN}" ]]; then
|
|
|
|
|
+ IQNLIST=$(cat /sys/class/iscsi_session/*/targetname | sort -u)
|
|
|
|
|
+ for IQN in ${IQNLIST}; do
|
|
|
|
|
+ TrimIQN ${IQN}
|
|
|
|
|
+ done
|
|
|
|
|
+else
|
|
|
|
|
+ TrimIQN ${IQN}
|
|
|
fi
|
|
fi
|
|
|
-
|
|
|
|
|
-fstrim -v ${MOUNTPOINT}
|
|
|
|
|
-
|
|
|