From 639fb430187024770b61ce4563da0ef9ed3759ba Mon Sep 17 00:00:00 2001 From: JDierkse Date: Fri, 12 May 2023 11:20:43 +0200 Subject: [PATCH] Update trim to trim all mounted IQNs --- trim | 105 +++++++++++++++++++++++++++++++---------------------------- 1 file changed, 55 insertions(+), 50 deletions(-) diff --git a/trim b/trim index f289edb..9d6d3ef 100755 --- a/trim +++ b/trim @@ -2,61 +2,66 @@ IQN=$1 -if [[ -z "${IQN}" ]]; then - echo "usage: $0 TargetIQN" - echo "" +TrimIQN() { + IQN=$1 - 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 "" -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 - MULTIPATH=$((MULTIPATH + 1)) -done + fstrim -v ${MOUNTPOINT} +} -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}" +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 - -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} -