From 75ad35b1f5a44d8f5907f0e5a319b26063c00de0 Mon Sep 17 00:00:00 2001 From: Dunestorm Date: Thu, 21 May 2020 12:37:34 +0100 Subject: [PATCH] Smart iSCSI Mounter v0.95 - Process tester and status. - Version checker. - Force flag. - Admin rights now only required when mounting/un-mounting. - Using lazy method of mounting filesystem for better reliability. - Ensured mounting is non permanent in mount-flags. --- iscsi_vms.sh | 82 ++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 61 insertions(+), 21 deletions(-) diff --git a/iscsi_vms.sh b/iscsi_vms.sh index 070531b..43a5436 100755 --- a/iscsi_vms.sh +++ b/iscsi_vms.sh @@ -4,6 +4,12 @@ DISK_UUID="12E6B87AE6B86021" IQN="iqn.2000-01.com.synology:SR3.VMs" PORTAL_IP="192.168.0.3" MOUNT_DIR="/home/dunestorm/VMs" +MONITOR_PROC="vmware" +MONITOR_PROC_CNT=7 + +# Do not modify +_MONITOR_PROC_CNT=$(pgrep -f $MONITOR_PROC | wc -l) +_FLAG_FORCE=0 show_usage (){ echo "Please use either '-m (--mount)' to mount or '-u (--umount)' to unmount this volume." @@ -12,9 +18,9 @@ show_usage (){ } check_dir (){ - file_count=$(ls $MOUNT_DIR/. | wc -l) + echo "INFO: Process '${MONITOR_PROC}' has ${_MONITOR_PROC_CNT} instances running." - if [ "$file_count" -ge 1 ] + if [ $(ls $MOUNT_DIR/. | wc -l) -ge 1 ] then echo "" echo "Directory is mounted at:" $MOUNT_DIR @@ -24,40 +30,74 @@ check_dir (){ fi } -# Check for admin rights -if [[ $EUID -ne 0 ]] -then - echo "You may only mount as root, please re-run with appropriate permissions." - exit 1; -fi +check_proc_status (){ + if [ ${_MONITOR_PROC_CNT} -gt $MONITOR_PROC_CNT ] + then + echo "WARNING: process '${MONITOR_PROC}' is still running, unable to unmount volume safely." + exit 2; + else + echo "INFO: Process ${MONITOR_PROC} is not running." + fi +} + +mount_func (){ + echo "[Attempting to mount iSCSI volume]" + iscsiadm --mode node --targetname $IQN --portal $PORTAL_IP --login + sleep 3 + mount /dev/disk/by-uuid/$DISK_UUID $MOUNT_DIR -o noauto,noperm + check_dir +} + +umount_func (){ + echo "[Attempting to un-mount iSCSI volume]" + + if [[ $_FLAG_FORCE -eq 0 ]]; then + check_proc_status + fi + + umount -l $MOUNT_DIR + sleep 3 + iscsiadm --mode node --targetname $IQN --portal $PORTAL_IP --logout + check_dir +} + +check_admin (){ + if [[ $EUID -ne 0 ]] + then + echo "You may only mount/un-mount as root, please re-run with appropriate permissions." + exit 1; + fi +} # Process input parameters while (( "$#" )); do + case "$2" in + -f|--force) + _FLAG_FORCE=1 + #echo "FLAG: ${_FLAG_FORCE}" + ;; + esac case "$1" in -m|--mount) - echo "[Attempting to mount iSCSI volume]" - iscsiadm --mode node --targetname $IQN --portal $PORTAL_IP --login - sleep 3 - mount /dev/disk/by-uuid/$DISK_UUID $MOUNT_DIR - check_dir - exit 0; + check_admin + mount_func ;; -u|--umount) - echo "[Attempting to un-mount iSCSI volume]" - umount $MOUNT_DIR - iscsiadm --mode node --targetname $IQN --portal $PORTAL_IP --logout - check_dir - exit 0; + check_admin + umount_func ;; -s|--status) echo "[Showing status of mount-point]" check_dir - exit 0; + ;; + -r|--release) + echo "Smart iSCSI Mounter v0.95" ;; -*) show_usage ;; - esac + esac + exit 0; done # Show usage if no parameters have been passed