#!/bin/bash # # esata # Version: __appVersion__ # # Add, remove, mount, and unmount external SATA drives BASEDEV=/dev/sdc PARTITION=2 MNT=/media/esata # ---- DEV=${BASEDEV}${PARTITION} DELAY=5 error_exit() { echo "$0: $1" >&2 exit 1 } have_root() { [ $(whoami) == "root" ] && return 0 || return 1 } scsi_dev() { local d=$(basename "$BASEDEV") ls /sys/block/$d/device/scsi_disk | 2>/dev/null \ sed -e "s/^\([0-9a-f]*\):.*$/\1/" } registered() { if [ -b "$BASEDEV" ]; then [ -n "$VERBOSE" ] && echo "registered" return 0 else [ -n "$VERBOSE" ] && echo "not registered" return 1 fi } partitioned() { if [ -b "$DEV" ]; then [ -n "$VERBOSE" ] && echo "partitioned" return 0 else [ -n "$VERBOSE" ] && echo "not partitioned" return 1 fi } mounted() { if mount | grep -q "$MNT"; then [ -n "$VERBOSE" ] && echo "mounted" return 0 else [ -n "$VERBOSE" ] && echo "not mounted" return 1 fi } doregister() { have_root || error_exit "need root privileges to register device" registered && return 0 [ -n "$VERBOSE" ] && echo "register SATA device" scsiadd -a $(scsi_dev) 0 0 0 >/dev/null || return 1 sleep $DELAY registered || return 1 [ -n "$VERBOSE" ] && echo "register ok" return 0 } domount() { have_root || error_exit "need root privileges to mount device" mounted && return 0 doregister || return 1 partitioned || return 1 [ -n "$VERBOSE" ] && echo "mount SATA $DEV" mkdir -p "$MNT" || return 1 mount "$DEV" "$MNT" || return 1 [ -n "$VERBOSE" ] && echo "mount ok" return 0 } dounregister() { have_root || error_exit "need root privileges to unregister device" registered || return 0 [ -n "$VERBOSE" ] && echo "unregister SATA device" scsiadd -r $(scsi_dev) 0 0 0 >/dev/null || return 1 sleep $DELAY registered && return 1 [ -n "$VERBOSE" ] && echo "unregister ok" return 0 } doumount() { if mounted; then have_root || error_exit "need root privileges to unmount device" [ -n "$VERBOSE" ] && echo "unmount SATA $DEV" umount "$MNT" || return 1 mounted && return 1 [ -n "$VERBOSE" ] && echo "unmount ok" fi dounregister || return 1 return 0 } # MAIN unset VERBOSE if [ "$1" = "-v" ]; then VERBOSE=1 shift fi if [ "$1" = "mount" ]; then if domount; then echo "esata mounted on $MNT" else echo "$0: cannot mount esata" >&2 dounregister fi elif [ "$1" = "umount" -o "$1" = "unmount" ]; then if doumount; then echo "esata is unmounted" else error_exit "cannot unmount esata" fi elif [ "$1" = "register" ]; then if doregister; then echo "esata drive registered as $BASEDEV" partitioned || echo "WARNING: drive is not partitioned" else error_exit "cannot register esata" fi elif [ "$1" = "status" ]; then if mounted; then echo "esata mounted on $MNT" elif registered; then echo "esata registered as $BASEDEV but not mounted" partitioned || echo "WARNING: drive is not partitioned" else echo "esata is unregistered" fi #mount | grep "$DEV" #scsiadd -p | grep "scsi1" else echo "usage: $0 [-v] " fi exit 0