#!/bin/bash SECTORS=$(parted ${1} unit s print | grep '^Disk /dev' | cut -d: -f2 | sed 's/ //g;s/s//g') HDDSIZE=$((${SECTORS} * 512)) BLKSIZE=$((4 * 1024)) TBLOCKS=$((${HDDSIZE} / ${BLKSIZE})) DESTROY=true EXHAUST=12 echo Device ${1} is $(printf "%'d" ${HDDSIZE}) bytes echo Testing $(printf "%'d" ${TBLOCKS}) blocks of $(printf "%'d\n" ${BLKSIZE}) bytes using 1/${EXHAUST} exhaustion. POINTER=$((${RANDOM} % ${EXHAUST})) BEGIN=$(date +%s) until [ ${POINTER} = ${TBLOCKS} ]; do # RUNTIME=$(($(date +%s) - ${BEGIN})) # RTD=$((${RUNTIME} / 86400)) # RTH=$((${RUNTIME} % 86400 / 3600)) # RTM=$((${RUNTIME} % 3600 / 60)) # RTS=$((${RUNTIME} % 60)) # ETATIME=$(echo "scale=6;${RUNTIME}/(${POINTER}+1)*${TBLOCKS}+0.5" | bc | cut -d. -f1) # [[ -z ${ETATIME} ]] && ETATIME=0 # ETD=$((${ETATIME} / 86400)) # ETH=$((${ETATIME} % 86400 / 3600)) # ETM=$((${ETATIME} % 3600 / 60)) # ETS=$((${ETATIME} % 60)) # ETRTIME=$((${ETATIME} - ${RUNTIME})) # ERD=$((${ETRTIME} / 86400)) # ERH=$((${ETRTIME} % 86400 / 3600)) # ERM=$((${ETRTIME} % 3600 / 60)) # ERS=$((${ETRTIME} % 60)) # echo -n RUN $(printf "%02d:%02d:%02d:%02d\n" ${RTD} ${RTH} ${RTM} ${RTS})' ' # echo -n ETA $(printf "%02d:%02d:%02d:%02d\n" ${ETD} ${ETH} ${ETM} ${ETS})' ' # echo -n ETR $(printf "%02d:%02d:%02d:%02d\n" ${ERD} ${ERH} ${ERM} ${ERS})' ' echo -n BLK $(printf "%012d" ${POINTER} | sed 's/\(...\)\(...\)\(...\)\(...\)/\1,\2,\3,\4/g')... RNDDATA="$(dd if=/dev/urandom bs=${BLKSIZE} count=1 status=none | base64)"; echo -n G ${DESTROY} || ( ORGDATA="$(dd if=${1} bs=${BLKSIZE} count=1 skip=${POINTER} status=none | base64)"; echo -n B ) echo "${RNDDATA}" | base64 --decode | dd of=${1} bs=${BLKSIZE} seek=${POINTER} status=none; sync; echo -n W CHKDATA=$(dd if=${1} bs=${BLKSIZE} count=1 skip=${POINTER} status=none| base64); echo -n V ${DESTROY} || ( echo "${ORGDATA}" | base64 --decode | dd of=${1} bs=${BLKSIZE} seek=${POINTER} status=none; sync; echo -n R ) [[ "${CHKDATA}" == "${RNDDATA}" ]] && echo -ne "\r" || echo "...FAILED" ((POINTER+=${EXHAUST})) done