BASEDEV=/dev/sdc
PARTITION=2
MNT=/media/esata
-SCSIDEV=3 # This can change based on OS, bus enumeration, etc.
# ----
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"
}
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
}
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 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