Jelajahi Sumber

Update trim to trim all mounted IQNs

JDierkse 2 tahun lalu
induk
melakukan
639fb43018
1 mengubah file dengan 55 tambahan dan 50 penghapusan
  1. 55 50
      trim

+ 55 - 50
trim

@@ -2,61 +2,66 @@
 
 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
 	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
-
-fstrim -v ${MOUNTPOINT}
-