#!/bin/bash . /etc/rc.conf . /etc/rc.d/functions # general config [ -f /etc/conf.d/open-iscsi ] && . /etc/conf.d/open-iscsi # Set defaults if settings are missing [ -z "${ISCSID_ARGS}" ] && ISCSID_ARGS="" [ -z "$SEC_BEFORE_MOUNT" ] && SEC_BEFORE_MOUNT=2 [ -z "$ISCSIADM_EXTRAARGS" ] && ISCSIADM_EXTRAARGS="" DAEMON_NAME="open-iscsi" ISCSIADM=/sbin/iscsiadm PIDFILE=/var/run/iscsid.pid case "$1" in start) modprobe -q iscsi_tcp &>/dev/null modprobe -q ib_iser &>/dev/null stat_busy "Starting Open-iSCSI daemon" /sbin/iscsid ${ISCSID_ARGS} if [ $? -ne 0 ]; then stat_fail exit 2 else add_daemon $DAEMON_NAME stat_done fi if [ -n "$SERVER" ]; then stat_busy "Discovering targets" $ISCSIADM -m discovery -t sendtargets -p $SERVER $ISCSIADM_EXTRAARGS > /dev/null if [ $? -ne 0 ]; then stat_fail exit 3 else stat_done fi stat_busy "Login to all portals" $ISCSIADM -m node -L all > /dev/null if [ $? -ne 0 ]; then stat_fail exit 4 else stat_done fi if [[ "$MOUNT" != "" ]]; then # wait n seconds to settle sleep $SEC_BEFORE_MOUNT status "Mounting devices" for MTPT in ${MOUNT[@]}; do stat_busy "mounting $MTPT" mount $MTPT sleep 1 if [ $? -eq 0 ]; then stat_done else stat_fail fi done else status "No devices to mount defined" fi fi ;; stop) if [[ "$MOUNT" != "" ]]; then status "Unmounting devices" # unmounting in reverse order LEN=${#MOUNT[@]} while [ $LEN -ne 0 ]; do let LEN=$LEN-1; UMOUNT="$UMOUNT ${MOUNT[$LEN]}"; done for MTPT in $UMOUNT; do MOUNTED=$(mount|grep -c `/usr/bin/readlink -mns $MTPT`) if [ $MOUNTED -ne 0 ]; then stat_busy "unmounting $MTPT" umount $MTPT sleep 1 if [ $? -eq 0 ]; then stat_done else stat_fail exit 5 fi else status "$MTPT not mounted" fi done sleep 2 else status "No devices to unmount defined" fi $ISCSIADM -m session $> /dev/null if [ $? -eq 0 ]; then stat_busy "Logout to all portals" $ISCSIADM -m node -U all > /dev/null if [ $? -ne 0 ]; then stat_fail exit 6 else stat_done fi fi stat_busy "Stopping Open-iSCSI daemon" [ -f $PIDFILE ] && kill -9 `cat $PIDFILE` &> /dev/null if [ $? -ne 0 ]; then stat_fail else rm -f $PIDFILE killall iscsid > /dev/null rm_daemon $DAEMON_NAME stat_done fi ;; status) status "Open-iSCSI status" ck_daemon $DAEMON_NAME status "Available portals on node" echo echo -ne " " /sbin/iscsiadm -m node echo status "Connected portals for this session" echo echo -ne " " /sbin/iscsiadm -m session echo ;; statusv) status "Open-iSCSI status" ck_daemon $DAEMON_NAME status "Detailed session info" echo $ISCSIADM -m session -P 2 echo ;; restart) $0 stop sleep 2 $0 start ;; *) echo "usage: $0 {start|stop|status|statusv|restart}" ;; esac exit 0