Created
July 31, 2017 04:28
-
-
Save jedimstr/af6052975fd5f57fd6dc6e1732477aeb to your computer and use it in GitHub Desktop.
Identify Drive for unRAID or Linux
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment