#!/bin/sh set -eu # In Megabytes export WIPE_SIZE=10 if [ -z "$1" ] then echo "Usage: `basename $0` drive1 drive2 ..." exit fi drives="$*" verifydrives() { for drive in $drives do if [ -e /dev/$drive ] then echo "Drive $drive verified." else echo "Drive $drive does not exist. Aborting." exit 1 fi done } seeksector() { sectors=`diskinfo $drive | awk '{print $4}'` sectorsize=`diskinfo $drive | awk '{print $2}'` mb=`echo "1024000 / 512" | bc` offset=`echo "$mb * $WIPE_SIZE" | bc` echo "$sectors - $offset" | bc } cleandrives() { for drive in $drives do dd if=/dev/zero of=/dev/$drive bs=1M count=$WIPE_SIZE >/dev/null 2>&1 dd if=/dev/zero of=/dev/$drive bs=1M seek=`seeksector $drive` >/dev/null 2>&1 done } verifydrives $drives echo "" echo "This will irreversibly destroy partition- and filesystem data on drive(s):" echo "$drives" echo "" echo "USE WITH EXTREME CAUTION!" read -r -p 'Do you confirm "yes/no": ' choice case "$choice" in yes) cleandrives $drives echo "" echo "Drive(s) cleaned." ;; no) echo "" echo "Cleaning cancelled."; break ;; *) echo "" echo "Cleaning cancelled."; break ;; esac