Mag Tape Duplication Problems
Geoff Clare
gwc at root.co.uk
Sat Feb 27 00:46:21 AEST 1988
In article <351 at wpg.UUCP> russ at wpg.UUCP (russ) writes:
>
>After hearing me brag about how great unix "tools" are for doing just
>about everything, a friend of mine asked me to duplicate a reel of
>nine-track tape that was estimated to contain app. 60 megs of data.
>
>Although I only have one nine track drive, I do have a cartridge streamer
>(20 megs) so I naively assumed that I could read and write the contents of
>the nine-track in 20 meg segments to three separate cartridge tapes and
>then concatenate the three cartridge tapes back onto a new reel of
>nine-track tape. I had figured that if 'dd' couldn't handle it, a
>simple-minded program (on the order of while getchar (putchar) would be
>able to do the job.
>
>I suppose I could repetitiously invoke 'dd' while keeping track of the
>total number of blocks, but I keep wondering what will happen if we get
>down to the end of a cartridge tape and then come across a five meg file.
>
I thought I would knock up a shell script to do the job and mail it to
Russ, but it took longer than I expected and when I was finished I
thought "Hey, this is good stuff", so I'm going to post it in the hope
that more people may find a use for it, or at least for some of the
ideas in it.
I should first issue a warning that this is totally untested, so
apologies for any bugs in it, but I think the method should work.
So here it is:
----------------------------- cut here -------------------------------
# shell script to copy mag tape to multiple cartridge volumes and back
BLOCKSIZE=10k # mag tape block size required
MAGTAPE=/dev/rmt8 # name of mag tape device
CARTRIDGE=/dev/rct # name of cartridge device
BLOCKSPERVOL=40000 # no. of 512 byte blocks to fill cartridge tape
IFS="+$IFS" # add '+' to field seperator list to ease splitting of
# dd block counts
# write cartridges until fewer then requested no. of blocks are transferred
blocks="$BLOCKSPERVOL"
vol=1
dd if="$MAGTAPE" ibs="$BLOCKSIZE" | while test "$blocks" -eq "$BLOCKSPERVOL"
do
echo "insert cartridge $vol and press RETURN"
read a </dev/tty
a=`dd count="$BLOCKSPERVOL" of="$CARTRIDGE" 2>&1`
echo $a
set -- $a
blocks=`expr $1 \+ $2`
eval b"$vol"="$blocks"
vol=`expr $vol \+ 1`
done
echo "insert blank mag tape to receive copy and press RETURN"
read a
# write back cartridges - no of blocks on each volume is in b$vol
outvol=1
while test "$outvol" -lt "$vol"
do
echo >&2 "insert cartridge $outvol and press RETURN"
read a
eval blocks=\$b"$vol"
echo >&2 "block count should be $blocks"
dd count="$blocks" if="$CARTRIDGE"
outvol=`expr $outvol \+ 1`
done | dd obs="$BLOCKSIZE" of="$MAGTAPE"
----------------------------- cut here -------------------------------
--
Geoff Clare UniSoft Limited, Saunderson House, Hayne Street, London EC1A 9HH
gwc at root.co.uk ...!mcvax!ukc!root44!gwc +44-1-606-7799 FAX: +44-1-726-2750
More information about the Comp.unix.questions
mailing list