commit 26ce1b7e04957744d19c95371484fc33bb634fdc Author: hhf Date: Sat Sep 28 10:05:02 2024 +0530 Add identify_drive.sh diff --git a/identify_drive.sh b/identify_drive.sh new file mode 100644 index 0000000..b0b412c --- /dev/null +++ b/identify_drive.sh @@ -0,0 +1,119 @@ +#!/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 \ No newline at end of file