119 lines
No EOL
3.1 KiB
Bash
119 lines
No EOL
3.1 KiB
Bash
#!/bin/bash
|
|
|
|
export OMIT=0
|
|
|
|
[ ${DEBUG:=0} -gt 0 ] && set -x -v
|
|
|
|
declare -a DRIVES MODELS CHOICE
|
|
typeset -x DRIVES MODELS CHOICE CMDS
|
|
|
|
TMPFILE="/tmp/identify_drive.$$"
|
|
|
|
trap "rm -f ${TMPFILE}" EXIT HUP INT QUIT TERM
|
|
|
|
CMDS="quit"
|
|
|
|
# --------------------------------------------------------------------- #
|
|
# Function : LOAD_DRIVES #
|
|
# Description : Reads directory with ls parses and stores into array. #
|
|
# used later to retreive drive for printing details #
|
|
# Parameters : Nothing #
|
|
# Returns : Nothing #
|
|
# Environment : DRIVES array, MODELS array #
|
|
# --------------------------------------------------------------------- #
|
|
load_drives()
|
|
{
|
|
ls -l /dev/disk/by-id/ | egrep 'ata\-' > ${TMPFILE}
|
|
|
|
# rwxrwxrwx 1 root root 9 Apr 20 08:04 ata-Hitachi_HTS722020K9SA00_071007DP0400DTG101HA -> ../../sdf
|
|
# lrwxrwxrwx 1 root root 10 Apr 20 08:04 ata-Hitachi_HTS722020K9SA00_071007DP0400DTG101HA-part1 -> ../../sdf1
|
|
# I know it's inefficient.
|
|
# but piping mount into loop creates a subprocess
|
|
# whereby the export inside the loop never gets
|
|
# back to the parent.
|
|
|
|
i=0
|
|
while read PERMS LINKS OWNER GROUP XX MONTH DD HHMM MODEL LINKER DEV
|
|
do
|
|
# ${parameter:offset:length}
|
|
NAME=${DEV:6:4} # Save Whole Drive
|
|
DEV=${DEV:6:3} # Remove Partition #
|
|
if [ ${DEV} != ${NAME} ]; then continue; fi
|
|
for OMODEL in ${OMIT_MODELS[*]}
|
|
do length=${#OMODEL}
|
|
if [ ${MODEL:0:$length} = ${OMODEL} ];then OMIT=1;fi
|
|
done
|
|
if [ ${OMIT:=0} -gt 0 ]
|
|
then OMIT=0
|
|
continue
|
|
fi
|
|
DRIVES[$i]="/dev/${DEV}"
|
|
MODELS[$i]="${MODEL}"
|
|
CHOICE[$i]="/dev/${DEV} ${MODEL}"
|
|
((i++))
|
|
done < ${TMPFILE}
|
|
|
|
rm -f ${TMPFILE}
|
|
|
|
}
|
|
|
|
|
|
present_drives()
|
|
{
|
|
PS3="identify> "
|
|
select DRIVE in "${CHOICE[@]}" ${CMDS}
|
|
do
|
|
echo "DRIVE: $DRIVE, REPLY: ${REPLY}"
|
|
if [ -z "${DRIVE}" -a ! -z "${REPLY}" ]
|
|
then DRIVE="${REPLY}"
|
|
fi
|
|
if [ -z "${DRIVE}" ]
|
|
then return
|
|
fi
|
|
case "${DRIVE}" in
|
|
q*|Q* ) exit;;
|
|
e*|e* ) exit;;
|
|
* ) set ${DRIVE}; identify $@; return;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
|
|
|
|
identify()
|
|
{
|
|
|
|
ID=$1
|
|
[ ! -z "${2}" ] && ID="$ID ($2)"
|
|
|
|
echo -e "Reading ${ID}"
|
|
while ! read -n1 -t1
|
|
do
|
|
echo -e "\r\007press ANY key to stop: [+]: \c"
|
|
dd if=$1 of=/dev/null bs=1025K count=10 skip=${SKIP} 2>/dev/null
|
|
read -n1 -t1 && break
|
|
((SKIP=SKIP+1000))
|
|
|
|
echo -e "\r\007press ANY key to stop: [x]: \c"
|
|
dd if=$1 of=/dev/null bs=1025K count=10 skip=${SKIP} 2>/dev/null
|
|
read -n1 -t1 && break
|
|
((SKIP=SKIP+1000))
|
|
|
|
echo -e "\r\007press ANY key to stop: [-]: \c"
|
|
dd if=$1 of=/dev/null bs=1025K count=100 skip=${SKIP} 2>/dev/null
|
|
# sleep 1
|
|
((SKIP=SKIP+10000))
|
|
done
|
|
echo -e "\nDone."
|
|
}
|
|
|
|
|
|
if [ ! -z "${1}" ]
|
|
then identify $1
|
|
exit
|
|
fi
|
|
|
|
while true
|
|
do load_drives
|
|
present_drives
|
|
done |