#!/bin/bash
+#
+# esata
+# Version: __appVersion__
+#
+# Add, remove, mount, and unmount external SATA drives
-DEV=/dev/sdb2
+BASEDEV=/dev/sdc
+PARTITION=2
MNT=/media/esata
+# ----
+DEV=${BASEDEV}${PARTITION}
DELAY=5
-SCSIDEV=1 # This can change based on OS, etc.
+
+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 "$DEV" ]; then
+ if [ -b "$BASEDEV" ]; then
[ -n "$VERBOSE" ] && echo "registered"
return 0
else
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"
}
doregister() {
+ have_root || error_exit "need root privileges to register device"
registered && return 0
[ -n "$VERBOSE" ] && echo "register SATA device"
- scsiadd -a $SCSIDEV 0 0 0 >/dev/null || return 1
+ scsiadd -a $(scsi_dev) 0 0 0 >/dev/null || return 1
sleep $DELAY
registered || return 1
[ -n "$VERBOSE" ] && echo "register ok"
}
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
}
dounregister() {
+ have_root || error_exit "need root privileges to unregister device"
registered || return 0
[ -n "$VERBOSE" ] && echo "unregister SATA device"
- scsiadd -r $SCSIDEV 0 0 0 >/dev/null || return 1
+ scsiadd -r $(scsi_dev) 0 0 0 >/dev/null || return 1
sleep $DELAY
registered && return 1
[ -n "$VERBOSE" ] && echo "unregister ok"
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
if doumount; then
echo "esata is unmounted"
else
- echo "$0: cannot unmount esata" >&2
- exit 1
+ error_exit "cannot unmount esata"
fi
elif [ "$1" = "register" ]; then
if doregister; then
- echo "esata registered as $DEV"
+ echo "esata drive registered as $BASEDEV"
+ partitioned || echo "WARNING: drive is not partitioned"
else
- echo "$0: cannot register esata" >&2
- exit 1
+ 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 $DEV but not mounted"
+ echo "esata registered as $BASEDEV but not mounted"
+ partitioned || echo "WARNING: drive is not partitioned"
else
echo "esata is unregistered"
fi