JDierkse 2 роки тому
батько
коміт
036bd6a7b5
1 змінених файлів з 62 додано та 0 видалено
  1. 62 0
      trim

+ 62 - 0
trim

@@ -0,0 +1,62 @@
+#!/bin/bash
+
+IQN=$1
+
+if [[ -z "${IQN}" ]]; then
+	echo "usage: $0 TargetIQN"
+        echo ""
+
+	exit
+fi
+
+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 ""
+
+	exit
+fi
+
+fstrim -v ${MOUNTPOINT}
+