trim 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #!/bin/bash
  2. IQN=$1
  3. if [[ -z "${IQN}" ]]; then
  4. echo "usage: $0 TargetIQN"
  5. echo ""
  6. exit
  7. fi
  8. MULTIPATH=0
  9. IQNTESTLIST=$(grep -h ${IQN} /sys/class/iscsi_session/*/targetname)
  10. for IQNTEST in ${IQNTESTLIST}; do
  11. if [ "${IQNTEST}" != "${IQN}" ]; then
  12. echo "IQN not found"
  13. echo ""
  14. exit
  15. fi
  16. MULTIPATH=$((MULTIPATH + 1))
  17. done
  18. SESSIONFOLDERLIST=$(grep -l ${IQN} /sys/class/iscsi_session/*/targetname | xargs realpath)
  19. declare -A ADDRESSES
  20. declare -A BLOCKDEVICES
  21. for SESSIONFOLDER in ${SESSIONFOLDERLIST}; do
  22. SESSION=$(echo "${SESSIONFOLDER}" | sed 's/.*session\([0-9]*\).*/\1/g')
  23. HOST=$(echo "${SESSIONFOLDER}" | sed 's/.*host\([0-9]*\).*/\1/g')
  24. SCSIADDRESS=$(echo "${SESSIONFOLDER}" | sed 's/\(.*\)\/iscsi_session.*/\1/g' | xargs ls -1 | grep "target${HOST}" | sed 's/target//g')
  25. MAJOR=$(echo "${SCSIADDRESS}" | cut -d ":" -f 2)
  26. MINOR=$(echo "${SCSIADDRESS}" | cut -d ":" -f 3)
  27. FULLSCSIADDRESS=$(echo "${SESSIONFOLDER}" | sed "s/\(.*\)\/iscsi_session.*/\1\/target${SCSIADDRESS}/g" | xargs ls -1 | grep ":")
  28. LUN=$(echo "${FULLSCSIADDRESS}" | cut -d ":" -f 4)
  29. ADDRESS="[${SESSION}]:scsi$HOST:${MAJOR}:${MINOR}:${LUN}"
  30. ADDRESSES+="${ADDRESS} "
  31. BLOCKDEVICE=$(echo "${SESSIONFOLDER}" | sed "s/\(.*\)\/iscsi_session.*/\1\/target${SCSIADDRESS}\/${FULLSCSIADDRESS}\/block/g" | xargs ls -1 | xargs printf "/dev/%s")
  32. BLOCKDEVICES+="${BLOCKDEVICE} "
  33. done
  34. MULTIPATHDEVICE=$(multipath -l ${BLOCKDEVICES[0]} | grep 'mpath' | sed -e 's/^\([a-z]*\) .*/\1/g')
  35. if [ ! -z "${MULTIPATHDEVICE}" ]; then
  36. BLOCKDEVICE="/dev/mapper/${MULTIPATHDEVICE}"
  37. fi
  38. MOUNTPOINT=$(grep "${BLOCKDEVICE}" /proc/mounts | head -n 1 | cut -d " " -f 2)
  39. if [[ -z "${MOUNTPOINT}" || ! -d "${MOUNTPOINT}" ]]; then
  40. echo "IQN ${IQN} is not mounted"
  41. echo ""
  42. exit
  43. fi
  44. fstrim -v ${MOUNTPOINT}