#!/bin/sh

if [ $# -ne 3 -a $# -ne 4 ]; then
	echo "usage: $0 srcpart dstpart blkno [count]" 1>&2
	exit 1
fi

src=$1; hassrc=0
dst=$2; hasdst=0
blk=$3; hasblk=0
num=$4; hasnum=0

disks=`sysctl hw.disknames`
for dk in $disks; do
	case "$src" in
	$dk[a-z]) hassrc=1; ;;
	esac
	case "$dst" in
	$dk[a-z]) hasdst=1; ;;
	esac
done

case "$blk" in
[0-9]*) hasblk=1; ;;
esac

case "$num" in
[0-9]*) hasnum=1; ;;
esac

src="/dev/r$src"
dst="/dev/r$dst"

if [ $hassrc -eq 0 -o $hasdst -eq 0 -a $hasblk -eq 0 ]; then
	echo "bad parameters ($src,$dst,$blk)" 1>&2
	exit 1
fi

if [ $hasnum -eq 0 ]; then
	num=1
fi

if dd if="$dst" skip="$blk" bs=512 count="$num" of=/dev/null 2>/dev/null; then
	echo "$dst($blk) is ok"
else
	dd if="$src" skip="$blk" bs=512 count="$num" seek="$blk" of="$dst"
	if dd if="$dst" skip="$blk" bs=512 count="$num" of=/dev/null 2>/dev/null; then
		echo "$dst($blk) looks repaired"
	else
		echo "$dst($blk) still bad"
	fi
fi

